# Using Imagination Studio [Back to the README](../README.md) Feature reference and screenshots. Availability depends on the selected runtime, installed models and qualification scope; see [Windows](windows.md) for native restrictions. ## Screenshots | | | |---|---| | ![Home: the composer, start cards and the machine](screenshots/home.webp) | ![Story: the film board, Wasserman Slate, First AD](screenshots/story.webp) | | **Home** | **Story** | | ![Image: stills, scouts, edits and looks](screenshots/image.webp) | ![Video: clips with sound, long takes, references, Sharp Spec](screenshots/video.webp) | | **Image** | **Video** | | ![Previs: Motion Previs and your agent](screenshots/previs.webp) | ![Sound: voice lines and songs](screenshots/sound.webp) | | **Previs** | **Sound** | | ![Edit: timeline, Resolve, dailies, Library](screenshots/edit.webp) | ![Nodes: a canvas over the studio's jobs](screenshots/nodes.webp) | | **Edit** | **Nodes** | | ![Looks: the LoRA hub as a style library](screenshots/looks.webp) | ![Looks: one card a look, with its licence and size](screenshots/looks-cards.webp) | | **Looks** | **Looks, the cards** | | ![Wasserman's Filmmaker Suite, built in](screenshots/filmmaker-suite.webp) | ![Machine: live readings and storage on a DGX Spark](screenshots/machine.png) | | **Wasserman's Filmmaker Suite** | **Machine** | ## Using it on your phone The models run on your Mac or DGX Spark; the phone is only the screen and the remote. Everything works from it: write a prompt, roll a clip, watch the queue, play takes from the Library, plan in Story, talk to your agent. 1. **Put the computer and the phone on the same [Tailscale](https://tailscale.com) network** (free for personal use): install Tailscale on both and sign in with the same account. 2. **Share the studio on that network**, once, on the computer running it: ```bash tailscale serve --bg 7870 ``` Tailscale prints the address, `https://..ts.net`. Only devices on your own tailnet can open it, over HTTPS, and the studio accepts its Tailscale name by itself. (On a trusted home network, `HOST=0.0.0.0 bash scripts/app.sh` and `http://:7870` work too; the access key below still guards it, but keep that to a network you trust.) 3. **Sign the phone in, once:** on the computer, open **Settings → Access key** and scan its QR code with the phone's camera. It opens the studio on the phone, signed in. The phone keeps it. Then *Share → Add to Home Screen* (iPhone) or *⋮ → Add to Home screen* (Android): the studio opens full screen from its own icon. **The access key.** On the computer running the studio nothing is asked: open `http://localhost:7870` (or the computer's own network address or `.local` name, when it is opened to the network) and use it, updates included. Reaching it from another device (a phone over Tailscale, another computer on the network) takes the studio's access key, once per device: on the computer, **Settings → Access key** shows a QR code that signs a phone in with one scan, and the key itself to copy. The key is made once, kept in `access-key` in the studio folder (readable by you only) and survives restarts and updates; *Make a new key* there signs every other device out. `bash scripts/studio-key.sh` prints the same from a terminal. A clip read from another machine's app (Slate's *Import a take*) needs that app's key beside its address. **Your own tailnet without the key (opt-in).** Start the studio with `STUDIO_TRUST_TAILNET=1` (beside `HOST=0.0.0.0`) and a device that opens it straight on a Tailscale address (`http://100.x.y.z:7870` or its MagicDNS name) is let in without the key, as is this computer's own browser under its one-word name. Everything on your tailnet then gets in, shared devices included: limit who reaches this computer with Tailscale's access controls. The LAN still takes the key, and so do `tailscale serve` and `tailscale funnel` (a funnel is the public internet). Off by default. To let your home network in as well, add `STUDIO_TRUST_NETWORKS=192.168.1.0/24` (your LAN's range, comma-separated for more): every device on it then opens the studio without the key, so use it only on a network where you trust everyone. Only private ranges are taken; a public one, or `0.0.0.0/0`, is ignored. On the phone: - **Bottom bar**: Story, Image, Video, Previs, Sound and Edit, one tap each. **More** opens the Agent, the Library, Looks, Wasserman's Filmmaker Suite, Nodes, Machine, Learn, Settings, search and updates. - **Home** keeps the composer on top: pick *Clip with sound*, *Picture*, *Voice* or *Song*, describe it, *Generate*. - **The queue** is the line above the bar; tap the arrow to see what is rolling and what is next. Renders keep going on the computer when the phone sleeps or leaves. - **Connect an agent from the phone**: *Connect* shows the sign-in code in large type with *Copy code* and *Copy link*, and a QR code; sign in on the phone itself, or scan the QR with another device. | ![Home on a phone: the composer, the queue line and the bottom bar](screenshots/phone-home.webp) | ![The More sheet: the Agent, the vaults, Settings, search and updates](screenshots/phone-more.webp) | ![The Video engine on a phone](screenshots/phone-video.webp) | | :---: | :---: | :---: | | **Home** | **More** | **An engine: Video** | ## Using the studio ### Apps **Apps**, at the top of the sidebar, is every tool of the Studio as a one-click app, in nine kinds: Cinema, Characters, Camera, Effects, Styles, Sound, Finish, Filmmaker Suite and Studio. Search by name or pick a kind. An app opens the Studio's own form with its model, LoRA or start already chosen. A LoRA app that is not installed yet opens Looks on that LoRA (Install, then open the app again); a Library action (Character Swap, Restyle, Fix, Extend, Remove a person, Upscale, Captions, Turnaround) asks for the clip or picture first, from your newest takes. What this machine cannot run says why on its card. Every app is also in ⌘K. ![Create: text to video with FastH3](../samples/ui_create_fasth3.png) Step 1 of **Create** is where every choice lives. Pick one card in each row; the bar under them shows what will run and roughly how long it takes. | Choice | What it does | |---|---| | **The prompt goes to** | *Video with sound*; *Image only*: the picture model makes the pictures and stops there; or *Edit a picture*: it re-draws a picture you give it. | | **Picture model** (where more than one is installed) | *Qwen 2.1 Turbo*, *Qwen 2.1 Full*, *FLUX3-K Fast* or *FLUX3-K Full*, for images, scouts, a last frame and edits: see [Which picture model to use](performance.md#which-picture-model-to-use-the-evidence). | | **The clip starts from** | *Text only*; *a scout image* (step 2 makes several with the picture model, you pick one); *your own image* (step 2 uploads it); or, with `--ref2va` installed, *references* (step 2 takes up to nine pictures: who or what must look the same, in a scene the prompt describes; where the engine packs them, also up to three reference videos and three audio clips: see [Reference videos and reference audio](cli.md#reference-videos-and-reference-audio-ref2va)). | | **Video engine** (shown only with `--turbo` installed) | *FastH3*: fastest; text to video runs on the native Zig engine, and the bar under the cards says which engine a clip will use. *MiniMax H3*: the Turbo adapter with the sound made again by the base model, or the full 20 steps. | | **Passes** (FastH3) | 4 (fastest, a little softer), 8 (what it was trained for), 20 (for prompts with several actions; slowest). | | **Quality** (MiniMax H3, with `--turbo`) | Turbo 5 + base sound (the standard), Turbo 3, 20 steps with the fast recipe, or plain 20 steps. | | **Resolution** | 480p (864x480), 720p (1280x720), the fixed outputs Draft, 2K 2048x1152 (Mac) and Native 1344x768, Wasserman Sharp 1376x768, or Custom (your own width and height). | | **2x upscale** | For 480p and 720p: the 2x decoder turns 480p into 1728x960 and 720p into 2560x1440, for about 10 s more. | | **Length** | 5, 8, 10 or 15 s as one clip, or *Another length…* for any length the model takes (below); 30 s to 30 min as a chain of clips (further below). | | **Seed** | Same seed and settings give the same clip. | Then write the scene, what happens to the characters, and optionally the camera move. Steps 3 to 5: add spoken or sung lines and the soundscape, review the exact prompt the model will receive (edit it freely), and queue the render. The **Queue** on the right shows progress by pass, a time estimate, the log, and a cancel button. ### Clip lengths: any length the model takes MiniMax H3 and FastH3 make clips of `17n + 5` frames at 24 frames a second and nothing in between. The four usual lengths are four of those counts, and their names are rounded: "10 s" is 243 frames, 10.125 s. *Another length…* in the Length box opens a slider over every count, and the page writes the frames and the exact seconds beside it. | | Frames | Seconds | |---|---|---| | Shortest | 22 | 0.917 | | The usual four | 124, 192, 243, 362 | 5.167, 8, 10.125, 15.083 | | All 21 | 22, 39, 56, 73, 90, 107, 124, 141, 158, 175, 192, 209, 226, 243, 260, 277, 294, 311, 328, 345, 362 | frames / 24 | Through the API a job carries `frames` (one of the counts; another number is refused with the two nearest) or `seconds` (any number from 0.9 to 15.1, brought to the nearest count: `seconds: 6` is 141 frames, 5.875 s). The end moment in a last-frame prompt is the clip's true length. Production segments and Slate shots take any length the same way. The longest clip stays the model's 15 seconds on every size of both builds. On a DGX Spark that was measured at the largest canvas, 1376x768 with a first and a last frame: 362 frames rendered with 29.7 GB of the machine's 121 GB still free at the lowest point (one run, TensorFold's int8 engine, 4 passes; the memory does not depend on the passes). A clip with a LoRA renders on the same engine with the LoRA merged into it (2.7.1) and is taken up to 1376x768 at 243 frames, the largest it was measured at, and refused above that with the reason and what fits (*The memory guard*, in the DGX Spark section). On the Mac 22, 141 and 345 frames were rendered at 864x480 through the app (26 s, 72 s and 226 s a job on an M5 Ultra, native engine, 8 passes); its limits are the ones it had. ### What the app tells you about a prompt and a clip **Words that forbid.** The video model is run without a negative prompt, so every word in a prompt is something to show. In the production run that led to this check, a clip told "No photographs or portraits appear anywhere" hung the wall with photographs, twice, and came out clean once every mention of photographs was gone. Step 4 and step 5 of *Create* (and a Slate shot's preflight) now list what a prompt forbids by name ("no X", "without X", "not X", "never X") with the reason, in the box it was written in. Nothing is taken out or rewritten: the prompt goes as you wrote it, and the job in the queue repeats the list. The Studio's own sentences forbid nothing by name any more: a clip without spoken lines used to be told "Nobody speaks." and "No voices, no speech.", and a locked camera in Slate "the camera does not move". They now read "Mouths stay closed." (only where the shot has people: Slate's cast, or a person in the words), "Only ambient sound is heard." and "Static shot on a locked, still camera.", and a prompt the app writes passes its own check with nothing passed over. One comparison was made, not a study: the same two-person shot at 864x480, 5 s, seeds 42 and 43, in the old words and the new; in all four clips the speech-to-text model found no speech, and the mouths stayed closed in the frames looked at. A prompt that still carries the old sentences is not flagged for them. No route of the app has a negative prompt field: FastH3, MiniMax H3 Turbo and Qwen-Image-2.1-Turbo all run one forward a pass. `POST /api/prompt/check {"prompt": "..."}` gives the same list for a prompt written by hand. `scripts/video.sh` does one further thing for a prompt that never went through the app. A prompt with no spoken line (`...`) and no `overall_soundscape:` heading is given the Studio's own line under that heading before the model sees it (`ensure_ambient` in `app/negation.py`): "Only ambient sound is heard." The sentences already in the prompt stay, including anything they forbid by name. A prompt that asks for a spoken line, that already has the heading, that names a reference (``, `