FIGlet / ANSI / BBS textmode lettering generators for Resolume (FFGL) and TouchDesigner (CPlusPlus TOP) with full feature parity, built on a shared C++ rendering core.
Type a string, pick one of 37 embedded FIGlet fonts (ANSI Shadow, Bloody, DOS Rebel, Delta Corps Priest, Doh, classic figlet Standard/Slant/Big…), and get a crisp textmode render: block letters drawn with a VGA-style 8×16 cell font, box-drawing borders, CGA palette modes, gradients, ░▒▓ shade dithering, word wrap, and exact font-height sizing. No font files to install — everything is compiled into the plugin binaries.
Grab the built macOS plugins (universal, arm64 + x86_64) from Releases:
FigletText-FFGL-macOS.zip— Resolume source pluginFigletTOP-TouchDesigner-macOS.zip— TouchDesigner CPlusPlus TOP
The bundles are unsigned, so macOS quarantines downloaded copies. After unzipping, clear the flag once:
xattr -dr com.apple.quarantine FigletText.bundle # or FigletTOP.pluginCopy FigletText.bundle to ~/Documents/Resolume Arena/Extra Effects/ and
restart Resolume. It appears in the Sources panel as Figlet ANSI Text
— drag it onto a clip slot.
Any of:
- Create a CPlusPlus TOP and set its Plugin Path to
FigletTOP.plugin - Put it in a
Pluginsfolder next to your.toe(loads automatically, appears as Figlet Text in the OP Create dialog, Custom tab) - Global install:
sudo cp -R FigletTOP.plugin "$HOME/Library/Application Support/Derivative/TouchDesigner099/Plugins/"
Specimen sheet of all 37 fonts: docs/images/specimen.png
| Parameter | Values | Notes |
|---|---|---|
| Text | string | multi-line supported (\n) |
| Font | 37 fonts | 3D, 3D ASCII, 3D Diagonal, Alligator, Alpha, AMC Slash, ANSI Regular, ANSI Shadow, Banner, Banner 3D, Big, Big Money, Block, Blocks, Bloody, Caligraphy, Calvin S, Colossal, Cosmic, Def Leppard, Delta Corps Priest, Doh, Doom, DOS Rebel, Electronic, Elite, Larry 3D, Merlin, Peaks, Peaks Slant, Reverse, Slant, Slant Relief, Small, Small Poison, Standard, The Edge |
| Color Mode | Solid / Gradient H / Gradient V / Per Letter / CGA Rows | Per Letter + CGA Rows use the classic 16-color ANSI palette |
| Color A / Color B / Background | RGBA | B is the gradient end color; background defaults to transparent |
| Justify | Left / Center / Right | justifies lines of multi-line text and aligns the block horizontally in the canvas |
| V Align | Top / Center / Bottom | vertical placement of the block in the canvas |
| Word Wrap | toggle | wraps text to the canvas width (Native / Font Height modes, where character size is fixed) |
| Dither | Off / Fade Down / Fade Up / Fade Right / Noise / Scanlines | block chars degrade through █▓▒░, other glyphs use 8×8 Bayer ordered dithering |
| Dither Amount | 0–1 | |
| Border | None / Single / Double / Blocks | box-drawing frame (─│┌… or ═║╔…) |
| Padding | 0–16 cells | inside the border |
| Fit | Native / Fit Width / Fit Height / Contain / Stretch / Font Height | size normalization onto the canvas; fit-mode upscales snap to integer multiples to keep pixels crisp |
| Pixel Scale | 1–16 | cell zoom in Native mode |
| Font Height | px | exact lettering height (one figlet line) in Font Height mode |
| Canvas Resolution | w × h | TD only as a parameter; in Resolume the canvas is the composition resolution |
| Offset X/Y | −1…1 | position within the canvas, applied after alignment |
| Chunky Cells | toggle | square 8×8 cells instead of portrait 8×16 VGA cells (squat teletext look) |
| Animate | toggle | master switch; off = static render |
| Anim Mode | Marquee / Roll / Drip / Typewriter / Glitch / Marquee V | see below |
| Phase | 0–1 | scrub/offset; drive it externally (BPM in Resolume, CHOP export in TD) with Speed 0 for beat-locked animation |
| Speed | −2…2 | auto-advance in cycles/sec using the host clock |
| Anim Amount | 0–1 | effect strength |
Every mode is a pure function of phase — scrubbing, looping and beat-sync behave identically in both hosts, and the same phase always produces the same frame.
text string ──► FIGlet composer (.flf parser, kerning + smushing rules)
──► cell grid of Unicode codepoints (█ ▓ ╔ ═ … + ASCII)
──► styling (justify, wrap, border, padding, color modes, dither)
──► rasterizer (8×16 VGA-style cells from font8x8 + procedural
box/block/shade glyphs) ──► RGBA8 buffer
──► FFGL: GL texture on a quad / TD: CPU-memory TOP upload
The figlet fonts are embedded in the binary (core/embedded_fonts.cpp, generated by tools/embed_fonts.py).
git clone https://github.com/drmbt/figlet-text-plugins.git
cd figlet-text-plugins
# one-time: fetch the FFGL SDK (and optionally font sources) into deps/
git clone --depth 1 https://github.com/resolume/ffgl.git deps/ffgl
git clone --depth 1 https://github.com/xero/figlet-fonts.git deps/figlet-fonts # only to regenerate embedded fonts
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j8Produces build/FigletText.bundle, build/FigletTOP.plugin, and
build/textmode-cli (test harness: textmode-cli -t HELLO -f 7 -o out.ppm,
-list for fonts, -txt to dump the composed character grid).
TouchDesigner headers are vendored in touchdesigner/derivative/ (from the TD 2025.3x CPlusPlus samples, Derivative shared-use license). Windows builds should work from the same CMakeLists (FFGL needs GLEW there) but are untested.
Edit the FONTS list in tools/embed_fonts.py (label →
.flf file in deps/figlet-fonts), then:
python3 tools/embed_fonts.py
cmake --build build -j8Any standard .flf works; glyphs may use ASCII, Latin-1, box drawing
(U+2500–257F) and block elements (U+2580–259F).
- AskApache figlet / ASCII art generator — the style survey that kicked this off
- tat3r/tdfiglet — TheDraw BBS font renderer
- xero/figlet-fonts — the embedded
.flfcollection (various authors; ANSI Shadow traces back to TheDraw fonts) - patorjk's Text to ASCII Art Generator — where most of these fonts can be previewed
- dhepper/font8x8 — public domain 8×8 cell bitmaps
- resolume/ffgl — FFGL 2.x SDK
- TouchDesigner CustomOperatorSamples — C++ TOP reference










