Skip to content

drmbt/figlet-text-plugins

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

figlet-text-plugins

FIGlet / ANSI / BBS textmode lettering generators for Resolume (FFGL) and TouchDesigner (CPlusPlus TOP) with full feature parity, built on a shared C++ rendering core.

Figlet TOP rendering VVEX in ANSI Shadow

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.

Download

Grab the built macOS plugins (universal, arm64 + x86_64) from Releases:

  • FigletText-FFGL-macOS.zip — Resolume source plugin
  • FigletTOP-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.plugin

Install — Resolume

Copy 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.

Install — TouchDesigner

Any of:

  • Create a CPlusPlus TOP and set its Plugin Path to FigletTOP.plugin
  • Put it in a Plugins folder 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/"

Styles

ANSI Shadow Bloody gradient Dithered Delta Corps Priest Elite with CGA rows + double border

Specimen sheet of all 37 fonts: docs/images/specimen.png

Parameters (identical in both plugins)

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

Animation

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.

Marquee Marquee — the block travels across the canvas (wraps in place when there's no canvas)
Roll Roll — per-column vertical roll, slot-machine style
Drip Drip — hashed drops descend from the lettering leaving ░▒▓ trails; loops seamlessly
Typewriter Typewriter — letter-by-letter reveal
Glitch Glitch — quantized row shifts and character corruption
Marquee V Marquee V — credits roll: travels bottom-to-top (wraps in place without a canvas)

How it works

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).

Build from source (macOS)

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 -j8

Produces 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.

Adding fonts

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 -j8

Any standard .flf works; glyphs may use ASCII, Latin-1, box drawing (U+2500–257F) and block elements (U+2580–259F).

Inspiration & credits

About

FIGlet/ANSI/BBS textmode lettering generators: Resolume FFGL plugin + TouchDesigner C++ TOP, 37 embedded fonts, shared C++ core

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages