tt-local-generator's Generative Art tab is powered by a discoverable plugin
system. Twelve built-in plugins ship with the app — SVG art, ANSI, animated GIFs,
color palettes, verse, circuits, constellations, and more. Each one is also exposed
as a Claude Code MCP tool, so you can call any generator directly from a conversation.
Drop a new directory into ~/.config/tt-local-gen/plugins/ to add your own.
All built-in plugins live in plugins/ at the repo root. Each one has an
mcp.json manifest declaring its tool schema, output type, and remix graph edges,
plus a plugin.py with an ArtGenerator subclass that runs the generation.
Layered SVG landscape scenes — sky gradients, terrain silhouettes, atmospheric effects. Eleven named palettes (volcanic, arctic, toxic, midnight…). The LLM receives a structured prompt specifying horizon divisions, color zones, and decorative elements; outputs raw SVG that the app renders and archives.
Urban skyline silhouettes against atmospheric skies. Era selector spans Victorian to brutalist to sci-fi; sky presets cover dawn through storm. Each generation produces a unique building density, bridge configuration, and light scatter pattern. Good source material for image-to-video remixing.
Invented star charts with mythological lore. The LLM designs a constellation shape as a sequence of star coordinates, names the figure, and writes accompanying mythology. The SVG renderer draws the connecting lines, star glyphs at varying magnitudes, and decorative star-field scatter.
Abstract geometric compositions: line grids, triangle fields, hexagonal tilings, and rectangle decompositions. Three complexity levels (minimal, balanced, dense) and six named palettes. The LLM decides element placement, opacity layering, and accent color use within the palette constraints.
PCB-style circuit diagram art. The LLM places logic gates, trace routes, pad arrays, and chip outlines in a fixed-grid SVG coordinate system. Gate shapes are selectable (ANSI, IEC, or symbolic). Output looks like a functional schematic but is purely decorative — good for backgrounds and poster art.
Named color palettes with evocative prose lore. The LLM invents a 4–8 color set, names the palette ("Drowned Ironwork", "Fever Season"), and writes 2–3 sentences of sensory description — what the palette feels like, not what it looks like. Output is JSON with hex values, role labels, and lore text. Optionally exports CSS custom properties.
Structured text art in four forms: haiku sequences (5-7-5), world-building lore fragments (codex-style, under 80 words), epitaphs (solemn, compressed), and rhyming couplets. Each form has a strict system prompt tuned for that register. Haiku shine at small model sizes; lore and epitaphs benefit from larger.
Open-ended text generation with a single user-supplied instruction. No form constraints — the LLM writes whatever the instruction says. Useful for generating custom prompts, short prose, lists, or any text that doesn't fit a structured form. The instruction is the entire prompt; no post-processing.
xterm-256 color ANSI art on a 40×20 character canvas via a three-pass
LLM pipeline: (1) ASCII structure — spatial composition with plain text;
(2) block refinement — replace dense chars with ░▒▓█▀▄; (3) colorization —
wrap each character with \033[38;5;Nm escape sequences.
BBS style uses neon-on-void palette rules; scene/landscape use naturalistic colors.
Animated GIF generation using the SD 1.4 TTNN UNet pipeline on Blackhole hardware. No server, no Docker — runs directly on the Blackhole chip via the TTNN runtime. Uses cross-frame temporal attention for motion continuity. Best subjects: natural cyclical motion — fire, water, wind, breath, foliage. ~5 min/frame on a single P300c.
Utility plugin exposing five ffmpeg operations as MCP tools. Used internally by the Remix engine for silent format conversions (e.g. video → I2V seed frame). Also callable from Claude Code sessions for media manipulation tasks. Utility plugins don't appear in the Art tab generator picker — they're infrastructure.
Delegate plugin for the tt-midi-maker MCP server. When the server is
running, generate_midi produces MIDI files from text prompts,
verse, or palette hints. The manifest also declares a stream_midi
tool for continuous generative MIDI output. This plugin demonstrates the
MCP-server-backed pattern — no plugin.py required.
Right-click any gallery card to apply a forge-powered transform. Results appear as new cards and feed straight into the Remix flow — use a background-removed image as a SkyReels I2V seed, or a depth map as compositing reference.
Isolates the foreground subject into a transparent PNG using RMBG-1.4. No hardware needed — runs in the tenstorrent Python venv in ~15–30 seconds.
Generates a natural-language caption for any image using BLIP. The caption populates the prompt field — useful as a starting point for variations or as a video prompt.
Produces a grayscale depth map from any image using GLPN-KITTI. Brighter = closer to camera. Useful as a compositing hint or ControlNet conditioning reference.
All generated on a single Blackhole P300c, no cloud, no server.
Every artifact can be remixed into another type. Click 🔀 Remix on any
card or in the detail panel to see valid targets. The app derives this list from each
plugin's accepts_remix_from and can_remix_to declarations —
no hardcoded routing tables.
Ingredients are target-aware — the popover shows different checkboxes depending on which target you're remixing toward. Technical conversions (video → frame, SVG → PNG) happen silently via the ffmpeg plugin; you never see a dialog for them.
The built-in MCP server exposes all loaded plugins as MCP tools on port 8003. Once registered, you can call any generator — landscape, verse, animatediff, your own custom plugin — directly from a Claude Code conversation.
# Start the MCP server
python3 app/mcp_server.py
# Print the Claude Code configuration snippet
tt-ctl mcp-config
# → {"tt-local-gen": {"url": "http://localhost:8003/mcp"}}
# Add it to Claude Code's MCP config
tt-ctl mcp-config # outputs JSON; merge into ~/.claude/mcp.json (don't use >>)
After registration, all plugins appear as tt-local-gen:<tool-name>.
# Ask Claude to generate a palette and use it as a video prompt seed
> Generate a color palette for "abandoned carnival" and then use it
to make a video prompt
# Claude calls: tt-local-gen:palette {"mood": "abandoned carnival"}
# Then remixes the palette JSON into a video prompt via the ingredient model
If your generator runs in a separate process (Node.js, a remote API, another language),
declare mcp_server in mcp.json instead of writing plugin.py:
{
"x-ttlg": {
/* ... standard fields ... */
"mcp_server": {
"command": "npx",
"args": ["-y", "my-mcp-generator"]
}
},
"tools": [{ /* standard MCP tool schema */ }]
}
The app launches your server process and communicates via JSON-RPC 2.0 over stdio
(standard MCP wire protocol). See plugins/midi/mcp.json for a complete example.
| Field | Type | Description |
|---|---|---|
| output_ext | string | File extension for the generated artifact (.txt, .svg, .gif, .json) |
| media_type | string | How the app classifies this artifact (text, image, video, midi) |
| accepts_remix_from | string[] | Source artifact types this generator accepts as remix input |
| can_remix_to | string[] | Target types this generator's output can be remixed into |
| tab | string | App tab — use generative-art for the Art tab |
| hardware | string|null | blackhole, wormhole, or null (CPU) |
| utility | bool | true for non-generator utility plugins (ffmpeg etc.) — hidden from Art tab picker |
| mcp_server | object | Present only for MCP-server-backed plugins: {command, args} |
| streaming (tool) | null|"progress"|"continuous" | null = one-shot; progress = SSE progress events; continuous = runs until cancelled |
| artifact_tool (tool) | bool | true if this tool produces the primary artifact |
For the full authoring guide including the complete Vale example, multi-pass pipeline
patterns, and the ArtGenerator API reference, see
PLUGIN_AUTHORING.md in the repository.