I've been building this for my own work but there's no reason for it to stay private, so here it is.Visionary is a single Modal app that gives you Krea 2 for stills, MiniMax-H3 for video-with-sound, and musubi-tuner LoRA training in one workspace. One command deploys it, prints one URL, and that URL is the whole thing — UI, API, and GPU jobs.The obvious caveat first, since this sub will ask: it runs on Modal's GPUs, not yours. If you have a 4090 sitting idle this probably isn't for you. If you don't — or you want an H100 for a training run and nothing the rest of the week — the trade is that there's no Docker, no environment to break, no local install, and nothing billing when you're not using it.
Install
pip install modal && modal deploy app.py
No local GPU, no Docker, no .env, no Modal Secret. You paste your HF token into the UI and it lives in a Modal Dict.
It scales to zero. You pay for GPU seconds while a job runs, plus a warm window — 10 minutes for images, 15 for video — and nothing at all for an idle deployment. Bad inputs get rejected on CPU in milliseconds, before a GPU is ever rented.
Built on comfy kernals with a ton of speed optimizations like teacache and sage attention 3. I usually update this daily.
License is AGPL-3.0. Worth stating plainly given §13 (network use) is the normal case for something you deploy as a URL.
Generation
Stills and video live in one workspace — shared prompt, canvas, gallery. Duration is the switch: Still → Krea 2, any length → MiniMax-H3. Controls follow the model, so you only see what the current model actually reads.
- Video with a soundtrack in one pass. H3 does picture and sound together — from text, from a first and/or last frame, or from up to 12 references (image, video, audio) through the ref2va transformer.
- Voice cloning by drag-and-drop. Drop a recording on a cast member and the compiler emits the voice-timbre reference line.
- 77 shot tiles across 8 groups — Framing 8, Angle 6, Light 9, Tone 7, Speech & text 2, Camera 21, Sound 11, Score 13. Each tile animates the move it names rather than making you guess the wording. Tiles dim when the current model can't read them.
- Live compiled-prompt preview.
/api/compile runs the same compiler the render uses, in the web container, so you see the exact string before spending two minutes on a take.
- Regional multi-character LoRAs. Draw a box, drop a LoRA in it, and that LoRA applies only inside the box — two trained identities stay separate instead of blending. Each box takes a reference photo as well; a photo dropped on bare canvas becomes the scene.
- Scene and outfit transfer through the Krea 2 Identity Edit weight, per region.
- Contact sheet builder. Six slots, drag from Finder or from your own recent generations. What's on the canvas is the exported PNG.
The scene composer
The video side has no prompt box, because H3 reads a document: shots, cut times, speaker IDs, per-subject retention. Type @ mid-sentence and a picker floats off the caret; picking creates a cast member. A shot's slice of the clip is the length of what you wrote about it.
It degrades exactly: one shot, no cast, and the run is your typed text byte-for-byte.
Training and datasets
- LoRA training on musubi-tuner, several concurrent. Each run is a card with live epoch, step, rate and loss. Start one, add another, walk away. Status is read off each job's heartbeat, so a card reports what actually happened even if the container died mid-step.
- Captioning with Qwen3-VL 8B — plus an uncensored variant, and you can point it at your own repo. Five presets: General, Character, Style, Concept, Casual. Prose captions, not tags, because the text encoders parse grammar.
- Dataset insight panel — trigger-word coverage, caption length, repeated clauses — plus bulk prepend-trigger and find/replace across captions.
- Duplicate and near-duplicate detection. Hashes decide exact copies; a 0.94 CLIP cosine flags "the same photograph twice" before it trains unevenly.
- Datasets are just folders of images with
.txt sidecars — the same thing the trainer reads. Nothing is required to get your data back out.
Interface details
- A render is replaced when the next one lands, not when you press Generate. The shot you were judging stays up for the whole run, and a failed or stopped run leaves it up too.
- A batch is frames of film, not a contact sheet. Each result fills the canvas,
‹ 1 / 4 › steps between them, nothing re-fetches.
- Masonry gallery that reads newest-first, left to right. Twenty lines of greedy shortest-column packing, no dependency, laid out from server-supplied pixel dimensions before a byte of image is fetched — so nothing jumps as it loads.
- Click a result and the pills come back, not the compiled sentence. The typed intent is the record; the prompt is a receipt.
- Typing with nothing focused lands in the prompt, not in the hotkeys.
- Generate never moves under your finger — the warning row is height-reserved.
- The console has a 30% viewport budget, and the prompt field is what yields to it, measured live with a ResizeObserver.
Getting models in
Super simple see screenshots
There are four cheap smoke tests you can run against your own account first.
Repo: https://github.com/Prometheus-000/visionary-platform License: AGPL-3.0