One image and a sentence in. A sheet of frames out. Sliced, played, exported.
An open-source tool from HYPRGRPH · more tools
SEQ is a local production suite for grid-based animation and pre-visualization. The core move is simple: ask an image model for a whole sheet of frames in a single call, slice the sheet, and string the stills into motion. Thirteen more modules sit around that primitive, sharing one library and one spend ledger.
A video model gives you one clip you did not fully control. A sheet gives you sixteen frames from one generation, so they share lighting, design, and line weight, and you can see the whole motion at a glance before spending anything else. One 4K sheet costs about the same as one image. Sixteen separate images cost sixteen times that and drift apart.
The trick is geometry. Image models only emit a fixed set of sheet ratios. A 4x3 grid of 16:9 frames is a 21:9 sheet, which no model offers unless you ask for exactly that. SEQ snaps the requested frame aspect times the grid to a legal sheet ratio, tells the model the true frame aspect that results, and draws the composition overlay at that exact ratio. Most "broken grid" output comes from getting this wrong.
| step | what happens |
|---|---|
| 1. Input | Drop a reference image, or pick one from the library, and describe the motion or the scene. Already have a sheet? Drop it on the stage and skip generation. |
| 2. Sheet | One call to Nano Banana Pro at 4K returns an N×M sheet. Frames mode asks for one continuous motion; Scene mode asks for distinct shots. |
| 3. Slice | Client-side canvas slice with an optional per-edge inset to crop the thin grid lines the model tends to draw. Imported sheets get their grid detected from the seams between cells. |
| 4. Play | Scrub or play at 6 to 24fps, all boards concatenated. Loop, ping-pong or play once, and hold each drawing on 1s, 2s or 3s. Sheet view shows the whole grid with the current cell lit. Chain boards to extend the sequence. |
| 5. Export | Local ffmpeg. Flipbook at your fps, or motion-compensated in-betweens up to 60fps. Ping-pong and holds carry into the file. No upload, no fee. |
The Storyboard intro and empty stage offer a bundled 4x4 sample sheet. Slicing, playback, the keyboard transport and MP4 export all run locally, so the whole loop works before you paste a key.
| key | action |
|---|---|
| Space | Play / pause |
| ← → | Step one frame (Shift jumps one second) |
| Home / End | First / last frame |
| L | Cycle loop, ping-pong, once |
| [ ] | Slower / faster |
| G | Player / sheet view |
| ? | Show the shortcuts |
| tier | how | cost | use when |
|---|---|---|---|
| 0 | flipbook, holds on 1s/2s/3s | free | hand-drawn / limited animation look |
| 1 | minterpolate in-betweens (export, smooth on) |
free | continuous motion, small deltas between frames |
| 2 | RIFE in local ComfyUI | free, GPU | cleaner in-betweens, no ghosting |
| 3 | LTX-2.5 first-to-last between consecutive frames | free, GPU | real parallax and occlusion |
| 4 | Seedance 2 or MiniMax H3 first-last via MUAPI (Interpolator) | paid | when local cannot do it |
Tiers 0 and 1 are built into Storyboard. Tiers 2 through 4 are reachable through the Interpolator module and external ComfyUI today.
| group | module | what it does |
|---|---|---|
| Board | Storyboard | The core loop above. |
| Graphic Novel | Manga page layouts with PSD export. | |
| Previs | Screenplay in, boards and animatics out. | |
| World | Story bible with characters, locations, beats, and an agent that hands context to other modules. | |
| Motion | OmniShot | Idea in, planned multi-block video sequence out. |
| Riff | Frame-chained image evolution. | |
| Interpolator | First-to-last-frame video transitions between sliced frames. | |
| Visualizer | Audio-reactive sequences. | |
| Cascader | Chain sheets end to end: each sheet's last frame seeds the next. Optional lyric and audio sync. | |
| Transform | Remuxer | Scene-detect a video, restyle it sheet by sheet, reassemble. |
| Swapper | Style, face, and scene transforms. | |
| Style Transfer | Progressive video restyling. | |
| GridSeq | Slice and resequence any grid. | |
| Finish | Assembly | Multi-track timeline with a real ffmpeg render. |
Everything generated or imported lands in one library. Search by name, prompt or tag. Click anything to view it full screen, step through with the arrow keys, rename it, favorite it, file it, download it, or send it straight back into Storyboard as the next reference.
git clone https://github.com/wexloops/seq.git
cd seq
npm install
cp .env.example .env.local # optional: or paste keys in the app
npm run dev # http://localhost:3000Requirements: Node 20+, ffmpeg on PATH (libx264 or libopenh264). For the desktop shell: npm run dev:electron, and npm run build:electron for a Windows installer.
Two keys run the whole suite. Paste them into the Keys panel in the header, or put them in .env.local yourself. Either way they live server side and never reach the browser: the panel writes .env.local through an endpoint that only accepts same-origin JSON from the machine running SEQ, applies the key without a restart, and only ever reports back whether a key is set.
| key | needed for |
|---|---|
MUAPI_API_KEY |
Every image and video call: 4K sheets (Nano Banana Pro), Kling O1 / 2.6 / 3.0, Veo 3.1, Wan 2.6, Seedance 2 first-last, MiniMax H3, Kling motion control. One balance, one ledger. |
GEMINI_API_KEY |
Text and planning: OmniShot, World, lyric interpretation, scene analysis, Riff. Also the fallback sheet rail. |
Generating without a key stops at once with a link to the Keys panel.
Optional: SEQ_IMAGE_RAIL (muapi / gemini), SEQ_BUDGET_USD (daily soft cap, requests return 402 past it), SEQ_GEMINI_TEXT_MODEL (planning model, default gemini-2.5-flash), FFMPEG_BIN, SEQ_TITLE_FONT (a TTF/OTF for title cards; Inter or DejaVu are found automatically).
Title cards, exports, slicing, and interpolation in-betweens are rendered locally with ffmpeg and cost nothing.
Every paid call appends to data/spend.json with provider, model, and an estimated or reported cost. The meter in the header shows today's total and each rail's status, with live balance where the rail exposes one. Set SEQ_BUDGET_USD to stop generation at a daily cap.
src/app/api/ route handlers: generate, export, sheets, settings/keys, cascade-grid, omnishot, remuxer/*, assembly/export, ...
src/lib/server/ guards (SSRF, shell args), peerStamp (loopback proof for key writes), envFile, providers (muapi, muapiVideo, nanobananaPro, ledger), sheetStore, titleCard
src/lib/ sheetGeometry, gridSlicer, gridOverlay, gridDetector, contentStore, useModuleState
src/components/ one file per module, shell/ (RackNav, SpendMeter, KeysPanel), ContentBrowser
public/samples/ the bundled sample sheet
data/ spend ledger and generated sheets (gitignored)
docs/screenshots/ what you see above
Notes for contributors: on WSL, file watching does not fire across /mnt/c, so server-side edits need a dev server restart. Generated sheets are served same-origin from /api/sheets/<id> with Range support, so provider URLs never expire on you and canvas slicing stays CORS-clean.
Working and used daily for pre-vis and animation tests. No license file yet; ask before redistributing.
HYPRGRPH
SEQ is one of the tools HYPRGRPH builds for its own work and shares openly. See the rest at hyprgrph.xyz.







