CitCat is a visual content engine. You design animated, interactive scenes on a canvas — then connect a database and render hundreds of pages or videos from one template. No coding required.
It comes from the same idea as SWiSH (the Flash-era animation tool) and CapCut (the timeline editor), but outputs modern HTML5 that runs in any browser. The twist: database binding turns it into a content factory.
┌──────────────────────────────────────────────────────────┐
│ Toolbar │
│ [Play][Pause][Stop] │ Tools │ [New][Save][Open][Export] │
├──────────────────────────────────────────┬────────────────┤
│ │ Properties │
│ Canvas │ Panel │
│ │ │
├──────────┬───────────────────────────────┴────────────────┤
│ Scenes │ Timeline │
│ Layers │ │
└──────────┴────────────────────────────────────────────────┘
All panels are resizable — drag the splitter edges between them.
Everything is also in the macOS menu bar: File, Edit, View, Insert, Scene, Playback.
Place objects on the canvas with the toolbar or Insert menu.
| Object | Key | What it is |
|---|---|---|
| Text | T | Text block. Supports word wrapping. |
| Rectangle | R | Solid or stroked rectangle with rounded corners. |
| Ellipse | E | Circle or oval. |
| Image | I | PNG, JPG, GIF (animated). File picker opens. |
| Video | M | MP4, WebM, MOV clip. Plays in sync with timeline. |
| Audio | A | MP3, WAV, OGG. Invisible on stage, visible in timeline. |
| SVG | S | Scalable vector graphic. Great for logos and icons. |
| Button | B | Styled rectangle with a label. Comes with a default click event. |
| Hotspot | H | Invisible in export, dashed outline in editor. Clickable area. |
Select an object to see its properties in the right panel:
A project has one or more scenes. Think of them as pages in a presentation, or shots in a video.
Each scene has its own canvas, timeline, and objects. Navigate between scenes with Scene > Next / Previous.
A keyframe says: "at this moment in time, this property has this value."
Easing options: Linear (constant speed), Ease In (slow start), Ease Out (slow end), Ease In-Out (slow start and end). Right-click a keyframe to change its easing.
Built-in animation presets. Select an object, pick an effect from the FX dropdown in the toolbar:
Entrance: Fade In, Slide In (Left/Right/Up/Down), Scale Up, Typewriter Exit: Fade Out, Slide Out (Left/Right), Scale Down Emphasis: Pulse, Bounce Motion: Spin, Float
Effects are just keyframe bundles — once applied, they become regular keyframes you can edit.
Custom effects: drop a .json file into effects/custom/ and it appears in the FX dropdown. See the built-in effects for the format.
Draw a curved path for an object to follow:
Double-click a path point to delete it. Clear the entire path in the Properties panel.
By default, objects are visible for the entire scene. To make an object appear or disappear at a specific time:
Make your content respond to user actions — without code.
Select an object, open the Events section in Properties, and click "+ Add Event":
Triggers (when something happens):
Actions (what to do):
Example: "When the 'Next' button is clicked → Go to Scene 2"
Pause the timeline until a condition is met:
Wait points work in both the editor and exported HTML5.
Connect to a database and bind object properties to data columns. This is CitCat's power feature.
Use the row stepper in the data panel (◀ row 3 of 200 ▶) to preview different rows. The canvas updates live — you see exactly what each exported page will look like.
In Properties > Condition, set a rule: "Show this object only when column X equals Y." Objects that fail the condition are hidden for that row's export.
CitCat renders one HTML5 page per database row. 200 products → 200 pages.
Single file — one .html file with everything embedded (JS, images as base64). Just open it in a browser.
Folder — index.html + runtime.js + project.json + assets/. Smaller, better for large projects with many images or videos.
Options:
Renders each frame to PNG and stitches them with ffmpeg. Requires ffmpeg installed on your system.
Resolution presets: 720p, 1080p, 4K.
Note: interactive elements (buttons, events) are visible but not functional in video — it's a recording of the animation.
When a data source is connected, batch export produces one output per database row. Available for both HTML5 and MP4.
Import SRT or VTT subtitle files, or create entries manually.
Subtitles are burned into the Canvas during playback and export — white text on a dark bar at the bottom of the stage.
Save your project as a reusable template:
Templates strip data bindings and personal content. The demo showcase is a built-in template.
| Shortcut | Action |
|---|---|
| V | Select tool |
| T | Text tool |
| R | Rectangle tool |
| E | Ellipse tool |
| I | Image tool |
| B | Button tool |
| H | Hotspot tool |
| P | Motion Path tool |
| M | Video tool |
| A | Audio tool |
| S | SVG tool |
| G | Toggle grid snap |
| Space | Play / Pause |
| Del / Backspace | Delete selected |
| Ctrl+N | New project |
| Ctrl+O | Open project |
| Ctrl+S | Save |
| Ctrl+E | Export |
| Ctrl+Z | Undo |
| Ctrl+Shift+Z | Redo |
| Ctrl+D | Duplicate |
| Ctrl+C / Ctrl+V | Copy / Paste |
| Ctrl+0 | Reset zoom |
| F5 | Fullscreen preview |
| Shift+drag handle | Keep aspect ratio |
| Shift+click | Add to multi-selection |
| Middle-click drag | Pan canvas |
| Ctrl+scroll | Zoom canvas |
CitCat includes a command-line interface for scripting and automation.
# Create a new project
citcat-cli new "My Project" --output project.citcat
# Get project info
citcat-cli info project.citcat
# Add objects
citcat-cli add-scene project.citcat --name "Intro" --duration 5000
citcat-cli add-object project.citcat --scene 0 --type text --content "Hello" --x 100 --y 100
# Bind data
citcat-cli bind project.citcat --scene 0 --object 0 --property content --column product_name
# Export
citcat-cli export html project.citcat ./output/ --single-file --autoplay
# Batch export from database
citcat-cli batch project.citcat ./pages/ --db products.sqlite --name-column slug
CitCat runs as an MCP tool server, letting AI agents create and export projects programmatically.
# Start the MCP server (reads JSON-RPC from stdin)
citcat-mcp
18 tools available: project_new, project_open, project_save, scene_add, object_add, keyframe_add, event_add, effect_apply, data_connect, data_bind, export_html, export_batch, and more.
An agent can build a complete animated product showcase, bind it to a database, and export 200 pages — without any human touching the GUI.
CitCat projects are saved as .citcat files — plain JSON. Human-readable, version-controllable, diffable. The format matches the internal data model exactly.
Create a JSON file in effects/custom/:
{
"id": "my-wobble",
"name": "Wobble",
"category": "Emphasis",
"duration_ms": 1000,
"applies_to": ["Text", "Rect", "Ellipse", "Image"],
"keyframes": [
{ "time_ms": 0, "property": "transform.rotation", "value": { "Number": 0 }, "easing": "Linear" },
{ "time_ms": 250, "property": "transform.rotation", "value": { "Number": 10 }, "easing": "EaseInOut" },
{ "time_ms": 750, "property": "transform.rotation", "value": { "Number": -10 }, "easing": "EaseInOut" },
{ "time_ms": 1000, "property": "transform.rotation", "value": { "Number": 0 }, "easing": "EaseInOut" }
]
}
Effects are automatically picked up when the FX dropdown opens.