ttysvg
Internals

Known limits

What ttysvg does not do, stated plainly.

Redaction matches within one run of same styled text

A secret is masked when it sits in a single stretch of one color on one line. If a syntax highlighter splits it across colors, or it wraps to the next line, the pattern will not see it as one string.

Check the output before publishing rather than assuming a pattern caught everything.

A saved capture cannot be resized

ttysvg render can change every visual and timing setting except --cols and --rows. A capture stores the terminal grid after wrapping, not the bytes that produced it, so reflowing to a new width would need the recording to be made again.

Character width is assumed, not measured

The output uses a generic monospace font stack and assumes each character is 0.6 times the font size wide. If text drifts to the right across a long line, pin it with --advance or the advance tape directive.

Embedding a subset font would fix this properly and is the top item on the roadmap. It also affects raster output more than browser SVG, because resvg picks a specific font rather than honouring the whole stack.

Wide characters depend on the viewer's font

CJK, emoji and box drawing are placed using the terminal grid's own width tracking, but a font that disagrees will still look off by a cell.

Long recordings make large files

Heavy animation means many frames. trim-idle and speed are the levers, and dropping the frame rate of the recorded program helps more than either.

On this page