CitCat Demo Download GitHub
Contents

CitCat Manual

What is CitCat?

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.


The editor at a glance

┌──────────────────────────────────────────────────────────┐
│  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.


Objects

Place objects on the canvas with the toolbar or Insert menu.

ObjectKeyWhat it is
TextTText block. Supports word wrapping.
RectangleRSolid or stroked rectangle with rounded corners.
EllipseECircle or oval.
ImageIPNG, JPG, GIF (animated). File picker opens.
VideoMMP4, WebM, MOV clip. Plays in sync with timeline.
AudioAMP3, WAV, OGG. Invisible on stage, visible in timeline.
SVGSScalable vector graphic. Great for logos and icons.
ButtonBStyled rectangle with a label. Comes with a default click event.
HotspotHInvisible in export, dashed outline in editor. Clickable area.

Working with objects

Properties

Select an object to see its properties in the right panel:


Scenes

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.


Animation

Keyframes

A keyframe says: "at this moment in time, this property has this value."

  1. Select an object
  2. Move the playhead to a time on the timeline
  3. Double-click the object's track to add a keyframe
  4. Change a property (position, opacity, colour...)
  5. Move the playhead to another time, add another keyframe
  6. Hit Play — CitCat interpolates between them

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.

Effects

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.

Motion paths

Draw a curved path for an object to follow:

  1. Select an object
  2. Switch to the Path tool (P)
  3. Click on the canvas to add path points — a bezier curve forms
  4. Drag the control handles to shape the curve
  5. CitCat automatically adds progress keyframes (0% → 100%)
  6. Hit Play — the object follows the curve

Double-click a path point to delete it. Clear the entire path in the Properties panel.

Object lifespan

By default, objects are visible for the entire scene. To make an object appear or disappear at a specific time:


Interactivity

Make your content respond to user actions — without code.

Events

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"

Wait points

Pause the timeline until a condition is met:

Wait points work in both the editor and exported HTML5.


Data binding

Connect to a database and bind object properties to data columns. This is CitCat's power feature.

Connect

  1. Click the Data button in the toolbar (or Playback > Data Source)
  2. Choose a source type: SQLite, CSV, or PostgreSQL
  3. Enter the file path or connection string
  4. Click Connect
  5. Pick a table — the data browser shows columns and rows

Bind

  1. Select an object on the canvas
  2. In Properties > Bindings, click "+ Bind"
  3. Choose which property to bind (content, fill colour, etc.)
  4. Choose which database column to bind it to
  5. Optional: add a transform (uppercase, currency format, image path prefix)

Preview

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.

Conditional visibility

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.

Batch export

  1. Open Export (Ctrl+E)
  2. Check "Export all rows"
  3. Choose an output folder
  4. Optionally pick a column to name files by
  5. Click Export

CitCat renders one HTML5 page per database row. 200 products → 200 pages.


Export

HTML5

Single file — one .html file with everything embedded (JS, images as base64). Just open it in a browser.

Folderindex.html + runtime.js + project.json + assets/. Smaller, better for large projects with many images or videos.

Options:

MP4 Video

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.

Batch

When a data source is connected, batch export produces one output per database row. Available for both HTML5 and MP4.


Subtitles

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.


Templates

Save your project as a reusable template:

Templates strip data bindings and personal content. The demo showcase is a built-in template.


Keyboard shortcuts

ShortcutAction
VSelect tool
TText tool
RRectangle tool
EEllipse tool
IImage tool
BButton tool
HHotspot tool
PMotion Path tool
MVideo tool
AAudio tool
SSVG tool
GToggle grid snap
SpacePlay / Pause
Del / BackspaceDelete selected
Ctrl+NNew project
Ctrl+OOpen project
Ctrl+SSave
Ctrl+EExport
Ctrl+ZUndo
Ctrl+Shift+ZRedo
Ctrl+DDuplicate
Ctrl+C / Ctrl+VCopy / Paste
Ctrl+0Reset zoom
F5Fullscreen preview
Shift+drag handleKeep aspect ratio
Shift+clickAdd to multi-selection
Middle-click dragPan canvas
Ctrl+scrollZoom canvas

CLI

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

MCP Server (for AI agents)

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.


File format

CitCat projects are saved as .citcat files — plain JSON. Human-readable, version-controllable, diffable. The format matches the internal data model exactly.


Effect plugin format

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.