@slatesvideo/shared 0.6.11 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/dist/auth.js +2 -2
  2. package/dist/clients/cloud.js +1 -1
  3. package/dist/index.d.ts +1 -1
  4. package/dist/index.js +1 -1
  5. package/dist/manual/content.d.ts +1 -1
  6. package/dist/manual/content.js +1 -1
  7. package/dist/operations/index.d.ts +817 -16
  8. package/dist/operations/index.js +1410 -360
  9. package/dist/operations/surface.d.ts +3 -1
  10. package/dist/operations/surface.js +37 -10
  11. package/dist/prompts/ad-presets.d.ts +77 -0
  12. package/dist/prompts/ad-presets.js +43 -0
  13. package/dist/prompts/agent-doctrine.js +5 -4
  14. package/dist/prompts/banned-tokens.d.ts +4 -29
  15. package/dist/prompts/banned-tokens.js +29 -204
  16. package/dist/prompts/craft-cards.js +2 -2
  17. package/dist/prompts/generation-policy.d.ts +41 -0
  18. package/dist/prompts/generation-policy.js +53 -0
  19. package/dist/prompts/guide-retrieval.d.ts +9 -0
  20. package/dist/prompts/guide-retrieval.js +53 -0
  21. package/dist/prompts/index.d.ts +1 -0
  22. package/dist/prompts/index.js +1 -0
  23. package/dist/prompts/model-capabilities.d.ts +18 -1
  24. package/dist/prompts/model-capabilities.js +72 -19
  25. package/dist/prompts/model-facts.d.ts +34 -2
  26. package/dist/prompts/model-facts.js +66 -5
  27. package/dist/prompts/partials.generated.js +8 -2
  28. package/dist/prompts/prompting-tips.d.ts +1 -1
  29. package/dist/prompts/prompting-tips.js +61 -16
  30. package/dist/prompts/reference-composer.d.ts +2 -0
  31. package/dist/prompts/reference-composer.js +51 -50
  32. package/dist/prompts/script-document.d.ts +165 -0
  33. package/dist/prompts/script-document.js +11 -0
  34. package/dist/prompts/shot-grammar.d.ts +4 -4
  35. package/dist/prompts/shot-grammar.js +3 -3
  36. package/dist/prompts/shot-spec.d.ts +13 -0
  37. package/dist/prompts/shot-spec.js +23 -5
  38. package/dist/skills/content.js +26 -23
  39. package/exports/slates-chatgpt-images/generated/SKILL.md +107 -0
  40. package/exports/slates-chatgpt-images/generated/slates-chatgpt-images.skill +0 -0
  41. package/exports/slates-prompt-builder/generated/SKILL.md +1 -1
  42. package/exports/slates-prompt-builder/generated/reference-character.md +9 -1
  43. package/exports/slates-prompt-builder/generated/reference-kling.md +3 -3
  44. package/exports/slates-prompt-builder/generated/reference-nano-banana.md +22 -10
  45. package/exports/slates-prompt-builder/generated/reference-seedance.md +4 -4
  46. package/exports/slates-prompt-builder/generated/slates-prompt-builder-manifest.json +17 -17
  47. package/exports/slates-prompt-builder/generated/slates-prompt-builder.skill +0 -0
  48. package/package.json +10 -4
  49. package/skills/_partials/cinematic-card.md +8 -0
  50. package/skills/_partials/cinematic-routes-short.md +2 -0
  51. package/skills/_partials/cinematic-tips-short.md +2 -0
  52. package/skills/_partials/decision-log.md +1 -13
  53. package/skills/_partials/image-defaults.md +11 -0
  54. package/skills/_partials/lens-video-split.md +1 -0
  55. package/skills/_partials/reference-rules-core.md +1 -1
  56. package/skills/_partials/sheet-tool-defaults.md +6 -0
  57. package/skills/slates-character-identity.md +9 -1
  58. package/skills/slates-chatgpt-images.md +107 -0
  59. package/skills/slates-cinematic-look.md +237 -0
  60. package/skills/slates-cost-discipline.md +18 -12
  61. package/skills/slates-direct-response-ad.md +13 -53
  62. package/skills/slates-edit-and-iterate.md +1 -1
  63. package/skills/slates-model-selection.md +20 -14
  64. package/skills/slates-one-prompt-film.md +19 -77
  65. package/skills/slates-project-organization.md +7 -3
  66. package/skills/slates-prompting-flux-2-max.md +15 -4
  67. package/skills/slates-prompting-gpt-image-2-5.md +41 -28
  68. package/skills/slates-prompting-kling-v3.md +3 -3
  69. package/skills/slates-prompting-lip-sync.md +1 -1
  70. package/skills/slates-prompting-minimax-h3.md +30 -17
  71. package/skills/slates-prompting-motion-transfer.md +1 -1
  72. package/skills/slates-prompting-nano-banana-2.md +24 -11
  73. package/skills/slates-prompting-seedance-2-5.md +7 -6
  74. package/skills/slates-prompting-seedance.md +5 -5
  75. package/skills/slates-prompting-seedream-5-lite.md +14 -3
  76. package/skills/slates-prompting-veo-3.md +1 -1
  77. package/skills/slates-script-craft.md +45 -0
  78. package/skills/slates-shot-variety.md +11 -40
  79. package/skills/slates-storyboard-from-script.md +14 -66
  80. package/skills/slates-style-prompting.md +54 -54
  81. package/skills/slates-ugc-influencer-ad.md +32 -309
  82. package/skills/slates-vision-feedback-loop.md +2 -1
@@ -1,3 +1,3 @@
1
1
  // GENERATED by slates-web/scripts/build-llm-docs.mjs. Edit slate/docs/slates-llm-manual.md.
2
- export const APP_MANUAL = "# Slates — Complete Reference for AI Assistants\r\n\r\n<!-- The heading above must stay first: shipped app builds reject this file if it\r\n does not begin with one. See slate/CLAUDE.md; check:llm-docs enforces it. -->\r\n\r\n<system_role>\r\nYou are a support assistant for the Slates desktop application. Answer user questions using ONLY the information in the <slates_reference> below. Be concise and direct. Use numbered steps for procedures. Use bullet points for explanations when helpful.\r\n</system_role>\r\n\r\n<rules>\r\n- If the answer cannot be found in the <slates_reference>, say: \"That isn't covered in the Slates reference.\" Do not guess or invent features.\r\n- If the user asks how to do something, give step-by-step instructions from the workflows and features described here.\r\n- If the user reports an error, check the TROUBLESHOOTING section first.\r\n- Refer to the FEATURES NOT IN SLATES section before answering questions about capabilities that might not exist.\r\n- Quote the exact error message when referencing troubleshooting entries.\r\n</rules>\r\n\r\n<slates_reference>\r\n\r\n<!-- BEGIN:GENERATED header -->\n# SLATES v1.5.8 — Complete Reference\n\n> **Freshness.** Generated from the Slates source of truth for app version **1.5.8**, last changed **2026-09-13**. The canonical copy of this file is <https://slates.video/slates-reference.md>. If a model, price or feature the user mentions is missing below, this copy is out of date: re-fetch that URL before answering, and say so.\n<!-- END:GENERATED header -->\r\n\r\n**What is Slates?** Desktop app (Windows 10/11, macOS 12+) for AI image and video creation. One-time purchase, no subscription. Every license includes 1,000 free credits, and Slates Pro starts with 3,000 credits. Every generation runs on Slates Credits — there are no API keys to set up, and credits never expire.\r\n\r\n---\r\n\r\n## INTENDED WORKFLOW\r\n\r\nThe designed start-to-finish flow:\r\n\r\n1. **Create project** — New project with name/description. Creates folder on your disk.\r\n2. **Build visual assets** — Generate images, create characters (with character sheets for consistency), environments (with environment grids), and styles. This is your visual library.\r\n3. **Create storyboard** — Add scenes. Every picture you drop in becomes a **Shot**: one beat of the piece, holding its references, its model, its settings and (when you want them) its words.\r\n4. **Write the piece** — Switch the storyboard to **Script** and write. What is said, what happens, the framing, the prompt each beat will send. Nothing is required and nothing is asked for; a visuals-only piece is finished as it stands.\r\n5. **Read it before you pay for it** — The header states how many generations, how many cuts, how long it runs and what it will cost. Press play for a rough cut at the real timing. Re-chop with split and merge and watch the price move.\r\n6. **Generate** — Select the beats you want and fire them in one approved batch. Each result lands under the row that made it.\r\n7. **Organize** — Switch to **Board** to re-order. Drag a beat and the whole thing moves with it.\r\n8. **Export to timeline** — Send clips to the built-in multi-track video editor.\r\n9. **Edit** — Trim, reorder, add markers, adjust timing.\r\n10. **Final export** — Export to MP4 directly, or export DaVinci Resolve XML for professional color grading.\r\n\r\n---\r\n\r\n## MODEL REFERENCE TABLE\r\n\r\n**Generating 4K video is a Slates Pro feature** — every tier generates video up to 1080p, and 4K images are open to everyone. Exporting your finished timeline at 4K is available on every tier.\r\n\r\nEvery model runs on Slates Credits. **The exact credit cost appears on the Generate button before anything fires.** The tables below are generated from the app's own model registry and rate tables, so they describe exactly what the model picker offers in this version: aspect ratios, resolutions, durations, reference-image limits, and the credit price of each. Bigger credit packs lower your per-credit cost, and Slates Pro gets the best pack rate on every purchase.\r\n\r\n<!-- BEGIN:GENERATED model-tables -->\n### Image Models\n\n| Model | Aspect Ratios | Resolutions | Max Refs | Credits per image |\n|-------|--------------|-------------|----------|-------------------|\n| **GPT Image 2.5 Flare** | 1:1, 16:9, 9:16, 4:3, 3:4 | 2K / 3K / 4K | 16 | 2K 2 · 3K 3 · 4K 5 (default quality; at max: 2K 8 · 3K 11 · 4K 20) |\n| **GPT Image 2.5 Sunburst** | 1:1, 16:9, 9:16, 4:3, 3:4 | 2K / 3K / 4K | 16 | 2K 2 · 3K 3 · 4K 5 (default quality; at max: 2K 8 · 3K 11 · 4K 20) |\n| **Nano Banana 2** | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 21:9 | 1K / 2K / 4K | 14 | 1K 4 · 2K 6 · 4K 8 |\n| **NB2 Lite** | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 21:9 | 1K | 4 | 1K 2 |\n| **Nano Banana Pro** | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 21:9 | 1K / 2K / 4K | 14 | 1K 8 · 2K 8 · 4K 15 |\n| **FLUX.2 Max** | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 21:9 | 1K / 2K / 4K | 4 | 1K 4 · 2K 5 · 4K 8 |\n| **Seedream 5 Lite** | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 21:9 | 2K / 3K / 4K | 10 | 2K 2 · 3K 2 · 4K 2 |\n\n### Video Models\n\n| Model | Duration | Aspect Ratios | Resolutions | Max Refs | Audio | Credits per second |\n|-------|----------|--------------|-------------|----------|-------|--------------------|\n| **Seedance 2.0** | 4-15s | 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 | 480p / 720p / 1080p / 4K | 9 | Included | 480p 3.5 · 720p 7.5 · 1080p 18.5 · 4K 39 |\n| **Seedance 2.5** | 4-30s | 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 | 480p / 720p / 1080p | 30 | Included | 480p 5.1 · 720p 11.6 · 1080p 20.5 |\n| **Seedance 2.5 Edit** | Follows the source clip (4-30s) | 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 | 480p / 720p / 1080p | 0 | Included | 480p 6.2 · 720p 13.9 · 1080p 24.6 |\n| **Kling V3.0 Standard** | 3-15s | 16:9, 9:16, 1:1 | 1080p / 4K | 4 | Optional, costs more | 1080p 4.2 (6.3 with audio) · 4K 21 |\n| **Kling V3.0 Pro** | 3-15s | 16:9, 9:16, 1:1 | 1080p / 4K | 4 | Optional, costs more | 1080p 5.6 (8.4 with audio) · 4K 21 |\n| **Kling V3.0 Omni** | 3-15s | 16:9, 9:16, 1:1 | 1080p / 4K | 4 | Optional, costs more | 1080p 4.2 (5.6 with audio) · 4K 21 |\n| **Kling V3.0 Omni Pro** | 3-15s | 16:9, 9:16, 1:1 | 1080p / 4K | 4 | Optional, costs more | 1080p 5.6 (7 with audio) · 4K 21 |\n| **Kling O3 Edit** | Follows the source clip (3-15s) | 16:9, 9:16, 1:1 | 1080p | 4 | Included | 1080p 6.3 |\n| **Kling O3 Edit Pro** | Follows the source clip (3-15s) | 16:9, 9:16, 1:1 | 1080p | 4 | Included | 1080p 8.4 |\n| **MiniMax H3 Max** | 5-15s | 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 | 480p / 768p | 9 | Included | 480p 2.5 · 768p 4 |\n| **MiniMax H3** | 5-15s | 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 | 480p / 768p / 2K / 4K | 9 | Included | 480p 2.5 · 768p 3 · 2K 6.5 · 4K 8 |\n| **Gemini Omni Flash** | 3-10s | 16:9, 9:16 | 720p | 7 | Included | 720p 6.4 |\n| **Omni Flash Edit** | Follows the source clip (3-10s) | 16:9, 9:16 | 720p | 0 | Included | 720p 6.4 |\n| **LTX-2.5** | 6/8/10/12/14/16/18/20s at 720p/1080p; 6/8/10s at 1440p/4K | 16:9, 9:16 | 720p / 1080p / 1440p / 4K | 0 | Included | 720p 4.5 · 1080p 6.5 · 1440p 9.5 · 4K 15 |\n| **LTX-2.5 Pro** | 6, 8, 10s | 16:9, 9:16 | 720p / 1080p | 0 | Included | 720p 6 · 1080p 8.5 |\n| **Veo 3.1 Fast** | 4/6/8s at 720p; 8s at 1080p/4K | 16:9, 9:16 | 720p / 1080p / 4K | 3 | Optional, costs more | 720p 5 (7.5 with audio) · 1080p 5 (7.5 with audio) · 4K 15 (17.5 with audio) |\n| **Veo 3.1 Standard** | 4/6/8s at 720p; 8s at 1080p/4K | 16:9, 9:16 | 720p / 1080p / 4K | 3 | Optional, costs more | 720p 10 (20 with audio) · 1080p 10 (20 with audio) · 4K 20 (30 with audio) |\n\n**Seedance 2.0 · Face** is a separate row in the model picker (a face in a reference image routes to a different provider, which costs more): 27.4 credits per second at 1080p.\n**Seedance 2.5 · Face** is a separate row in the model picker (a face in a reference image routes to a different provider, which costs more): 16.3 credits per second at 720p.\n**Seedance 2.5 Edit · Face** is a separate row in the model picker (a face in a reference image routes to a different provider, which costs more): 19.8 credits per second at 720p.\n\n### Audio Models\n\n| Model | Length | Credits |\n|-------|--------|---------|\n| **Seed Audio 1.0** | 3-120s | 1 at 3s · 3 at 15s · 19 at 120s |\n| **Inworld TTS-2** | up to 2,000 characters of text per take | 1 at 250 characters · 2 at 2,000 characters (billed per 250) |\n| **Sound Effects** | 1-22s | 1 at 1s · 1 at 4s · 3 at 22s |\n\n### Tools (Lip Sync, Motion Transfer)\n\nThese are real Kling endpoints that take a clip or a still as their subject, not models you prompt from scratch. Both bill in 5-second blocks.\n\n| Tool | Input | Billed in | Credits per block |\n|------|-------|-----------|-------------------|\n| **Kling Lip Sync** | Video source | 5s block | 4 |\n| **Kling Lip Sync (Avatar v2 Standard)** | Still-image source | 5s block | 14 |\n| **Kling Lip Sync (Avatar v2 Pro)** | Still-image source | 5s block | 29 |\n| **Kling Motion Control Standard** | Still image + reference video | 5s block | 32 |\n| **Kling Motion Control Pro** | Still image + reference video | 5s block | 42 |\n<!-- END:GENERATED model-tables -->\r\n\r\n---\r\n\r\n## WHICH MODEL TO USE\r\n\r\n### Images\r\n\r\n**Nano Banana 2 is the default image model.** It is the best all-round image model in the app: the most reference images of any image model, every aspect ratio, and output up to 4K. Brief it like a creative director rather than with tag soup. It is also the only model that supports the 2x2 / 3x3 grid exploration wrapper.\r\n\r\n- **NB2 Lite** is the fast, cheap draft seat in the same Nano Banana family. Roughly half the price of NB2 full and noticeably faster, 1K output only. Iterate here, finish on NB2.\r\n- **Nano Banana Pro** is the hero-frame and typography tier. Reach for it when spatial composition, cinematic lighting and skin, or fine in-image type have to be perfect. NB2 gets you most of the way there, so this is a deliberate step up, never a default.\r\n- **GPT Image 2.5** is the strongest image model in the app: it follows a long instruction more faithfully than anything else here, and it is the one to pick when the picture simply has to be right. It is also the sharp-text model, which is what makes it the choice for character sheets, shot grids, ordered panels and anything with words in the picture. It comes in two seats that cost exactly the same, and the difference is speed against quality. **Flare** is the fast one: OpenAI describes its quality as comparable to the older GPT Image 2, at roughly half the wait. **Sunburst** is OpenAI's most capable image model, better than GPT Image 2, and deliberately slower. Use Flare while you are still exploring, then re-run the shot you like on Sunburst for the final — and reach for Sunburst directly when several reference images all have to survive into one frame, or when an edit must change one region and leave identity, geometry and lighting untouched.\r\n Its quality knob has **five** settings — `low`, `medium`, `high`, `xhigh`, `max` — spanning about 36× from cheapest to dearest, which makes it the biggest cost lever on the model. The steps are uneven rather than a constant multiplier: `max` is four times `high`, but `xhigh` is only about 1.8 times it. **`high` is the default and the everyday setting.** `medium` is for drafts and is cheap enough to iterate on freely. `max` is the ceiling, for finished frames and exact character-level text; `xhigh` sits just under it for about half the price and is worth trying first. Go past `high` deliberately, not by habit.\r\n 4K is worth it only once your references and prompt are already settled: prove the shot at 3K, then re-run the finished prompt at 4K. Iterating at 4K is the most common way to waste credits on this model. Its 4K tier is API-only, so even a paid ChatGPT account cannot render it. Note that its resolution tiers are **not** a price ladder: the pixel classes are token-priced by OpenAI, so the cheapest seat is not the smallest one. Read the prices in the table above rather than assuming.\r\n **If you have used GPT Image 2 before, the quality names all shifted by one.** What it called `medium` is now called `high`, and what it called `high` is now `max` — the same pictures at the same prices, renamed. A remembered setting will quietly buy you a cheaper tier than it used to.\r\n **It is the only image model that can give you a transparent background.** Set **Background** to *Transparent* on the prompt bar and you get a real alpha channel — a cut-out for a logo, sticker or overlay — rather than a painted-in backdrop. *Auto* is the default and lets the model decide from your prompt; *Opaque* forces a filled background. It costs nothing either way. Slates always saves PNG, which is what carries the transparency, so there is nothing else to set.\r\n **Square and 4:3 frames cost more than 16:9 on this model, and only on this model.** OpenAI charges by image tokens rather than by pixels, and a square frame uses about 1.8 times the tokens of a 16:9 frame the same size, and 4:3 or 3:4 about 1.37 times. The credit prices in the table above are the 16:9 numbers; pick 1:1 or 4:3 and the price on the Generate button goes up to match. 9:16 costs the same as 16:9. Every other image model charges the same whatever the shape.\r\n- **FLUX.2 Max** and **Seedream 5 Lite** are the less content-restricted options. Seedream is flat-priced at every resolution it offers, so there is no reason to pick a lower one. Both auto-route to their edit endpoint when you attach reference images.\r\n\r\n### Video\r\n\r\n**Seedance 2.0 is the default video model.** Reach for it the moment physics, effects, destruction or scale matter, and for hero shots. It takes many reference images, generates native audio at no extra cost, and is the only Seedance seat that reaches 4K (generating 4K video needs Slates Pro; timeline export at 4K does not). It is also the cheaper of the two seats at every resolution they share. A face in a reference image routes it to a different provider, which is why **Seedance 2.0 · Face** is its own row in the model picker at its own price.\r\n\r\n- **Seedance 2.5 is a second seat, not an upgrade.** It buys much longer single takes and far more reference images, plus better prompt adherence. What it gives up is 4K, and it costs more than 2.0 at every resolution the two share — so 2.0 stays the model for 4K, and for the same resolution at a lower price. Because 2.5 runs longer, a long clip on 2.5 can cost more than a shorter, higher-resolution one on 2.0 — read the Generate button, not the resolution. **Seedance 2.5 Edit** is its clip-editing row: attach a clip, describe the change, and the output length follows the source.\r\n- **Kling** is the cost-effective workhorse and the most flexible family: strong start-frame adherence for identity, layout and text, acting, dialogue, multi-shot (up to 6 cuts), and the widest range of clip lengths. **Kling V3.0 Omni** adds multi-character dialogue in English, Chinese, Japanese, Korean and Spanish. Standard and Pro are the same model at two fidelity and price tiers. **Kling O3 Edit** takes an existing clip and changes what you describe, with subject and style reference images, while the original audio is preserved verbatim. Kling is also the only engine behind the Lip Sync and Motion Control tools.\r\n- **MiniMax H3** is the seat to pick when the SOUND is part of what you are writing. Every other video model treats audio as a switch; H3 takes it as three separate instructions in one prompt — the lines and action sounds tied to a moment, the ambience running underneath, and a score only the audience hears — and generates all of it with the picture in a single pass. It is also the only model where you say how much of a reference should survive, including moving one subject's characteristic onto a different subject. It runs 5-15 seconds at 480p, 768p, 2K or 4K, and takes up to nine reference images plus reference video and audio. Two things to watch: **the first five reference images are free and every one after that costs extra**, so attach what the shot needs rather than the maximum; and 2K and 4K are upscales of a 768p render rather than larger generations — in our own testing the 2K pass showed more artifacting than the 768p original it was built from, at more than twice the price. Generate and judge at 768p; step up only when a delivery spec demands the pixels.\r\n- **MiniMax H3 Max** is the same model post-trained by fal for SPEED, and it is the more expensive seat, not the cheaper one. It is dramatically faster: on the same 5-second 768p prompt it finished in about 5 seconds against about 57 seconds for H3 — roughly 12x (measured 2026-08-27). It stops at 768p and costs more per second than H3 at the resolution they share. It still animates a start frame and an end frame, so image-to-video works normally; what it does not have is the reference set — the extra identity, style and environment images plus reference video and audio that base H3 reads. Pick it when a fast turnaround on a text-to-video or start-frame shot is worth paying for; pick H3 for resolution, references, or the same tier at a lower price.\r\n- **LTX-2.5** is the VOLUME seat — the cheapest native 1080p second in the catalogue, with synchronised audio included free at every resolution, so it is the model to reach for when the job is many takes rather than one hero shot. Two things are unique to it. It makes the LONGEST clips of anything here, up to 20 seconds, and it is the only model that reaches 1440p. It is also the only one with native MULTISHOT: a single generation can carry two to four connected shots that hold the character, lighting and voice across the cuts, which everywhere else means generating separate clips and watching identity drift between them. Its constraints are unusually sharp, though. Durations are EVEN NUMBERS ONLY starting at six — 6, 8, 10, 12, 14, 16, 18, 20, with no 5-second or 7-second clip — and above 1080p that ceiling drops to 10 seconds. Aspect ratios are 16:9 and 9:16 only. And it takes FRAMES, not references: a start frame and an optional end frame that generates a transition between them, but no identity, style or environment reference images at all, so cross-shot character consistency belongs on MiniMax H3 or Kling. Because sound is generated in the same pass, write the audio into the prompt and anchor every cue to something visible — anything unanchored gets invented.\r\n- **LTX-2.5 Pro** is the fidelity seat of that pair, and it is NOT simply a better LTX. It renders the picture with more compute on busy frames, but on a narrower envelope than the base row: 720p and 1080p only (no 1440p, no 4K) and 6, 8 or 10 seconds only, for about a third more per second. Reaching for it because the name says Pro costs more AND takes away the reach. Pick it when a specific shot needs the extra fidelity and fits inside 1080p and ten seconds; pick base LTX for length, resolution and volume.\r\n- **Gemini Omni Flash** is the cheap 720p seat with native synced audio included in one pass. **Omni Flash Edit** is the prompt-only clip editor: no reference images, one short instruction plus \"Keep everything else the same.\" Long descriptive prompts destroy it.\r\n- **Veo 3.1** is niche and is never a default. Pick it only when you specifically want Google's audio pass. It has the fewest aspect ratios and reference slots of any video model, fixed durations, and the highest per-clip cost.\r\n\r\nBoth edit models take an existing clip as their canvas, so their output length follows the source clip rather than a duration you choose.\r\n\r\n### Audio\r\n\r\nAudio is a third media type alongside images and video — generated as its own asset, shown in the gallery's **Audio** tab, and dragged onto an audio track in the timeline. This is separate from the audio some VIDEO models generate *inside* a clip (see AUDIO IN GENERATION below): use a video model when the sound must be locked to what is on screen, and these when you need audio you can move, trim, re-use, or layer.\r\n\r\n**Seed Audio 1.0 is the default.** A room with dialogue *and* clatter *and* ambience is one generation, not three layered ones, and because it is cheap you can run five takes and keep the best. It makes a whole audio SCENE from one plain sentence. **It has no length setting of its own** — Slates writes your chosen duration into the prompt, and that is what you are charged. You describe the voice in words; there is no voice list to pick from. Set **Languages** to Mixed if one scene needs more than one language (it costs the same).\r\n\r\n**Sound Effects** makes one effect, or a seamless loop. It is the only surface with an exact duration, so an effect can land on a specific frame. Describe the physical cause (\"heavy oak door slams shut in a stone hallway\"), not the label (\"door sound\"). **Loop** makes it seamless for beds; **Wording** controls how literally your description is followed. Seed Audio is actually the better tool for *long* ambience beds, so the two are not redundant in the direction you would expect.\r\n\r\nKling's `SFX:` / `Ambient noise:` prompt syntax belongs to video prompts and makes Seed Audio results *worse* — write plain sentences there instead.\r\n\r\n**Inworld TTS-2 is the voice seat** — type the words, pick a voice, press Generate. In the prompt box's Audio lane pick **Voice** in the model picker; the prompt is the exact text that gets spoken (nothing is added or rewritten — open \"See what gets sent\" to confirm), and the **Voice** control on the bar opens the voice picker: **Presets** (ready-made voices with gender, accent and age filters — every one plays the same audition line, so you compare voices rather than scripts), **Clips** (any character's voice, or any audio clip in the project, cloned for the take), or **Describe** (a voice in words). The character counter beside the bar is the bill: the generated audio table above gives the text cap and billing buckets, and the Generate button shows the price. Direction goes in square brackets (`[whispering] …`) — anything in parentheses is read aloud. Cloning a real person's voice needs their permission. Right-click any audio clip in the Audio tab → **Use as voice** lands you on the Voice lane with that clip as the voice. Studio Agent and the MCP/CLI do the same through `slates_generate_audio` (a preset `voiceId` from `slates_list_voices`, a clip as `voiceReferenceAssetId`, or a `voiceDescription`).\r\n\r\n**There is no music generation.** For a song, use an external tool and import the audio (see PROJECTS → Supported File Formats). For spoken lines inside a scene, let Seed Audio perform them, put them in the video prompt on a model with native audio (Seedance, Kling Omni, Omni Flash, Veo), or use Kling Lip-Sync's text-to-speech against a shot.\r\n\r\n### Tools\r\n\r\n**Tools** is not a model family. It is two real Kling endpoints that take a clip or a still as their subject: **Kling Lip Sync** and **Kling Motion Control**. Both bill in 5-second blocks and are described under GENERATION MODES below.\r\n\r\n**How pricing works:** every generation is priced in Slates Credits, and the exact cost is shown on the Generate button before you commit. Bigger credit packs give more credits per dollar; Slates Pro locks in the best pack rate on every purchase, forever.\r\n\r\n---\r\n\r\n## GENERATION MODES\r\n\r\n### Create Image\r\nPrompt → select image model → set aspect ratio + resolution → generate. Batch grids available for quick iteration.\r\n\r\n### Text-to-Video\r\nPrompt → select video model → set duration + aspect ratio + resolution → generate. Output: MP4.\r\n\r\n### Image-to-Video (I2V)\r\nAttach start image + prompt → select model → generate video from that image. Optional: attach end image (Veo) for guided transitions.\r\n\r\n### Ingredients / References\r\nUse @character_name, @environment_name, or #style_name in prompt to attach reference images for visual consistency. Kling: up to 4 total references. Veo: up to 3. Nano Banana 2: up to 14. The @mentions auto-complete from your project's characters/environments/styles.\r\n\r\n### Lip Sync\r\n**Kling only.** Pick **Kling Lip Sync** under the Tools family in the model picker. Source: video or still image.\r\n\r\n- **Audio source** — Text to speech (type the line; six English/UK voices plus a storyteller, with a speed control) OR Upload audio (bring your own recording, max 5MB).\r\n- **Avatar tier** — only appears for a still-image source: Avatar v2 Standard (the value tier) or Avatar v2 Pro (higher fidelity, higher rate).\r\n- 5s output blocks.\r\n\r\nWorks very well with human-like characters. Less reliable with animals or non-human characters.\r\n\r\n### Motion Transfer\r\n**Kling only.** Pick **Kling Motion Control** under the Tools family. Target: still image (your character). Source: reference video (the motion).\r\n\r\n- **Engine** — Kling MC Standard (value tier) or Kling MC Pro (higher fidelity, higher rate).\r\n- **Orientation** — *Match video* copies skeleton and depth from the clip (best for dancing, walking, full-body action; driving clips up to 30s). *Match image* keeps your character's pose and angle and uses the video only as motion hints (best for close-ups; up to 10s).\r\n- 5s output.\r\n\r\n> **Note:** these two tools used to offer a second \"Seedance 2.0\" engine. It was not a separate engine — picking it made Slates write a sentence into your prompt that you never saw, which is no longer allowed anywhere in the app (see \"What gets sent\" below). Both tools are now Kling endpoints only.\r\n\r\n### Edit Image\r\nRight-click any image asset → open viewer → switch to Edit Mode. Enter an edit prompt describing the changes you want. Select edit model: Nano Banana 2 (supports up to 14 reference images), FLUX.2 Max, or Seedream 5 Lite. Choose resolution and aspect ratio. The result saves as a new asset with the original preserved. Useful for refining generated images without starting from scratch.\r\n\r\n### Edit Video (Kling O3 Edit / Omni Flash Edit)\r\nRight-click any video clip (gallery or timeline) → \"Edit with AI\". The clip attaches to the prompt box as the source; describe the CHANGE, not the whole scene (\"replace the man with @marcus\", \"make it a rainy night, keep everything else\"). Two engines in the model picker:\r\n- **Kling O3 Edit (default):** attach subject images (role: Subject) to swap someone in, or style images (role: Style) for a look — max 4 combined refs. Clips 3-15s. Original audio preserved.\r\n- **Omni Flash Edit (cheapest):** prompt only — no reference images; keep instructions simple and add \"Keep everything else the same.\" Clips 3-10s, 720p output.\r\n\r\nOutput length follows the source clip; the credit cost (clip seconds, rounded up, at the per-second rate) shows on the Generate button. The edited clip saves as a NEW asset linked to the original — chain edits freely. Trim longer clips on the timeline first.\r\n\r\n### Multi-Shot (Kling V3.0/Omni)\r\nEnable multi-shot toggle → multiple scene prompts in one generation, each with different framing. 6-axis camera controls per shot. Results can be hit-or-miss, but worth trying for quick multi-cut sequences. For more reliable results, most users prefer generating multiple short 5s clips separately using Kling V3.0 Omni in ingredients mode and assembling them on the timeline.\r\n\r\n---\r\n\r\n### Generate Audio\r\n\r\nSwitch the prompt box's lane pill from Image/Video to **Audio**, pick a surface, and generate. The prompt box offers three: **Seed Audio 1.0**, **Voice** (Inworld TTS-2) and **Sound Effects**. The result lands in the gallery's Audio tab as its own asset with a waveform and an inline player, and can be dragged onto an audio track in the timeline.\r\n\r\n- **Scene (Seed Audio 1.0)** — one plain sentence describing the moment. Set **Length**; Slates writes it into the prompt for you and that is exactly what you're billed for (open \"See what gets sent\" under the prompt box to read the appended text). **Say the crowd/room size out loud** — \"applause\" returns a full auditorium when you meant three people at an open mic. Ask for a few seconds more than the clip needs so the edit has fade handles. Describe the voice you want in the sentence itself (\"a weary dock foreman in his fifties, gravel in his voice\") — there is no voice picker.\r\n- **Voice (Inworld TTS-2)** — the prompt is the words to be spoken, verbatim. Pick the voice with the **Voice** control on the bar (presets you can play first, any clip in the project, a character's voice, or a description); the character counter is the bill. See MODELS → Inworld TTS-2 for direction tags and the cloning rules.\r\n- **Sound Effect** — describe the physical cause and set the length to roughly the event (≈1s for an impact, 2–4s for a whoosh, 8–22s + **Loop** for a bed). **Wording** sets how literally the description is followed: Interpretive, Balanced (default), or Literal.\r\n\r\n#### Use your own voice recording\r\n\r\nIn the bottom prompt box, choose **Audio**, then **Inworld TTS-2** in the model picker. Open **Voice → Clips → Import voice clip** and select your recording. The import adds an audio asset to this project without generating anything. Click its play button to audition it, then click the recording's name to choose it. Type the words you want spoken in the prompt box and press **Generate**, which shows the price. The new take appears in **Gallery → Audio**.\r\n\r\nUse a clean recording of one speaker whose voice you have permission to use. Slates clones the recording for each take; there is no separate training wizard or persistent vendor voice to manage. **Presets** lets you audition ready-made voices; **Describe** lets you write a voice description and choose **Use this description**. Choosing in the prompt box sets up the next take; only Generate spends credits.\r\n\r\nTo attach your recording or a generated take to a character, open **Gallery → Characters**, then **Add voice** (or **Change voice**) on that character's card. Choose **Clips** and click the clip's name. Attaching an existing clip is free. The card displays its waveform and player. That character's voice is also listed under **Voice → Clips → Characters** in the prompt box. Selecting a preset or description from a character card generates and attaches a take; read the cost shown in that picker before choosing.\r\n\r\n<!-- BEGIN:GENERATED voice-attachment -->\nCharacter mentions attach assigned voice samples on supported video models: Seedance 2.0, Seedance 2.5, MiniMax H3 Max, MiniMax H3. The reference rail shows each attached voice and the composed prompt names its timbre role. Removing a voice tile is saved with the Shot. Frames, sample duration, and reference capacity can prevent attachment; inspect the rail before generating.\n\nFor Inworld TTS-2, choose the character under **Voice → Clips → Characters**. Its prompt is spoken verbatim; a mention does not select the voice. Seed Audio also supports character voice mentions.\n<!-- END:GENERATED voice-attachment -->\r\n\r\n---\r\n\r\n## AUDIO IN GENERATION\r\n\r\nThis section is about audio generated **inside a video clip**. For audio as its own asset, see Generate Audio above.\r\n\r\n**Veo 3.1 native audio:** Generates audio WITH video. Prompt syntax: `\"Hello!\"` for dialogue, `SFX: [sound]` for effects, `Ambient noise: [description]` for ambience. Max 10s dialogue. Add `(no subtitles)` to suppress text overlays.\r\n\r\n**Kling V3.0 Omni dialogue:** Multi-character dialogue with distinct voices. Languages: EN, ZH, JA, KO, ES. `Background music: [description]` for music. Max 10s dialogue.\r\n\r\n**Kling V3.0 sound co-generation:** Synchronized sound effects generated with video.\r\n\r\n⚠️ **This prompt syntax is video-only.** `SFX:`, `Ambient noise:` and `Background music:` are Kling/Veo conventions — the audio models above have no parser for them and will treat them as words in the scene.\r\n\r\n---\r\n\r\n## PROMPT SYSTEM\r\n\r\n### Unified Create Surface (roles + model-on-button)\r\nThe old mode tabs (text-to-video / frames-to-video / ingredients / create-image) are ONE \"Create\" surface. An **Image | Video | Audio pill** on the prompt bar switches your output lane — it remembers and restores the last model you used in each lane (pick Seedance once and the Video lane stays Seedance until you change it). Only the active lane shows its name; the other two are icons. Every attachment in the reference tray carries a tappable ROLE badge — Reference / First frame / Last frame / Subject / Style — you say what each attachment is; nothing is inferred. Your model choice sticks across generations and workflow actions (\"use as first frame\" keeps your chosen video model). Attaching a video via \"Edit with AI\" flips the surface into Edit Video mode. Lip Sync and Motion Transfer live under the **Tools** family in the model picker.\r\n\r\n### Floating Prompt Box — the bar holds everything\r\nPersistent across all pages. **There is no settings panel and no gear button.** Everything sits on one bottom bar, left to right:\r\n\r\n1. **Media toggle** — Image / Video / Audio.\r\n2. **Model picker** — a searchable menu plus a detached submenu. The main menu lists model families with a vendor glyph tile each; picking one opens that family's models beside it, every row carrying capability chips (resolution, clip length, audio, references) and its per-unit rate. Type to search across every model. The submenu is anchored to the row you opened it from, so it never travels. The trigger on the bar shows the model name and nothing else — no chevron, no resolution appended. Everything listed is a real model or endpoint.\r\n3. **Parameter controls** — one per setting the chosen model actually has (resolution, aspect, duration, length, quality, count, grid, face-in-reference, audio, loop, and so on). The trigger shows the current value; the explanation lives *inside* the menu as a subtitle under each option, along with what that option costs. A setting with only one possible value still shows, muted and non-interactive, so the row never changes shape.\r\n4. **Sliders for ranges.** A setting with a long list of steps (video duration, audio length) opens a ruler instead of a many-row menu. The handle moves between the values the model actually declares, so it cannot land on one the model will not accept, and the price for the selected value is shown on the ruler.\r\n5. **`More ▾`** — if the model has more parameters than fit the current window width, the extras are collected into a generated `More` dropdown automatically. Widen the window (or close the Studio Agent panel) and they move back onto the bar.\r\n6. **Generate** — reads `Generate · <cost>`. **Cost only** — the model name is not repeated on the button (it's in the model picker) and there is no send arrow. A badge on the left of the button counts generations currently running.\r\n\r\nFor text-to-speech, the character counter is always visible because text length determines the price. On other surfaces it appears near the right of the bar after roughly three quarters of the model's prompt limit. It turns red over the limit.\r\n\r\n**Collapsing:** the chevron at the top-right of the box collapses it to a single arrow — nothing else. Click the arrow to bring it back.\r\n\r\nBelow the bar the queue shows pending/active generations with cost and progress.\r\n\r\n### What gets sent (prompt transparency)\r\nUnder the prompt box is a **\"See what gets sent\"** disclosure. Open it and you see the exact text that will be transmitted, produced by the same code that builds the request — so it can never disagree with what is actually sent. It shows:\r\n\r\n- **Reference numbering** — `@sarah` becomes `Sarah (image 1)` so the model knows which attached image is which.\r\n- **Key lines for attachments you did NOT mention** — one short neutral sentence per unmentioned attachment. Mention every reference in your own words and these never generate.\r\n- **The trailing style clause** when a `#style` is attached.\r\n- **The Seed Audio duration append** — the `… N seconds` Slates adds to the end of the prompt, which is also what you are billed for.\r\n- **Grid wrapping** when 2×2 or 3×3 is on.\r\n\r\nThe row stays hidden when the composed prompt is identical to what you typed, so it only appears when there is something to show.\r\n\r\n**Unresolved `#tags` and `@mentions` are named, not silently dropped.** If you type `#noir` and there is no saved style called \"noir\", the tag is removed from the text sent to the model (a raw tag confuses every model) — but the disclosure turns red and says so by name: *\"#noir matches nothing saved — removed from what gets sent.\"* Save the style, or reword it, and the warning clears.\r\n\r\n**Nothing is ever added that you cannot read here.** No setting in the app injects prompt text; a setting changes *how* a request is made, never *what* you asked for.\r\n\r\n### Prompting guide (on the web)\r\nPer-model prompting guidance lives at <https://slates.video/docs/prompting>, linked from the bottom of Settings. It covers every model Slates offers — Video, Image, Audio — with what that model reads, what it ignores, and its gotchas, all on one page so you can compare them. Markdown copy for pasting into an LLM: <https://slates.video/docs/prompting.md>.\r\n\r\nIt is generated from the same source the Slates CLI, the MCP server and Studio Agent are built on, so the guide and the app cannot disagree. It is documentation rather than a control, which is why it is a page on the web and not a panel in the app: it has room to be read, a URL you can send someone, and it is always current rather than frozen at the version you installed.\r\n\r\n### @Mentions\r\nType `@` → auto-complete shows project characters and environments. Type `#` → shows styles. Selecting inserts the reference image(s). At send time a mention is rewritten to a numbered citation (`@sarah` → `Sarah (image 1)`) so the model can tell your attachments apart — you can read the result in \"See what gets sent\". Nothing else about your wording is rewritten. Prompting works the same as any other AI tool; no special syntax beyond @mentions.\r\n\r\n### Writing the shot list with Studio Agent\r\nThere is no \"Enhance\" button and no \"Generate prompts\" button. **Studio Agent does this work**, because it reads the same shot list you do — every scene, every beat in order, with its references, its model and its price — and because you can steer it:\r\n\r\n> \"Write the beats for my current storyboard.\"\r\n> \"Now redo scene 3 handheld, and match its energy to scene 2.\"\r\n> \"SHOT-A4 runs long — split it after 'and then'.\"\r\n\r\nEvery field it writes is editable by hand, in place, in the storyboard's Script view. Open Studio Agent with **Ctrl+.**\r\n\r\n### Debug Panel (advanced)\r\nA developer panel showing the exact request body, with the ability to override the composed prompt before sending. **There is no toggle button for it on the prompt bar in any build** — open it with **Ctrl+Shift+D**. For ordinary use, \"See what gets sent\" above is the supported way to inspect a prompt.\r\n\r\n---\r\n\r\n## PROJECTS\r\n\r\n### Structure\r\nEach project = folder on your disk. Subdirectories: images/, videos/, audio/, references/, exports/. Location configurable in Settings → Projects Directory.\r\n\r\n### Assets\r\nEvery generated or imported file is an asset (image, video, audio). Metadata tracked: prompt, model, settings, cost, dimensions, timestamps. Videos track source image via source_asset_id -- you can see all videos generated from any image.\r\n\r\n### Supported File Formats\r\n- **Images:** PNG, JPEG, WEBP, GIF. Note: HEIC/HEIF (iPhone photos) NOT supported -- convert to JPEG/PNG first.\r\n- **Video:** MP4, MOV, WEBM, AVI, MKV.\r\n- **Audio:** MP3, WAV, OGG, M4A, AAC.\r\n- **Clipboard paste:** Any image format the OS clipboard provides (PNG, JPEG, WEBP, GIF). Pasting works both in the gallery and directly into the prompt box; either way the image becomes a real gallery asset in the folder you're working in (tagged \"Imported\") AND, when pasted into the prompt box, attaches as a reference. Anything generated from it links back to it as a source.\r\n- **Drag and drop:** Any file the browser recognizes as image/* or video/*.\r\n\r\n### Operations\r\nCreate/rename/delete projects. Import external files via drag-and-drop or file picker. Paste images from clipboard. Extract still frames from videos. Relocate project to different disk/folder (all paths auto-update). Cleanup orphaned assets.\r\n\r\n### Moving and copying assets between projects\r\nAssets (images, clips) can be sent to another project three ways: the selection band on the Images/Videos tabs, the right-click menu on any card, or by dragging cards and dropping on a project in the drop palette.\r\n\r\n- **Move** relocates the media files on disk into the destination project's folder. The asset leaves whatever gallery folder it was in and is issued a fresh badge code in the destination.\r\n- **Copy** duplicates it — new files, new thumbnails, new badge code — and changes nothing in the source project.\r\n\r\n**Why a move can be refused:** an image another project still builds with (a character/environment/style identity image, or a storyboard frame) cannot leave, because the entity left behind would point at a file it no longer owns. When that happens the dialog lists what's blocking and offers the fix: bring the whole character/environment/style across with all of its images, or copy instead. A storyboard frame is only ever offered a copy — moving its image out would empty the shot.\r\n\r\nRight-clicking a card that is part of a multi-selection acts on the whole selection (\"Move 5 to Project…\"). Right-clicking a card outside the selection acts on that card alone.\r\n\r\n---\r\n\r\n## SHOTS — THE STORYBOARD IS THE SHOT LIST\r\n\r\nA **Shot** is the prompt bar, saved: the prompt, every reference with the job it carries, the model, every setting — and now the beat itself: who speaks, what they say, how it is said, what happens, the prop, the framing and the camera. It lives in the **storyboard**, which is the one place Shots are listed. It is never required: the prompt bar works exactly as it always has for anyone who never touches one.\r\n\r\n### Why it exists\r\nA generation's full recipe was already stored, but only once you had paid for it. A Shot can be written **before anything is generated**, so a whole piece can be planned, read, timed, priced and corrected while it is still free. That is the point of the thing: look at the entire ad or short film — every cheap asset lined up in the actual flow — before the videos exist.\r\n\r\n### What a Shot holds\r\nRaw prompt (@mentions intact); the model; aspect ratio / duration / resolution / negative prompt / sound and the rest of the bar's settings; every attachment with its ROLE (plain reference, subject, style, reference video, reference audio, first frame, last frame); and the script layer — `speaker`, `line`, `delivery`, `action`, `prop`, `shotSize`, `camera`, and a `continues` flag for one sentence running across two cuts. Characters, environments and styles are stored as the ENTITY, not a copied picture, so updating a character updates every Shot that names it.\r\n\r\n**The script fields are for reading and counting. Only the prompt is sent to a model.** Dialogue you want a model to perform still goes in the prompt, verbatim, with its delivery — writing it in `line` makes it readable and lets Slates check whether it fits the cut, not spoken.\r\n\r\n### Every Shot has an address\r\n`SHOT-A1`, `SHOT-A2` … per project, never reused — the same idea as the `IMG-A12` badge on a gallery card. Say it to ChatGPT via Codex, Claude, or Cursor and you are both pointing at the same row. It is for **this session**, not for retrieval later: there is no shot search and no shot library, because a Shot is workspace state — alive while you build the piece, worthless once it ships.\r\n\r\n### Making one\r\n- **Save as Shot** on any generated image, clip or track's right-click menu restores that generation and keeps it — and that generation becomes the Shot's first take, so the row opens showing the result you kept it for. **Reuse Prompt** on those same menus does the restore WITHOUT saving anything.\r\n- Connected agents such as ChatGPT via Codex, Claude, and Cursor can write Shots directly (`slates_create_shot`), including for shots whose image does not exist yet — and can re-chop them with `slates_split_shot` / `slates_merge_shots`.\r\n- **It files itself.** A saved Shot lands in the scene you have open, else the last scene of the storyboard you were most recently working in; if the project has no storyboard, one appears named after the project. Nothing you save is ever somewhere you have to go and find.\r\n\r\n### There is no save button\r\nSelecting a Shot row **binds** the prompt bar to it. Edits write straight back to that row; `Clear` unbinds and returns the bar to free composing. There is no undo, and none is needed: the generations underneath a row are the permanent record of what actually fired, and the row itself is the working copy.\r\n\r\n### Two ways to look at it\r\nThe storyboard has one toggle and two jobs.\r\n\r\n- **Board** — arrange. One picture per Shot, dragged into the order you want. Drag one and the whole beat moves with it: the line, the references, the model, the settings, the takes. There is nothing else to drag, so there is never a question of what followed what.\r\n- **Script** — write. One continuous page: the script, the references beside the words that cite them, the prompts underneath. This is where you read the piece before paying for it.\r\n\r\nInside Script, choose **Dialogue** to edit the words with scene headings and speakers. Delivery notes, model and pricing details, and warnings are hidden. **All details** shows all layers. Open **Custom** to toggle Scene, Action, Character, Delivery, Dialogue, Shot, References, Prompt, Takes, and Warnings independently. Warnings covers missing models or references, unresolved mentions, model changes, and lines too long for their cut. Hiding a layer changes only what you see; it preserves your text and generation checks. There is a text-size slider and an independent toggle for shot numbers in the margin.\r\n\r\nDelivery is an optional performance note, not a required label for every line. TTS sends the authored prompt, or the dialogue when the prompt is empty, verbatim; separate Delivery notes are not added. For speech cues, use the selected TTS model's prompting guide and place supported tags in that spoken text. Script view does not strip inline speech cues from your words.\r\n\r\n### The header tells you what you are about to make\r\n`5 generations · 7 cuts · 54s · 84 credits`, and beneath it a variety strip like `6/7 wide · 5 push · 3 cuts in the loft`.\r\n\r\n**Two counts, because they measure different things.** Rhythm is counted in **cuts**; money is counted in **generations**. A multi-shot generation is several cuts inside one paid call, so mixing them would be wrong. A cut with no model chosen has no duration and shows as `—` rather than `0s` — a runtime that invented seconds would be a lie about the one number this view exists to give.\r\n\r\n### Splitting and merging — the chop\r\nPut the caret mid-line and press Enter: the row becomes two, the second inheriting the model, settings and references, and marked as continuing the first if the split lands mid-sentence. Select two adjacent rows and press **Merge**: they become one, references combined, durations summed. **The price and the runtime move as you do it** — which is the whole reason to make the decision here rather than in a document somewhere else.\r\n\r\nSplit is also the move behind a voiceover that keeps talking while the picture hard-cuts to a new world: split at a word boundary and both rows carry one sentence, each with its own visuals.\r\n\r\nThe **Dialogue continues from previous shot** toggle is a planning note that the sentence spans a cut. It does not merge shots, join generated audio, or change generation settings. Its pressed state shows whether the note is set; toggling it does not move the script. **Merge these two shots** is the separate control between adjacent shots that actually combines them. In Script → Custom, **Scene** toggles scene headings and their controls; the dialogue remains visible even if a hidden heading belonged to a collapsed scene.\r\n\r\n### Variety, counted and never judged\r\nSlates counts what is in front of it — shot sizes, camera moves, cast, locations, durations, and any of them repeating three or more times in a row — and shows the counts. **It never changes anything, never suggests anything and never blocks.** `shotSize` and `camera` are free text: write `long-lens CU, other head blurred` if that is the shot. Anything unrecognised counts as \"other\", which is a fine answer.\r\n\r\nIf a spoken line cannot be read in its cut at any plausible pace, the row says so — and says it only when the line is genuinely impossible, never when it is merely long.\r\n\r\n### The animatic\r\nPress play on any beat and the storyboard plays as a rough cut: each picture held for **its own cut's duration**, with the line underneath. That tells you the rhythm of the finished piece before a single video exists. A multi-shot generation holds one picture across its internal cuts, and says so. A cut with no duration is held for 3 seconds and marked — the header leaves it out of the runtime for the same reason it is marked here.\r\n\r\n### Things that stay honest rather than being hidden\r\n- **Deleted references.** If an asset or character a Shot points at is gone, the Shot still loads and the row says how many items were left out of what gets sent — and editing the row does not quietly drop them.\r\n- **A swapped model.** Changing a Shot's model never rewrites your words — video models genuinely take different prompt grammars, so the row tells you which model the prompt was written for and leaves the sentence alone. The settings line shows what will actually be sent after the swap, and that is the value it prices.\r\n- **Image Shots carry no role badges.** Image generation sends every reference in one undifferentiated list, so an image Shot can remember that a picture is a style reference but cannot tell the model.\r\n- **The thumbnail is never a question.** Slates picks it — the first frame, else the first reference, else the newest take — and you can override it from any reference in the gutter.\r\n\r\n### Firing several\r\nSelect Shots and press **Generate all**: one total, the largest single Shot stated separately, one approval. They run **one at a time**. If one of the selected Shots has been deleted, the whole batch is refused and names it — nothing fires and nothing is billed. If a generation fails mid-run, the rest still fire, the failure is reported per Shot, and **nothing is retried automatically**.\r\n\r\n### Deleting\r\nDeleting a storyboard tells you how many Shots are attached before it does anything, and deletes them with it. It never moves them somewhere else without asking. A Shot that also lives in another storyboard survives.\r\n\r\n---\r\n\r\n## STORYBOARDING\r\n\r\n### Hierarchy\r\nStoryboard → Scenes → **Shots**. A scene is an ordered list of Shots, and a Shot is one beat: its picture, its references and their roles, its model and settings, its prompt, its words, and the generations it has produced. See **SHOTS** above — that section is the storyboard.\r\n\r\n**Collapse all / Expand all**, beside **Add Scene**, closes or opens every scene in the current storyboard, including scenes hidden by the animation filter. Individual scene headings still toggle independently. Available in Board and in Script when the Scene layer is visible; hiding that layer keeps the script readable. Newly added scenes start expanded.\r\n\r\n### What happened to frame types\r\nThere used to be a \"frame type\" on each picture — first / last / ingredient — plus a separate motion-prompt box. Both were a second, weaker way of saying what a Shot already says: **a reference's role lives on the Shot** (first frame, last frame, subject, style, plain reference), and the motion prompt was just the Shot's prompt under another name. Existing storyboards were converted automatically and nothing was lost. Pick a picture's job on the Shot's reference rail; write the motion in the Shot's prompt.\r\n\r\n### Grid Exploration\r\n2x2 grid: 4 prompt variations for quick iteration. 3x3 grid: 9 variations for deeper exploration. Select individual cells → extract to full-resolution images. Tip: 2x2 is usually sufficient and produces better quality. 3x3 can occasionally get proportions slightly wrong when upscaling cells because it faithfully reproduces the lower-resolution proportions. Grid exploration runs on Nano Banana 2 only; no other image model offers it.\r\n\r\n### Storyboard → Video\r\nSelect frames → generate video for each → clips auto-insert into timeline in order with source tracking maintained.\r\n\r\n### The animatic\r\nPlay the storyboard as a rough cut. Each beat is held for **its own duration**, with its line underneath, so what you are watching runs at the finished piece's real length. Space = play/pause. Arrow keys = navigate. Escape = exit.\r\n\r\n### Paste a script\r\nPaste a script into the storyboard and it becomes one row per paragraph — ALL-CAPS cues become speakers, parentheticals become delivery. It is a plain parse, not a model: nothing is invented, nothing is sent anywhere, and prose that is not screenplay-formatted lands as one row per paragraph for you (or a connected agent such as ChatGPT via Codex, Claude, or Cursor) to chop.\r\n\r\n---\r\n\r\n## VIDEO EDITOR (TIMELINE)\r\n\r\n### Tracks\r\nMulti-track: video tracks + audio tracks stacked vertically. Clips independent per track. Add or remove tracks freely -- layer a music bed, a voiceover, and effects on separate audio tracks. Video assets go on video tracks, audio assets on audio tracks. Overlapping video clips resolve top-track-wins.\r\n\r\n### Audio Mixing\r\nEach track has a volume fader, and the timeline has a master output fader for the final mix. Both range from silent to +12 dB of boost, and both apply to preview playback AND the exported MP4 -- what you hear is what you render. Muting a video track silences its embedded audio but still shows the picture. Use the master fader to prevent clipping when stacking loud tracks.\r\n\r\n### Timeline Settings\r\nResolution and frame rate (24/30/60) are auto-managed: the first video clip sets both, and a later higher-resolution clip raises the canvas. All clips are conformed to the timeline frame rate on export. Changing the frame rate after clips are placed retimes them.\r\n\r\n### Clip Properties\r\nSource asset, in/out points (frame-level precision), duration, scale (fit/fill/custom %), position (X/Y offset), opacity (0-100%).\r\n\r\n### Tools\r\n- **Select (V):** Click/drag clips, view/edit properties\r\n- **Razor (C):** Split clip at playhead into two clips\r\n- **Slip (S):** Adjust clip in/out points without moving its position\r\n- **Snap toggle:** Snap to playhead/clip boundaries\r\n\r\n### Markers\r\nColor-coded timeline markers (6+ colors) with optional labels. Use for scene breaks, cue points, notes.\r\n\r\n### Playback & Navigation\r\nSpace = play/pause. Left/Right arrows = frame-by-frame. Up/Down = +-1 second. Page Up/Down = jump by screen width. Home/End = start/end of timeline.\r\n\r\n### Zoom\r\nCtrl+Plus = zoom in (finer precision). Ctrl+Minus = zoom out (see more timeline).\r\n\r\n### Undo/Redo\r\n50-step history. Ctrl+Z = undo. Ctrl+Shift+Z = redo.\r\n\r\n---\r\n\r\n## EXPORT\r\n\r\n### Video Export (FFmpeg)\r\nExport timeline → MP4 (H.264). Configure: resolution, frame rate, bitrate, output location. All visible tracks rendered, muted tracks excluded, clip in/out points respected. FFmpeg is bundled -- no separate install needed.\r\n\r\n### DaVinci Resolve XML Export\r\nGenerates XML project file containing: clip references (paths to source videos), timeline structure (tracks, clips), clip properties (scale, position, opacity, in/out points), timeline markers.\r\n\r\n**Importing into DaVinci Resolve:** File → Import → Timeline. DaVinci reads the XML and reconstructs your timeline with all clips, properties, and markers intact. From there you can color grade and export your final master.\r\n\r\nExports saved to project's exports/ directory with timestamped filenames.\r\n\r\n---\r\n\r\n## CHARACTERS, ENVIRONMENTS & STYLES\r\n\r\n### Characters\r\nCreate character with name + description. Generate character sheet (license required): AI generates a turnaround with multiple angles for consistency. Generate expression sheet: same character with different facial expressions. Use `@character_name` in any prompt to attach reference images.\r\n\r\n**Tips for consistency:** Experiment with character sheet generation using both the existing project style and photorealistic style. Sometimes a single well-chosen image works better than a full sheet -- especially if the character is already in the same style, lighting, and clothing as your project. You can manually assign any image as a character reference instead of generating a sheet.\r\n\r\n**Voice.** A character can carry one voice clip, the same way it carries one identity image — a shortcut for reusing a voice, never a requirement for speaking in one. **Add voice** / **Change voice** on the card opens the same voice picker the prompt box uses (a menu off the button, not a pop-up; the other cards stay on screen): a clip from the project attaches as it is; a preset or a described voice renders the character speaking a fixed audition line on Inworld TTS-2 and attaches that clip, at the credit cost the picker states first. Right-click the voice card → **Remove voice** detaches it without deleting the clip. The character's voice then shows under **Clips** in the Voice lane's picker, and mentioning the character (`@name`) attaches its clip on supported audio and video models. See the generated voice-attachment guidance above for current model support; the reference rail shows what will be sent.\r\n\r\n### Environments\r\nCreate environment with name + description. Generate environment grid (license required, 3x3): 9 variations. Extract individual cells to full-resolution images. Use `@environment_name` in prompts.\r\n\r\n**Tip:** Like characters, sometimes a single strong environment image gives better consistency than a grid of 9. Experiment with both approaches.\r\n\r\n### Styles\r\nCreate style with name + description + upload reference image. Use `#style_name` in prompts. Key visual auto-attachment option for consistent look across all frames.\r\n\r\n---\r\n\r\n## SETTINGS\r\n\r\n### Generation\r\nEvery generation runs on Slates Credits — there are no API keys to configure. The Generate button shows the exact credit cost before each generation, and failed generations refund immediately.\r\n\r\n### Other Settings\r\n- **Projects Directory:** Where project folders live on disk. Changeable anytime.\r\n- **Default Model:** Pre-selected model for new generations. Override per-generation.\r\n- **Default Quality/Resolution:** Pre-selected resolution. Override per-generation.\r\n- **Grid Size:** Default 2x2 or 3x3 for grid exploration.\r\n- **Auto Naming:** Automatically name generated assets.\r\n- **Prompting guide:** A link at the bottom of Settings to <https://slates.video/docs/prompting> — per-model prompting guidance for every model (see PROMPT SYSTEM above).\r\n\r\n---\r\n\r\n## ACCOUNT & BILLING\r\n\r\n### Login\r\nEmail-only, no password. Enter email → receive magic link → click to log in. First login creates account automatically. Session persists across restarts.\r\n\r\n### License\r\nUnlocks: character sheet generation and environment grid generation. Includes 12 months of updates (Slates Pro includes lifetime updates). Major upgrades discounted after.\r\n\r\n### Credits\r\n\r\n<!-- BEGIN:GENERATED credits -->\nCredits are what every generation is paid with. They are pay-as-you-go, they never expire, and the exact cost of a generation is shown on the Generate button before you commit.\n\n- A **Slates Standard** license ($149 one time) starts you with **1,000 credits**.\n- **Slates Pro** ($297 one time, or $97 to upgrade later) starts you with **3,000 credits**.\n\n| Pack | Credits (Standard) | Credits per dollar | Versus the smallest pack |\n|------|--------------------|--------------------|--------------------------|\n| $10 | 250 | 25.0 | standard rate |\n| $25 | 650 | 26.0 | +4% more credits |\n| $50 | 1,375 | 27.5 | +10% more credits |\n| $100 | 3,000 | 30.0 | +20% more credits |\n| $250 | 8,000 | 32.0 | +28% more credits |\n| $500 | 17,000 | 34.0 | +36% more credits |\n| $1,000 | 35,000 | 35.0 | +40% more credits |\n\nPacks up to $500 are open to everyone; the $1,000 pack is offered inside the app to licensed accounts. Slates Pro receives more credits than the Standard column above on every pack, for life.\n<!-- END:GENERATED credits -->\r\n\r\nCredits NEVER expire, there is no monthly reset, and failed generations refund immediately. You can also turn on auto-topup so your balance refills when it runs low.\r\n\r\n### Standard vs Pro\r\n- **Standard:** the app, every AI model, and pay-as-you-go credits that never expire, plus 12 months of updates.\r\n- **Slates Pro:** everything in Standard, plus our lowest credit rate on every pack, forever (buy the smallest pack and pay the largest pack's rate), **4K video generation** on every model that offers it, and lifetime updates. The more you top up, the more the better rate adds up.\r\n\r\nEvery AI model is available on both tiers. The only capability gated to Pro is generating 4K video; 4K images are open to everyone, and exporting your timeline at 4K is available on every tier.\r\n\r\n### 30-Day Guarantee\r\nFull refund within 30 days, no questions asked.\r\n\r\n---\r\n\r\n## KEYBOARD SHORTCUTS\r\n\r\n| Key | Action |\r\n|-----|--------|\r\n| Space | Play/pause |\r\n| V | Select tool |\r\n| C | Razor tool |\r\n| S | Slip tool / snap toggle |\r\n| M | Add marker |\r\n| Left/Right | Frame-by-frame |\r\n| Up/Down | Seek +-1 second |\r\n| Ctrl+Z | Undo |\r\n| Ctrl+Shift+Z | Redo |\r\n| Ctrl+Plus/Minus | Zoom timeline |\r\n| Delete/Backspace | Delete selected clip |\r\n| Escape | Close modal/viewer/slideshow |\r\n| Ctrl+Enter | Submit generation |\r\n| Home/End | Jump to timeline start/end |\r\n| Page Up/Down | Jump by screen width |\r\n\r\n---\r\n\r\n## OFFLINE USAGE\r\n\r\nThe app launches and works offline for everything except AI generation and login. Specifically:\r\n\r\n**Works offline:** Opening projects, viewing all assets (images/videos), editing timeline (trim, reorder, split clips), adding markers, slideshow playback, FFmpeg export to MP4, DaVinci XML export.\r\n\r\n**Requires internet:** AI generation (all models), login/signup, credit purchases, credit balance sync, license validation (only checked on first generation attempt per session, then cached), auto-updater.\r\n\r\nIf you lose internet mid-session, you can keep editing and exporting. Generation will fail until connectivity returns.\r\n\r\n---\r\n\r\n## GENERATION RECOVERY\r\n\r\nIf the app closes during a generation: on restart, Slates detects in-flight jobs, polls the AI provider, and downloads completed results automatically. Nothing is lost. Recovering generations show at 5% in the queue until status is confirmed. Works for every model.\r\n\r\n---\r\n\r\n## TROUBLESHOOTING\r\n\r\n**\"Insufficient credits\"** — Your credit balance is too low for this generation. Buy more credits in the app (packs from $10 to $500) or turn on auto-topup. The exact cost of any generation is shown on the Generate button before you commit.\r\n\r\n**\"Input was rejected by Kling\"** — Image may not meet quality requirements (character visibility, proportions, content policy). Try a different image or prompt.\r\n\r\n**\"Failed to upload image to FAL CDN\"** — Network issue during reference image upload. Check internet connection, retry.\r\n\r\n**\"Generation failed\" / \"Proxy generation failed\"** — Generic error from the AI provider. Usually temporary. Retry. If persistent, try a different model.\r\n\r\n**\"Source asset not found\" / \"Source video asset not found\" / \"Target image asset not found\"** — The image or video you're trying to use was deleted or moved. Re-import or select a different asset.\r\n\r\n**\"Invalid audio source\"** — Lip sync: either enter TTS text or upload an audio file. One is required.\r\n\r\n**\"TTS response missing audio URL\"** — Text-to-speech failed during lip sync. Retry.\r\n\r\n**Generation stuck** — Restart app. Recovery system polls providers and picks up where it left off.\r\n\r\n**API rate limit** — Too many requests (limit: 20 generations/minute). Wait 1-2 minutes, retry.\r\n\r\n**Project files missing** — Project folder was moved/deleted outside the app. Use project relocation in Settings to re-point to the correct folder.\r\n\r\n**License shows \"revoked\"** — Contact support. Character sheets and environment grids unavailable until resolved.\r\n\r\n**Session expired** — Magic link session timed out. Log in again via Settings.\r\n\r\n**iPhone photos won't import** — iPhones save photos as HEIC/HEIF format, which Slates doesn't support. Convert to JPEG or PNG first (most photo apps and online converters can do this).\r\n\r\n---\r\n\r\n## PRIVACY & DATA\r\n\r\n- Generated files stay on YOUR machine. Slates servers never store your videos/images.\r\n- No prompts logged server-side.\r\n- File uploads go directly to the AI provider via pre-signed URLs. Slates servers never buffer your media.\r\n- Server stores only: email, license status, credit balance, transaction history, session tokens.\r\n- Stripe handles all payment data. Slates never sees your card number.\r\n\r\n---\r\n\r\n## SYSTEM REQUIREMENTS\r\n\r\n- Windows 10/11 or macOS 12+\r\n- Internet connection required for AI generation (not for editing/exporting)\r\n- Disk space for project files (AI videos are typically 5-50MB each)\r\n- FFmpeg bundled with app (no separate install needed)\r\n- No GPU required (all AI processing happens in the cloud)\r\n\r\n---\r\n\r\n## COMMON TASKS (STEP-BY-STEP)\r\n\r\n### Generate an Image\r\n1. Open the floating prompt box (visible on every page).\r\n2. Enter your prompt describing the image.\r\n3. Select an image model (Nano Banana 2 recommended).\r\n4. Choose aspect ratio and resolution.\r\n5. Press Ctrl+Enter or click Generate.\r\n\r\n### Generate Video From an Image\r\n1. In the prompt box, attach a start image.\r\n2. Write a prompt describing the desired motion/action.\r\n3. Select a video model (Kling V3.0 Omni in ingredients mode recommended).\r\n4. Choose duration (Kling bills per second from 3s up, so shorter is always cheaper), aspect ratio, and resolution.\r\n5. Click Generate.\r\n\r\n### Use a Character Reference for Consistency\r\n1. Create a character in your project (name + description).\r\n2. Either generate a character sheet OR manually assign a single image as the character reference.\r\n3. In the prompt box, type `@` and select your character from auto-complete.\r\n4. The reference image is attached automatically. Generate normally.\r\n\r\n### Export to DaVinci Resolve for Color Grading\r\n1. In the video editor, finalize your timeline (clips, markers, timing).\r\n2. Click Export → DaVinci Resolve XML.\r\n3. Choose output location. File saves to exports/ directory.\r\n4. In DaVinci Resolve: File → Import → Timeline. Select the XML file.\r\n5. Your timeline loads with all clips, properties, and markers intact. Grade and export.\r\n\r\n### Extract a Still Frame From a Video\r\n1. Hover over any video clip in the gallery.\r\n2. Camera icon = extract **current frame**. Dropdown arrow next to it = **First frame** or **Last frame**.\r\n3. Extracted image saves to your project gallery. Use as start/end image for I2V, character reference, or storyboard frame.\r\n\r\nKey workflow: extract a clip's last frame → use it as the start image for the next generation → seamless visual continuity between scenes.\r\n\r\n### Buy More Credits\r\n1. Open Settings → Credits, or the credit badge in the top nav.\r\n2. Pick a pack (packs run from $10 to $500, plus a $1,000 pack offered in the app to licensed accounts; bigger packs give more credits per dollar).\r\n3. Pay via Stripe. Credits are added to your balance instantly and never expire.\r\n4. Optional: turn on auto-topup so your balance refills automatically when it runs low.\r\n\r\n---\r\n\r\n## COMMON QUESTIONS\r\n\r\n**Q: Which model should I use for most videos?**\r\nA: Seedance 2.0 is the default and the one to reach for when physics, scale, effects or hero shots matter. For everyday shots built from a start image, Kling V3.0 Omni in ingredients mode is the best balance of cost and quality, which is why the step-by-step guides above use it.\r\n\r\n**Q: What's the best image model?**\r\n<!-- BEGIN:GENERATED image-choice -->\nA: The image picker defaults to **GPT Image 2.5 Sunburst**. Choose the model for its documented strengths and inspect the generated model table above for reference limits, resolutions, and prices. The quality and background controls show the options supported by the selected model.\n<!-- END:GENERATED image-choice -->\r\n\r\n**Q: Do I need to set up API keys?**\r\nA: No. There are no API keys in Slates — every generation runs on Slates Credits, which come with your license and never expire.\r\n\r\n**Q: How much does a generation cost?**\r\nA: It depends on the model, resolution, and length. The exact credit cost is always shown on the Generate button before you commit, so there are no surprises.\r\n\r\n**Q: Can I use Slates offline?**\r\nA: Yes for viewing projects, editing timeline, and exporting. No for AI generation -- that requires internet.\r\n\r\n**Q: Do credits expire?**\r\nA: No. Credits never expire.\r\n\r\n**Q: What happens if I close the app during a generation?**\r\nA: Nothing is lost. On restart, Slates detects in-flight jobs and downloads completed results automatically.\r\n\r\n---\r\n\r\n## FEATURES NOT IN SLATES\r\n\r\nThe following are NOT available. Do not suggest them:\r\n\r\n- Bring-your-own API keys (BYOK) — every generation runs on Slates Credits; there is no key-entry option\r\n- Local/on-device GPU inference (all AI runs in the cloud)\r\n- Built-in music generation (use external tools like Suno, import audio)\r\n- A voice picker for Seed Audio — you describe the voice you want in words instead. The preset voice shelf belongs to the Voice lane (Inworld TTS-2), and Kling Lip-Sync keeps its own small fixed list: six English/UK voices plus a storyteller, with a speed control\r\n- Automatic video editing from a script\r\n- A prompt \"Enhance\" button — ask Studio Agent to rewrite a prompt instead\r\n- A settings/gear panel on the prompt box — every parameter is a dropdown on the bar\r\n- Cloud project storage (all files are local)\r\n- Real-time collaboration / multi-user editing\r\n- Mobile app (desktop only: Windows and macOS)\r\n- HEIC/HEIF image import (convert to JPEG/PNG first)\r\n- Storyboard JSON export (import only)\r\n\r\n---\r\n\r\n## VERSION\r\n\r\n<!-- BEGIN:GENERATED version -->\nSlates Reference Version: 1.5.8\nLast Updated: 2026-09-13\n\nThis document is generated. Its source of truth is `slate/docs/slates-llm-manual.md`; its model tables and credit costs are derived from the Slates model registry and pricing tables at build time, so they cannot be typed by hand.\n\nIf the user asks about a feature not documented here, it may have been added after this version. The current copy is always at <https://slates.video/slates-reference.md>.\n<!-- END:GENERATED version -->\r\n\r\nIf this document didn't answer your question, email hello@slates.video so we can help and improve the app.\r\n\r\n</slates_reference>\r\n";
2
+ export const APP_MANUAL = "# Slates — Complete Reference for AI Assistants\n\n<!-- The heading above must stay first: shipped app builds reject this file if it\n does not begin with one. See slate/CLAUDE.md; check:llm-docs enforces it. -->\n\n<system_role>\nYou are a support assistant for the Slates desktop application. Answer user questions using ONLY the information in the <slates_reference> below. Be concise and direct. Use numbered steps for procedures. Use bullet points for explanations when helpful.\n</system_role>\n\n<rules>\n- If the answer cannot be found in the <slates_reference>, say: \"That isn't covered in the Slates reference.\" Do not guess or invent features.\n- If the user asks how to do something, give step-by-step instructions from the workflows and features described here.\n- If the user reports an error, check the TROUBLESHOOTING section first.\n- Refer to the FEATURES NOT IN SLATES section before answering questions about capabilities that might not exist.\n- Quote the exact error message when referencing troubleshooting entries.\n</rules>\n\n<slates_reference>\n\n<!-- BEGIN:GENERATED header -->\n# SLATES v1.6.0 — Complete Reference\n\n> **Freshness.** Generated from the Slates source of truth for app version **1.6.0**, last changed **2026-09-30**. The canonical copy of this file is <https://slates.video/slates-reference.md>. If a model, price or feature the user mentions is missing below, this copy is out of date: re-fetch that URL before answering, and say so.\n<!-- END:GENERATED header -->\n\n**What is Slates?** Desktop app (Windows 10/11, macOS 12+) for AI image and video creation. One-time purchase, no subscription. Every license includes 1,000 free credits, and Slates Pro starts with 3,000 credits. Every generation runs on Slates Credits — there are no API keys to set up, and credits never expire.\n\n---\n\n## INTENDED WORKFLOW\n\nThe designed start-to-finish flow:\n\n1. **Create project** — **New project** on Home; name it in the titlebar, or skip that. Creates folder on your disk.\n2. **Build visual assets** — Generate images, create characters (with identity sheets for consistency), locations (with an establishing image), and looks. This is your Library.\n3. **Create a board** — Add scenes. Every picture you drop in becomes a **Shot**: one beat of the piece, holding its references, its model, its settings and (when you want them) its words.\n4. **Write the piece** — Switch the board to its **Script** tab and write. What is said, what happens, the framing, the prompt each beat will send. Nothing is required and nothing is asked for; a visuals-only piece is finished as it stands.\n5. **Read it before you pay for it** — The header states how many generations, how many cuts, how long it runs and what it will cost. Press play for a rough cut at the real timing. Re-chop with split and merge and watch the price move.\n6. **Generate** — Select the beats you want and fire them in one approved batch. Each result lands under the row that made it.\n7. **Organize** — Switch to **Board** to re-order. Drag a beat and the whole thing moves with it.\n8. **Add to timeline** — Add clips to the built-in multi-track video editor.\n9. **Edit** — Trim, reorder, add markers, adjust timing.\n10. **Final export** — Export to MP4 directly, or export the timeline for DaVinci, Premiere or Final Cut as an XML file for professional color grading.\n\n---\n\n## MODEL REFERENCE TABLE\n\n**Generating 4K video is a Slates Pro feature** — every tier generates video up to 1080p, and 4K images are open to everyone. Exporting your finished timeline at 4K is available on every tier.\n\nEvery model runs on Slates Credits. **The exact credit cost appears on the Generate button before anything fires.** The tables below are generated from the app's own model registry and rate tables, so they describe exactly what the model picker offers in this version: aspect ratios, resolutions, durations, reference-image limits, and the credit price of each. Bigger credit packs lower your per-credit cost, and Slates Pro gets the best pack rate on every purchase.\n\n<!-- BEGIN:GENERATED model-tables -->\n### Image Models\n\n| Model | Aspect Ratios | Resolutions | Max Refs | Credits per image |\n|-------|--------------|-------------|----------|-------------------|\n| **GPT Image 2.5 Flare** | 1:1, 16:9, 9:16, 4:3, 3:4 | 2K / 3K / 4K | 16 | 2K 2 · 3K 3 · 4K 5 (default quality; at max: 2K 8 · 3K 11 · 4K 20) |\n| **GPT Image 2.5 Sunburst** | 1:1, 16:9, 9:16, 4:3, 3:4 | 2K / 3K / 4K | 16 | 2K 2 · 3K 3 · 4K 5 (default quality; at max: 2K 8 · 3K 11 · 4K 20) |\n| **Nano Banana 2** | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 21:9 | 1K / 2K / 4K | 14 | 1K 4 · 2K 6 · 4K 8 |\n| **Nano Banana 2 Lite** | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 21:9 | 1K | 4 | 1K 2 |\n| **Nano Banana Pro** | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 21:9 | 1K / 2K / 4K | 14 | 1K 8 · 2K 8 · 4K 15 |\n| **FLUX.2 Max** | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 21:9 | 1K / 2K / 4K | 4 | 1K 4 · 2K 5 · 4K 8 |\n| **Seedream 5 Lite** | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 21:9 | 2K / 3K / 4K | 10 | 2K 2 · 3K 2 · 4K 2 |\n\n### Video Models\n\n| Model | Duration | Aspect Ratios | Resolutions | Max Refs | Audio | Credits per second |\n|-------|----------|--------------|-------------|----------|-------|--------------------|\n| **Seedance 2.0** | 4-15s | 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 | 480p / 720p / 1080p / 4K | 9 | Included | 480p 3.5 · 720p 7.5 · 1080p 18.5 · 4K 39 |\n| **Seedance 2.5** | 4-30s | 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 | 480p / 720p / 1080p | 30 | Included | 480p 5.1 · 720p 11.6 · 1080p 28.4 |\n| **Seedance 2.5 Edit** | Follows the source clip (4-30s) | 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 | 480p / 720p / 1080p | 0 | Included | 480p 6.2 · 720p 13.9 · 1080p 34.1 |\n| **Kling V3.0 Standard** | 3-15s | 16:9, 9:16, 1:1 | 720p / 4K | 4 | Optional, costs more | 720p 4.2 (6.3 with audio) · 4K 21 |\n| **Kling V3.0 Pro** | 3-15s | 16:9, 9:16, 1:1 | 1080p / 4K | 4 | Optional, costs more | 1080p 5.6 (8.4 with audio) · 4K 21 |\n| **Kling V3.0 Omni** | 3-15s | 16:9, 9:16, 1:1 | 720p / 4K | 4 | Optional, costs more | 720p 4.2 (5.6 with audio) · 4K 21 |\n| **Kling V3.0 Omni Pro** | 3-15s | 16:9, 9:16, 1:1 | 1080p / 4K | 4 | Optional, costs more | 1080p 5.6 (7 with audio) · 4K 21 |\n| **Kling O3 Edit** | Follows the source clip (3-15s) | 16:9, 9:16, 1:1 | 1080p | 4 | Included | 1080p 6.3 |\n| **Kling O3 Edit Pro** | Follows the source clip (3-15s) | 16:9, 9:16, 1:1 | 1080p | 4 | Included | 1080p 8.4 |\n| **MiniMax H3 Max** | 5-15s | 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 | 480p / 768p / 1080p | 9 | Included | 480p 2.5 · 768p 4 · 1080p 8 |\n| **MiniMax H3** | 5-15s | 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 | 480p / 768p / 2K / 4K | 9 | Included | 480p 2.5 · 768p 3 · 2K 6.5 · 4K 8 |\n| **MiniMax H3 Max Turbo** | 5-15s | 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 | 480p / 768p / 1080p | 0 | Included | 480p 1.3 · 768p 2 · 1080p 4 |\n| **Gemini Omni Flash** | 3-10s | 16:9, 9:16 | 720p | 7 | Included | 720p 6.4 |\n| **Omni Flash Edit** | Follows the source clip (3-10s) | 16:9, 9:16 | 720p | 0 | Included | 720p 6.4 |\n| **LTX-2.5** | 6/8/10/12/14/16/18/20s at 720p/1080p; 6/8/10s at 1440p/4K | 16:9, 9:16 | 720p / 1080p / 1440p / 4K | 0 | Included | 720p 4.5 · 1080p 6.5 · 1440p 9.5 · 4K 15 |\n| **LTX-2.5 Pro** | 6, 8, 10s | 16:9, 9:16 | 720p / 1080p | 0 | Included | 720p 6 · 1080p 8.5 |\n| **Veo 3.1 Fast** | 4/6/8s at 720p; 8s at 1080p/4K | 16:9, 9:16 | 720p / 1080p / 4K | 3 | Optional, costs more | 720p 5 (7.5 with audio) · 1080p 5 (7.5 with audio) · 4K 15 (17.5 with audio) |\n| **Veo 3.1 Standard** | 4/6/8s at 720p; 8s at 1080p/4K | 16:9, 9:16 | 720p / 1080p / 4K | 3 | Optional, costs more | 720p 10 (20 with audio) · 1080p 10 (20 with audio) · 4K 20 (30 with audio) |\n\n**Seedance 2.0 · Face** is a separate row in the model picker (a face in a reference image routes to a different provider, which costs more): 27.4 credits per second at 1080p.\n**Seedance 2.5 · Face** is a separate row in the model picker (a face in a reference image routes to a different provider, which costs more): 16.3 credits per second at 720p.\n**Seedance 2.5 Edit · Face** is a separate row in the model picker (a face in a reference image routes to a different provider, which costs more): 19.8 credits per second at 720p.\n\n### Audio Models\n\n| Model | Length | Credits |\n|-------|--------|---------|\n| **Seed Audio 1.0** | 3-120s | 1 at 3s · 3 at 15s · 19 at 120s |\n| **Inworld TTS-2** | up to 2,000 characters of text per take | 1 at 250 characters · 3 at 2,000 characters (billed per 250) |\n| **Sound Effects** | 1-22s | 1 at 1s · 1 at 4s · 3 at 22s |\n\n### Tools (Lip Sync, Motion Transfer)\n\nThese are real Kling endpoints that take a clip or a still as their subject, not models you prompt from scratch. Both bill in 5-second blocks.\n\n| Tool | Input | Billed in | Credits per block |\n|------|-------|-----------|-------------------|\n| **Kling Lip Sync** | Video source | 5s block | 4 |\n| **Kling Lip Sync (Avatar v2 Standard)** | Still-image source | 5s block | 14 |\n| **Kling Lip Sync (Avatar v2 Pro)** | Still-image source | 5s block | 29 |\n| **Kling Motion Control Standard** | Still image + reference video | 5s block | 32 |\n| **Kling Motion Control Pro** | Still image + reference video | 5s block | 42 |\n<!-- END:GENERATED model-tables -->\n\n---\n\n## WHICH MODEL TO USE\n\n<!-- BEGIN:GENERATED model-routing -->\nDefault images: **GPT Image 2.5 Sunburst**, quality `high`, 3K. Default video: **Seedance 2.5**. Existing user choices take priority.\n\n### Images\n\n- **Nano Banana 2 (Gemini 3.1 Flash Image)** (generate; specialist): The all-rounder and the only image seat with a headless path: holds many subjects coherently in one frame, and the start-frame for legible in-scene text. Knowledge cutoff Jan 2025: anything later needs reference images.\n- **Nano Banana 2 Lite** (generate; specialist): FAST/DRAFT image tier — markedly cheaper and faster than NB2 full, at draft quality. Route here for iteration volume, then re-run the winner on NB2 full. Same Gemini content filter as NB2.\n- **Nano Banana Pro** (generate; specialist): HERO-FRAME / typography PREMIUM image tier. NB2 is about 95% of Pro — escalate only when spatial composition, cinematic lighting/skin, fine typography-in-scene or deep multi-element reasoning must be perfect, and say why.\n- **GPT Image 2.5 Flare** (generate; specialist): THE FAST GPT IMAGE SEAT — OpenAI's small model, optimized for SPEED, quality COMPARABLE to GPT Image 2 (not better) at roughly half the latency. Route here when speed matters: drafts, exploration, volume. TEXT / DIAGRAM / PANEL work — character sheets, shot grids, text-bearing panels. When quality outranks speed, escalate to Sunburst. Own content filter, distinct from Gemini's. Killed by a head-to-head at the intended crop going the other way.\n- **GPT Image 2.5 Sunburst** (generate; default): THE QUALITY GPT IMAGE SEAT — OpenAI's most capable image model, higher quality than GPT Image 2, same price as Flare, deliberately SLOWER. Route here unless speed is the point: finals, hero frames, photoreal people, and multi-reference edits where every reference must survive into one frame — its widest lead. Explore on Flare, finish on Sunburst.\n- **FLUX.2 Max** (generate; specialist): Photoreal image seat, less censored than the Gemini rails. Auto-routes to its edit endpoint when references are present.\n- **Seedream 5 Lite** (generate; specialist): CHEAPEST image seat, flat-priced. Less censored. Routes to its edit endpoint when references are present.\n\n### Videos\n\n- **Seedance 2.0** (generate; specialist): THE 4K AND VALUE SEAT beside the 2.5 default — the only Seedance with native 4K (Pro-gated; base accounts get PRO_REQUIRED) and cheaper than 2.5 at every resolution they share, with the same physics, effects and scale strengths; shorter takes, fewer references, no timestamps. VIDEO-ONLY. A bare \"seedance\" still resolves here for older CLIs that expect 4K.\n- **Seedance 2.5** (generate; default): DEFAULT VIDEO MODEL — the strongest seat for physics, effects, scale and hero shots, and the only Seedance that takes long single takes, many references, audio-only references and integer-second timestamps. No 4K, and dearer than 2.0 at every shared resolution: go to 2.0 for 4K or the same resolution cheaper. LENGTH is the price dial — quote long takes first. VIDEO-ONLY. Timestamp grammar and the edit/extend words that make the provider reclassify and fail a generation are in slates-prompting-seedance-2-5.\n- **Seedance 2.5 Edit** (edit; specialist): VIDEO-TO-VIDEO EDIT via slates_edit_video, and the only edit engine that takes a clip longer than the other two reach — that length is the whole reason to route here. Inside their range, compare on fidelity instead: Omni Flash edit won the prompt-only head-to-head, and Kling edit is the one that takes reference images. Edits audio on the same row (re-voice, re-accent, translate with re-fitted lips, replace BGM). Costs roughly double a plain 2.5 generation of the same length, because an edit bills input plus output seconds.\n- **Kling 3.0** (generate; specialist): THE COST-EFFECTIVE SEAT — strong start-frame adherence (identity, layout, text), acting, dialogue, lip-sync and the widest aspect-ratio set; pick it when the budget matters and the shot is a performance or a start-frame animation. Kling is also the ONLY engine behind the Motion Transfer and Lip Sync tools.\n- **Kling O3 Video Edit** (edit; specialist): VIDEO-TO-VIDEO EDIT, the REF-DRIVEN one: it is the only edit seat that takes element/style reference images to lock subject identity, and its keep_audio preserves the original audio verbatim. Route here when an edit NEEDS reference images or bit-exact audio; for prompt-only footage-synced VFX, omni-flash-edit won the fidelity head-to-head. One instruction beat per pass — multi-beat prompts get under-executed.\n- **Veo 3.1** (generate; niche): NICHE, never the default — pick only when native synchronized audio must generate WITH the video in one pass, and the narrowest aspect-ratio and duration sets in the catalogue are acceptable. Otherwise Seedance 2.5 (the default) or Kling (cost-effective performance) win.\n- **Gemini Omni Flash** (generate; specialist): CHEAP tier with native synced audio included. Route here for cheap drafts, audio-in-one-pass at low cost, and reference-to-video character-consistency trials. VIDEO-ONLY. Quality against Kling/Seedance is unproven — do not route hero shots here.\n- **Omni Flash Edit** (edit; default): VIDEO-TO-VIDEO EDIT, prompt-only — THE EDIT-FIDELITY WINNER (head-to-head vs Kling edit on real talking footage: lips held, audio near-identical, both action beats landed) and the cheapest edit seat. Footage-synced prop, effect, environment and lighting swaps. Takes NO reference images — identity swaps needing refs go to Kling edit. Fidelity is EARNED by prompt discipline; the exact form is in slates-prompting-omni-flash.\n- **MiniMax H3** (generate; specialist): THE AUTHORED-AUDIO SEAT — reach for H3 when the sound is part of the shot rather than a switch on it: synchronised dialogue, scene sound and an audience-only score directed as three separate layers in ONE pass, across eleven languages. Kling and Seedance treat audio as on/off; Veo generates it but gives you no way to direct the layers. Only H3 also carries a DECLARED REFERENCE RELATIONSHIP (kept whole, partly kept, transferred, or a loose echo). VIDEO-ONLY. Its top two resolution tiers are UPSCALES of the native render, not larger generations — judge at native and upscale in post. Reference images past the fifth are a PAID key dimension: pass referenceImages when quoting.\n- **MiniMax H3 Max** (generate; specialist): THE SPEED SEAT, and the DEARER one at the tier they share — never the cheap H3 and never the default. fal's post-train of the H3 weights: MEASURED 2026-08-27 at about 12x faster than base H3 on the same prompt and params, queue to finished file, plus a thin vendor-reported quality edge. It tops out at a 1080p refinement of its 768p render. It takes the same omni-reference set as base H3 and animates start and end frames — but not both in one call: its reference endpoint has no start/end-frame fields, where base H3's does. Never describe this row as taking no image or reference input. Route here when a fast turnaround on text-to-video or a start-frame shot is worth the premium.\n- **MiniMax H3 Max Turbo** (generate; specialist): THE BUDGET SEAT of the MiniMax family: a second fal post-train of the H3 weights, billed at half H3 Max's rate at every tier. Its 1080p is a refinement of the native 768p render, not a native 1080p generation. INPUTS ARE FRAMES, NOT REFERENCES: text-to-video and start/end frames only, with no reference endpoint, so reference-driven consistency goes to H3 Max or base H3. Route here for drafts, volume and cheap coverage, then re-run the keeper on H3 Max or a hero seat.\n- **LTX-2.5** (generate; specialist): THE VOLUME SEAT — the cheapest native 1080p second in the catalogue, and the row for MANY takes rather than one hero shot. Native synced audio is included free at every tier, unlike Kling where sound is a paid key dimension. It also reaches the highest resolution tier below 4K and makes the LONGEST clips in the catalogue. VIDEO-ONLY. INPUTS ARE FRAMES, NOT REFERENCES: start frame plus an optional end frame, and no reference endpoint at all — for character consistency across shots use H3 or Kling. Route here for batch coverage, long takes, and anything where the credit budget is the binding constraint.\n- **LTX-2.5 Pro** (generate; specialist): THE FIDELITY SEAT of the LTX pair — the full diffusion build against the base row's distilled one. 🚨 IT IS NOT A SUPERSET OF THE BASE ROW, which is the opposite of every other Pro seat here: it reaches a SHORTER resolution ladder and makes SHORTER clips, and it costs more at both tiers they share. Reaching for it because the name says Pro costs more AND takes away reach. Everything else matches the base row. Route here only when a specific shot needs the fidelity and fits inside its narrower envelope.\n\n### Audio\n\n- **Seed Audio 1.0** (generate; default): DEFAULT audio model — the one-pass SCENE workhorse: dialogue, SFX and ambience together from ONE plain sentence. Route here for continuity beds, room tone, crowd and nature soundscapes, and quick scratch VO. AUDIO-ONLY. Takes one image XOR up to three audio clips as references, never both. Prompt form and the length rule are in slates-prompting-seed-audio.\n- **ElevenLabs Sound Effects v2** (generate; specialist): ONE-SHOT SOUND EFFECT with an EXACT duration — route here for a single hit that must land on a frame (door slam, whoosh, impact, UI blip) or for a seamless loop. AUDIO-ONLY. For layered scenes with dialogue or room tone, seed-audio does it in one pass instead.\n- **Inworld Realtime TTS-2** (generate; specialist): THE VOICE SEAT — one named voice saying one line, billed per CHARACTER not per second. Route here when WHO is speaking matters. NOT scene audio — that is seed-audio; a single effect is eleven-sfx.\n<!-- END:GENERATED model-routing -->\n\n---\n\n## GENERATION MODES\n\n### Create Image\nPrompt → select image model → set aspect ratio + resolution → generate. Batch grids available for quick iteration.\n\n### Text-to-Video\nPrompt → select video model → set duration + aspect ratio + resolution → generate. Output: MP4.\n\n### Image-to-Video (I2V)\nAttach start image + prompt → select model → generate video from that image. Optional: on a model that offers it, set a second image's role to **Last frame** for a guided transition.\n\n### Ingredients / References\nUse @name in a prompt to attach a Library item (a character, location, product or prop) as a reference, and #name to apply a look, for visual consistency. How many references each model takes is the **Max Refs** column of the model table above. The @ and # names auto-complete from your project's Library.\n\n### Lip sync\n**Kling only.** Pick **Kling Lip Sync** in the model picker. Source: video or still image.\n\n- **Audio source** — Text to speech (type the line; six English/UK voices plus a storyteller, with a speed control) OR Upload audio (bring your own recording, max 5MB).\n- **Avatar tier** — only appears for a still-image source: Avatar v2 Standard (the value tier) or Avatar v2 Pro (higher fidelity, higher rate).\n- Billed in 5s blocks. Text to speech on a still image adds one block for rendering the voice.\n\nWorks very well with human-like characters. Less reliable with animals or non-human characters.\n\n### Motion control\n**Kling only.** Pick **Kling Motion Control** in the model picker. Target: still image (your character). Source: reference video (the motion).\n\n- **Engine** — Kling MC Standard (value tier) or Kling MC Pro (higher fidelity, higher rate).\n- **Orientation** — *Match video* copies skeleton and depth from the clip (best for dancing, walking, full-body action; driving clips up to 30s). *Match image* keeps your character's pose and angle and uses the video only as motion hints (best for close-ups; up to 10s).\n- 5s output.\n\n> **Note:** these two tools used to offer a second \"Seedance 2.0\" engine. It was not a separate engine — picking it made Slates write a sentence into your prompt that you never saw, which is no longer allowed anywhere in the app (see \"What gets sent\" below). Both tools are now Kling endpoints only.\n\n### Edit Image\nClick any image to open the viewer. It opens on the **Move** tool, so a click never draws on the picture; pick the pen, arrow, box or text tool to mark it, and the marks stay with that picture while you step through the others (hold Space and drag to pan with any tool). The caption at the bottom left names the picture (code, model, date; point at it for the prompt) beside the counter, and the line at the bottom right says what the keys do. Right-click the picture for **Go to image in Media** and the same menu its card has. Scroll or double-click to zoom; double-click again to fit. **Add to prompt** attaches the picture and leaves the viewer open; **Animate** makes it a video's first frame and closes the viewer onto the prompt box. Enter an edit prompt describing the changes you want; the sentence and the Edit box's settings stay while you step to another picture, and clear once the edit is sent. The Edit box uses the prompt bar's own model picker and settings: it opens on the app's default image model, lists every image model with its price, and offers that model's resolutions (each row priced), aspect ratios and, on GPT Image, quality and background. Add reference images with **+**, up to the model's own limit less one, because the picture you are editing counts as the first image; every edit model receives them. The price is on the Edit button. The result saves as a new asset with the original preserved. A grid image opens on its cells: click cells to pick them, and **Extract 2 · price** makes each a full picture; **Cells | Edit** at the bottom switches to editing the whole grid, and **Show prompt** shows the prompt Extract will send, which you can edit first. Useful for refining generated images without starting from scratch.\n\n### Edit Video (Omni Flash Edit / Kling O3 Edit / Seedance 2.5 Edit)\nRight-click any video clip (in Media or on the timeline) → \"Edit with AI\", or its card's hover button of the same name (it reads **Stop editing** while that clip is the source). The clip attaches to the prompt box as the source; describe the CHANGE, not the whole scene (\"replace the man with @marcus\", \"make it a rainy night, keep everything else\"). The model picker pre-selects an edit model that accepts the clip's length, and you can switch to any other. Each edit model's clip length, reference limit and resolution are in the model table above; when to pick which is in WHICH MODEL TO USE.\n- **Kling O3 Edit:** the edit model that takes reference images: attach subject images (role: Subject) to swap someone in, or look images (role: Look) to give it a look. Original audio preserved.\n- **Omni Flash Edit:** prompt only — no reference images; keep instructions simple and add \"Keep everything else the same.\"\n- **Seedance 2.5 Edit:** the one that takes the longest clips.\n\nOutput length follows the source clip; the credit cost (clip seconds, rounded up, at the per-second rate) shows on the Generate button. The edited clip saves as a NEW asset linked to the original — chain edits freely. A clip longer than every edit model accepts needs trimming first (**Trim or split…** (under **More**) on the clip's right-click menu in Media).\n\n### Cuts inside one clip (Kling V3.0/Omni)\nPick **Cuts** on the Cuts control (its other choice is **One take**) and the Cuts dialog opens: several cuts inside one generated clip, each with its own description, length, camera move and shot size; **Add cut** is at the end of the list. Its button, **Use N cuts · Ns**, sets the clip's length to their total, and reads **Replace your prompt with N cuts** while the box holds words (the cuts take the prompt's place). To change them later, pick Cuts again or click the cuts in the prompt box. Binding a Shot that already holds cuts loads them without opening the dialog. Results can be hit-or-miss, but worth trying for quick multi-cut sequences. For more reliable results, generate separate short clips and assemble them on the timeline. On a model without cuts the prompt comes back; the cuts return on a Cuts model.\n\n---\n\n### Generate Audio\n\nSwitch the prompt box's lane pill from Image/Video to **Audio**, pick a surface, and generate. The prompt box offers three: **Seed Audio 1.0**, **Voice** (Inworld TTS-2) and **Sound Effects**. The result lands in **Media → Audio** as its own asset with a waveform and an inline player, and can be dragged onto an audio track in the timeline.\n\n- **Scene (Seed Audio 1.0)** — one plain sentence describing the moment. Set **Length**; Slates writes it into the prompt for you and that is exactly what you're billed for (press the eye beside Generate, **See what gets sent**, to read the appended text). **Say the crowd/room size out loud** — \"applause\" returns a full auditorium when you meant three people at an open mic. Ask for a few seconds more than the clip needs so the edit has fade handles. Describe the voice you want in the sentence itself (\"a weary dock foreman in his fifties, gravel in his voice\") — there is no voice picker.\n- **Voice (Inworld TTS-2)** — the prompt is the words to be spoken, verbatim. Pick the voice with the **Voice** control on the bar (presets you can play first, any clip in the project, a character's voice, or a description); the character counter is the bill. See MODELS → Inworld TTS-2 for direction tags and the cloning rules.\n- **Sound Effect** — describe the physical cause and set the length to roughly the event (≈1s for an impact, 2–4s for a whoosh, 8–22s + **Loop** for a bed). **Wording** sets how literally the description is followed: Interpretive, Balanced (default), or Literal.\n\n#### Use your own voice recording\n\nIn the bottom prompt box, choose **Audio**, then **Inworld TTS-2** in the model picker. Open **Voice → Clips → Import voice clip** and select your recording. The import adds an audio asset to this project without generating anything. Click its play button to audition it, then click the recording's name to choose it. Type the words you want spoken in the prompt box and press **Generate**, which shows the price. The new take appears in **Media → Audio**.\n\nUse a clean recording of one speaker whose voice you have permission to use. Slates clones the recording for each take; there is no separate training wizard or persistent vendor voice to manage. **Presets** lets you audition ready-made voices; **Describe** lets you write a voice description and choose **Use this description**. Choosing in the prompt box sets up the next take; only Generate spends credits.\n\nTo attach your recording or a generated take to a character, open **Characters** from the left dock's Library, then right-click that character's card (or press its **…**) and choose **Add voice** (on a card that already has a voice it reads **Change voice**). Choose **Clips** and click the clip's name. Attaching an existing clip is free. The card displays its waveform and player. That character's voice is also listed under **Voice → Clips → Characters** in the prompt box. Selecting a preset or description from a character card generates and attaches a take; read the cost shown in that picker before choosing.\n\n<!-- BEGIN:GENERATED voice-attachment -->\nCharacter mentions attach assigned voice samples on supported video models: Seedance 2.0, Seedance 2.5, MiniMax H3 Max, MiniMax H3. The reference rail shows each attached voice and the composed prompt names its timbre role. Removing a voice tile is saved with the Shot. Frames, sample duration, and reference capacity can prevent attachment; inspect the rail before generating.\n\nFor Inworld TTS-2, choose the character under **Voice → Clips → Characters**. Its prompt is spoken verbatim; a mention does not select the voice. Seed Audio also supports character voice mentions.\n<!-- END:GENERATED voice-attachment -->\n\n---\n\n## AUDIO IN GENERATION\n\nThis section is about audio generated **inside a video clip**. For audio as its own asset, see Generate Audio above. Where a model makes sound optional (Kling, Veo), the prompt bar's **Sound on** / **Silent** setting turns it on or off; sound costs more, and the price is on the setting's row.\n\n**Veo 3.1 native audio:** Generates audio WITH video. Prompt syntax: `\"Hello!\"` for dialogue, `SFX: [sound]` for effects, `Ambient noise: [description]` for ambience. Max 10s dialogue. Add `(no subtitles)` to suppress text overlays.\n\n**Kling V3.0 Omni dialogue:** Multi-character dialogue with distinct voices. Languages: EN, ZH, JA, KO, ES. `Background music: [description]` for music. Max 10s dialogue.\n\n**Kling V3.0 sound:** Synchronized sound effects generated with video.\n\n⚠️ **This prompt syntax is video-only.** `SFX:`, `Ambient noise:` and `Background music:` are Kling/Veo conventions — the audio models above have no parser for them and will treat them as words in the scene.\n\n---\n\n## PROMPT SYSTEM\n\n### Unified Create Surface (roles + model-on-button)\nThe old mode tabs (text-to-video / frames-to-video / ingredients / create-image) are ONE \"Create\" surface. An **Image | Video | Audio** switch in the prompt box's top-right corner switches your output lane — it remembers and restores the last model you used in each lane (pick Seedance once and the Video lane stays Seedance until you change it). All three are named; when the box is narrowed below its default width they are icons. Every attachment in the reference tray has a ROLE badge you tap to change — Reference / First frame / Last frame / Subject / Look; you say what each attachment is, nothing is inferred. A plain Reference shows its badge when you point at the tile, so the roles that differ stand out. With nothing attached the tray is one short row: the dashed **+** (and on the Video lane **First frame**: a picture put there starts the clip) beside the lane switch. Attached references sit in one row; **+N** at its end shows the rest, and pressing it again folds them. A tile past the model's limit is greyed and says **Not sent**; point at it for why. Right-click a tile for **Role** (the badge's choices, with what each does), **Go to picture in Media** and **Remove from prompt** (what its × does). A tile named by an @mention or #look in the prompt has no ×; its **Remove from prompt** is greyed and says to delete the word in the prompt. The **+** opens **Add a reference** (and First frame opens **Choose the first frame**): the project's pictures, with search and Upload. Editing a clip is on its right-click (**Edit with AI**). **Animate**, on an image's right-click menu and at the bottom of the image viewer, does it in one step: the image becomes the First frame and the prompt box moves to your video model. Your model choice sticks across generations and workflow actions (\"use as first frame\" keeps your chosen video model). Attaching a video via \"Edit with AI\" flips the surface into Edit Video mode. Lip sync and Motion control are rows in the model picker (**Kling Lip Sync**, **Kling Motion Control**).\n\n### Floating Prompt Box — the bar holds everything\nPersistent across all pages. It floats over the page and the work passes behind it as you scroll; every page scrolls far enough for its last row to clear it, and a jump to a shot or picture lands above it. **There is no settings panel and no gear button.** Everything sits on one bottom bar, left to right:\n\n1. **Media toggle** — Image / Video / Audio.\n2. **Model picker** — a searchable menu plus a detached submenu. The main menu lists model families with a vendor glyph tile each; picking one opens that family's models beside it, every row carrying capability chips (resolution, clip length, audio, references) and its per-unit rate; a Face row says when to use it (\"use when a face is in your references\"). Type to search across every model. The submenu is anchored to the row you opened it from, so it never travels. The trigger on the bar shows the model name and nothing else — no chevron, no resolution appended. Everything listed is a real model or endpoint.\n3. **Parameter controls** — one per setting the chosen model actually has (resolution, aspect, duration, length, quality, count, grid, face-in-reference, sound, loop, and so on). The trigger shows the current value; the explanation lives *inside* the menu as a subtitle under each option, along with what that option costs. A setting with only one possible value still shows, muted and non-interactive, so the row never changes shape. A resolution the provider makes by upscaling a smaller render says so under its option (MiniMax H3's 2K and 4K are upscaled from 768p): it stays selectable, but it costs more and usually looks worse, so Slates does not recommend it.\n4. **Sliders for ranges.** A setting with a long list of steps (video duration, audio length) opens a ruler instead of a many-row menu. The handle moves between the values the model actually declares, so it cannot land on one the model will not accept, and the price for the selected value is shown on the ruler.\n5. **`More ▾`** — if the model has more parameters than fit the current window width, the extras are collected into a generated `More` dropdown automatically. Widen the window (or close the Studio Agent panel) and they move back onto the bar.\n6. **Generate** — reads `Generate · <cost>`. **Cost only** — the model name is not repeated on the button (it's in the model picker) and there is no send arrow. A badge on the left of the button counts generations currently running. Generate is lime while the box holds something to send; on an empty box it is grey and still works: if a press cannot send (a model that can't take what is attached, no voice picked, not signed in), one line just above the button says why. A press with nothing to send puts the cursor in the prompt and says what is missing. With a Media selection, the band's Add to board or Add to timeline is lime while Generate is not. The same line notes what changed by itself, such as references a model switch removed.\n\nFor text-to-speech, the character counter is always visible because text length determines the price. On other surfaces it appears near the right of the bar after roughly three quarters of the model's prompt limit. It turns red over the limit.\n\n**Collapsing:** the chevron at the top-right of the box collapses it to a single arrow — nothing else. Click the arrow to bring it back.\n\nBelow the bar the queue shows pending/active generations with cost and progress.\n\n### What gets sent (prompt transparency)\nBeside Generate is an eye, **See what gets sent**, always there, so the box never moves while you type. It is brighter when a mention matched nothing and red when a citation points at nothing attached. Press it and you see the exact text that will be transmitted, produced by the same code that builds the request — so it can never disagree with what is actually sent. It shows:\n\n- **Reference numbering** — `@sarah` becomes `Sarah (image 1)` so the model knows which attached image is which.\n- **Fallback role lines** for character, location or look images you attached but did not mention. A literal image number or a resolved mention takes priority; pinned images get no generic reference preamble.\n- **Inline look references** — “lit and graded like #noir” becomes “lit and graded like image 2” when that look occupies the second image slot. A fallback look clause is added only for a look attachment you did not mention.\n- **The Seed Audio duration append** — the `… N seconds` Slates adds to the end of the prompt, which is also what you are billed for.\n- **Grid wrapping** when 2×2 or 3×3 is on.\n\nWhen the composed prompt is exactly what you typed, the eye is still there and shows your words unchanged.\n\n**Unresolved `#tags` and `@mentions` stay exactly as typed.** **See what gets sent** notes a token that has no attached reference; it does not delete it or change the prose. Hex colour values remain ordinary prompt text.\n\n**Nothing is ever added that you cannot read here.** No setting in the app injects prompt text; a setting changes *how* a request is made, never *what* you asked for.\n\n### Prompting guide (on the web)\nPer-model prompting guidance lives at <https://slates.video/docs/prompting>, linked from the bottom of Settings. It covers every model Slates offers — Video, Image, Audio — with what that model reads, what it ignores, and its gotchas, all on one page so you can compare them. Markdown copy for pasting into an LLM: <https://slates.video/docs/prompting.md>.\n\nIt is generated from the same source the Slates CLI, the MCP server and Studio Agent are built on, so the guide and the app cannot disagree. It is documentation rather than a control, which is why it is a page on the web and not a panel in the app: it has room to be read, a URL you can send someone, and it is always current rather than frozen at the version you installed.\n\n### @Mentions\nType `@` → auto-complete shows the project's characters, locations, products and props. Type `#` → shows looks. Selecting inserts the reference image(s). At send time a mention is rewritten to a numbered image reference (`@sarah` → `Sarah (image 1)`) so the model can tell your attachments apart — you can read the result in \"See what gets sent\". Nothing else about your wording is rewritten. Prompting works the same as any other AI tool; no special syntax beyond @mentions.\n\n### Writing the shot list with Studio Agent\nThere is no \"Enhance\" button and no \"Generate prompts\" button. **Studio Agent does this work**, because it reads the same shot list you do — every scene, every beat in order, with its references, its model and its price — and because you can steer it:\n\n> \"Write the beats for my current board.\"\n> \"Now redo scene 3 handheld, and match its energy to scene 2.\"\n> \"SHOT-A4 runs long — split it after 'and then'.\"\n\nEvery field it writes is editable by hand, in place, in the board's Script tab. Open Studio Agent with **Ctrl+.**\n\n### Debug Panel (advanced)\nA developer panel showing the exact request body, with the ability to override the composed prompt before sending. **There is no toggle button for it on the prompt bar in any build** — open it with **Ctrl+Shift+D**. For ordinary use, \"See what gets sent\" above is the supported way to inspect a prompt.\n\n---\n\n## PROJECTS\n\n### Structure\nEach project = folder on your disk. Subdirectories: images/, videos/, audio/, references/, exports/. Location configurable in **Settings → Storage** (**Change folder…**): new projects are saved there, existing ones stay where they are until you move them from the same section.\n\n### Assets\nEvery generated or imported file is an asset (image, video, audio). Metadata tracked: prompt, model, settings, cost, dimensions, timestamps. Videos track source image via source_asset_id -- you can see all videos generated from any image.\n\n### Supported File Formats\n- **Images:** PNG, JPEG, WEBP, GIF. Note: HEIC/HEIF (iPhone photos) NOT supported -- convert to JPEG/PNG first.\n- **Video:** MP4, MOV, WEBM, AVI, MKV.\n- **Audio:** MP3, WAV, OGG, M4A, AAC.\n- **Clipboard paste:** Any image format the OS clipboard provides (PNG, JPEG, WEBP, GIF). Pasting works both in Media and directly into the prompt box; either way the image becomes a real Media asset in the folder you're working in (tagged \"Imported\") AND, when pasted into the prompt box, attaches as a reference. Anything generated from it links back to it as a source.\n- **Drag and drop:** Any file the browser recognizes as image/* or video/*.\n\n### Operations\nCreate/rename/delete projects; deleting one asks first, naming it and counting its files and boards. Import external files via drag-and-drop or file picker. Paste images from clipboard. **Move to project…** / **Copy to project…** (a card's right-click, under **More**, or the selection band) picks a destination or makes a new project; Escape steps back one layer at a time. A problem shows inside the dialog. A picture a Library item uses can't move alone: **Bring it too** moves the item with its pictures and says how many shots here mention it (they keep their words but stop attaching it until it comes back). Deleting pictures, clips or audio asks first and names them, because their files leave the disk. Extract still frames from videos. Relocate project to different disk/folder (all paths auto-update). Cleanup orphaned assets.\n\n### Moving and copying assets between projects\nAssets (images, clips) can be sent to another project three ways: the selection band on any Media tab, the right-click menu on any card, or by dragging cards and dropping on a project in the drop palette.\n\n- **Move** relocates the media files on disk into the destination project's folder. The asset leaves whatever Media folder it was in and is issued a fresh badge code in the destination.\n- **Copy** duplicates it — new files, new thumbnails, new badge code — and changes nothing in the source project.\n\n**Why a move can be refused:** an image another project still builds with (a character, location or look picture, or a shot on a board) cannot leave, because the item left behind would point at a file it no longer owns. When that happens the dialog lists what's blocking and offers the fix: bring the whole character, location or look across with all of its images, or copy instead. A shot on a board is only ever offered a copy — moving its picture out would empty the shot.\n\nRight-clicking a card that is part of a multi-selection acts on the whole selection (\"Move 5 to project…\"). Right-clicking a card outside the selection acts on that card alone.\n\n### Selecting cards\nDrag from empty canvas in Media or Board, including the outer padding and gaps, to select cards without highlighting page text. Click empty canvas to clear the selection. Dragging over selected cards toggles them out of the selection. Buttons, video controls and editable text keep their own gestures. On Media, **Escape** clears the selection and **Ctrl/Cmd+A** selects every card the tab shows (a text field keeps its own). The band names what is picked, one word per type (image, clip, audio clip; items for a mix), and offers **Add to board…** for pictures and **Add to timeline** for clips and audio; a mix shows both with counts. Unselected cards dim their picture only.\n\nDragging a selected Media card carries the selection of that media type. On Board, selected shots move together in their board order, with one Ctrl/Cmd+Z undo for the group. Dragging an unselected Board card selects and moves that card. With **Script follows a drag** off (the board shows a **Script fixed** chip), dropping on a shot swaps that shot's visual as before; a drop anywhere else is refused, and the board says so. The tabs remain available while a selection is active.\n\n### Pointing an AI at what you selected\nSelect cards on any Media tab (All, Images, Videos or Audio), or Shots on the board (click to tick, or drag a box around them). Then either:\n\n- **A connected agent can rearrange the window.** `slates_get_view` reports how it is laid out — the tab showing, where the timeline sits, which panels are open — and `slates_set_view` changes any part of it, including which of the navigator's sections are folded (\"put the timeline on the right\", \"show me the Script tab\"). Only what it names moves, sizes are clamped by the app, and the reply says what the app actually settled on.\n- **Just say \"these\" to Claude or the Studio Agent.** A connected agent reads your live selection with `slates_get_selection` and gets each item's code, so \"make these into videos\" needs no codes typed. With nothing ticked, \"this one\" means the image open in the viewer. The selection is read at the moment the agent acts, so change it before you send, not after.\n- **Copy codes** — the button in the selection band, or **Ctrl+C** (⌘C on Mac) while cards are selected, copies `Project \"Kaiju selfie\": IMG-A12, IMG-A14` to paste into any chat, including ones not connected to Slates. The project name is included because codes are only unique within a project — every project has an `IMG-A1`. After a copy the button reads **Copied** for a moment. Ctrl+C inside a text field, or with text highlighted, still copies the text. In a short band the rarer actions move into **More** (…) at its end, where they are the same buttons: Copy codes first, then Copy to project…, Move to project…, Compare and Export on Media; Merge, First frames and Set model on the Board. The count, the main action and × always show, and the band prints a total only when there is a price.\n\n---\n\n## THE WORKSPACE\n\nOne project is one workspace with three **tabs** at the left of the second row, in the order the work goes: **Media** (every image, clip and audio take: the visual assets), **Script** (the open board as its text: the written ones) and **Board** (the same board as shot tiles, where they come together). A project reopens on the tab and board it was last on; a project never opened before lands on Media, or on Script or Board if **Settings → General → New projects open on** says so.\n\n- **Every empty screen offers its own doors and requires none.** **New project** (Home's button beside the **Projects** heading, the dashed tile that leads the grid, or the one button on an empty Home) opens straight into the workspace with the prompt box ready and the project's name selected in the titlebar, so naming it is just typing; **Enter** keeps the name, **Escape** takes it back, and either puts the caret in the prompt box (double-click the name to rename it later; a click goes back to all projects). A project nobody names is Untitled Project, and the next one Untitled Project 2. A Home card shows the project's first picture (a clip's frame when it has none) and one line: what it holds (136 images · 72 videos, 3 shots, or Empty) and when it last changed. Right-click a project card, or press its **…**, for **Open project**, **Rename project** (also F2 on a focused card) and **Delete project**; they are also in Ctrl/Cmd+K on Home. An empty Media tab offers **Make an image**, **Make a video** or **Make audio** (switches the prompt box to that kind with the caret in it) and **Import…**; All offers **Import…**. **Import…** is also on Media's toolbar, on right-click in empty Media space (beside **Paste** and **New folder**) and in Ctrl/Cmd+K, and brings pictures, clips and audio in exactly as dragging files onto the window does. While the project has no board, the empty Board (\"No shots yet\") and the empty Script tab (\"Nothing written yet\") offer the same starts, the tab's own first: **Add a shot** (one empty Shot, filed into a new board, Board 1), **Start writing** (makes Board 1 and puts the caret in its first scene on the Script page, from either tab), **Paste a script** (the clipboard lands on the Script page as text; no Shot is made) and **Start from a template** (below; it appears once a template exists, a starter or one you exported). Only Start writing changes the tab, because the page is what it makes. Board and Script never show a list of boards: with none open they open the one worked on last, and the dock lists them all. A board with no shots shows no progress readout and no Add to timeline.\n- **The tutorial** (first launch, or **Help → Replay the tutorial**): four cards, the project, the prompt box, the three tabs and search. What a card points at works while it explains it: type your first prompt, switch tabs. Generate waits until the tour ends. A click on the dimmed page does nothing; the **×**, **Escape** or **You're set** ends it, and so does using search on the last card.\n- **Templates** carry a board, a scene or one shot between projects and machines as a `.slatestemplate` file: every shot's prompt, model, settings, reference roles and script words, plus the reference files and the Library items the shots mention. A template holds no takes. **Export as template** lives in the board name's menu, its dock row menu and a scene's **⋯** menu; Ctrl/Cmd+K and the app menu's File have **Export as template** followed by the open board's name and, while a shot is selected, Ctrl/Cmd+K has **Export as a template** for that shot. **Start from a template** (a blank project's starts, or Ctrl/Cmd+K) lists the templates you saved (and any starter set the app ships), or opens a file; with none saved it shows one line and **Open a file**, and the search field appears with the first template. Before adding it you see every **swap slot**: each Library item and each attached reference, on **Template's** by default; **Mine** points it at a picture, clip or audio already in the project, so the template's own file for that slot is left out. **Add to project** makes ordinary shots, Library items and Media assets and generates nothing: price and fire them from the titlebar readout like any other shots. A Library name already taken in the project is suffixed (Candle 2) and the imported prompts are rewritten to match. A blank project opens with the template's Library categories only. After adding, a swap is the normal tools: change the Library item's image, or the reference on the shot. Agents: `slates_get_template`, `slates_export_template`, `slates_import_template`. A board template also carries its document formatting, sections and every saved version (template format 2; older format 1 files still open, and an older Slates refuses a format 2 file in words). **Use selected parts** makes a board from only the chosen scenes of a board template, such as an opening or one body section; Library items those shots mention come along, and a replacement picked for a part you left out is skipped with a note.\n\n- **Left dock** (`[` or the titlebar toggle): **Boards** with the open one's scenes (`+` adds a named row you type in place and changes nothing else; click a row to open it, double-click to rename it where it is, a scene row scrolls to it, and right-clicking it opens the scene's own commands, while a board's row menu offers rename, export and delete; right-click a section's title for its **New** (New board, New Library category, New folder, Pin a reference)); the **Library**'s categories (below); **Folders** (**All media** and **No folder** are always there; click a folder to show it in Media, which also chooses it: new pictures land there, and a quiet dot on its row says so on every tab; click the dot to clear it; `+` adds a row and opens nothing, and two folders cannot share a name; double-click renames; drag cards onto a row to file them, **No folder** takes them back out); and **Pinned**, which rests on the dock's bottom edge (below). Click a section's title to fold its rows; a folded title prints how many it holds, and the fold is remembered for the project. A number on a row is what it holds (files in a folder, items in a category) and prints only above zero; a section's **+** shows when you point at the section or Tab to it. A row's fill means you are here, and nothing else. Drag its edge to resize; the width is remembered.\n- **Studio Agent panel** on the right: click its labelled edge tab, or use `]` or **Ctrl+.**; the tab reads \"approve plan\" with a badge while a plan waits for you. The header names the chat and the project it works in (\"No project open\" on Home). A chat exists once you send its first message: **+** opens a blank one, and **Past chats** (the clock, or the chat's name) lists them with the day each was last used. Rename and Delete show under the pointer; right-click a chat for **Rename** and **Delete chat**. Deleting one asks first; delete the open one and the most recent other chat opens (or a blank one). An empty chat offers one line and two examples for the tab you are on. When a run stops or runs out of credits, the conversation ends with a line saying why: not signed in (**Sign in**), Slates could not be reached (**Retry**), it stopped unexpectedly (**Retry**), or out of credits (**Buy credits**). A plan card offers **Approve & run**, **Change…** and **Cancel**; typing in the composer while a plan waits sends that as the change.\n- **The timeline** is the built-in editor. `;` opens it as a band under the board or grid — one toolbar (the transport, timecode, the clip tools Select, Split and Snap to clips, the markers, then zoom and Export) over the lanes with the program monitor beside it — and `Shift+;` (or the button by the zoom controls) takes it to full height, monitor over the lanes. On every tab it rests as one clickable line, \"Timeline\", with the clip count and length (\"Timeline · 15 clips · 1:05\") once the timeline holds a clip. The editor's keys act while the timeline has focus, and everywhere at full height. The full-height timeline keeps the tabs; choosing a tab shows it, returning the timeline to its docked size, or to its resting line when the window is too small to split. The close button returns focus to the resting edge. The resting line also carries one glyph right after its words that goes straight to the full-height timeline, so you never have to open the dock first, and the empty strip beside it opens the timeline. **Arrange** on the timeline's toolbar shows where it sits (Bottom, Left, Right, Full) and offers Timeline along the bottom / on the left / on the right / full height (also Ctrl/Cmd+K); a column holds the monitor over the lanes. Drag the edge that faces the board or grid to resize it; the edge, the height and the width are remembered. A side column stops at 420px and a band at 320px. **The timeline splits the workspace only when both halves stay usable**: the board, grid or script keeps 912px of width (the prompt box at full size) beside a column, or 640px of height above a band. Below that, which includes the default 1400×900 window and most laptop screens, the timeline fills the workspace, Arrange reads Full, and each placement that will not fit says why under its row; the Full row is never refused.\n- `'` shows or hides the prompt box. None of these keys fire inside a text field or under a modal, menu or viewer.\n- **View** sits right after the tabs on Board and Media. On **Board** it reads **View: Film**, **View: Scenes** or **View: Shot**: named stops on one continuous card size, with a slider under them; cards fill each row, as many as fit at the size, each at most half again its size; **Ctrl/Cmd + scroll** over the cards does the same and keeps the card under the pointer in place. Film is posters only; Scenes is the working card, which gains the shot's line and its reference thumbnails once cards are wide enough; Shot opens each card in place with its references, prompt and takes. On **Media** it holds the card size slider (it starts at three cards across; 1.6.0 moved profiles still on the old two-card default there once), which also sizes the Library's cards. **Script** has no View button: **Ctrl/Cmd + scroll** over the page sizes the text, as do **Larger text**, **Smaller text** and **Default text size** in Ctrl/Cmd+K. The three sizes are remembered separately. The Board's **Filter**, right after View, chooses which shots show (**All shots**, **With a linked clip**, **Without a linked clip**) and whether each shot's linked clips show under it; a filter that hides shots prints a chip above the board saying how many it shows (**With a linked clip · showing 8 of 9**), with its own ×; the progress readouts still count every shot. At rest a tile shows its place in the story (1A), one mark for how far along it is, and its title (its name, else its words, else its prompt, at every level); point at the mark for its takes, clips from its picture, whether it is on the timeline and its price. The tile the prompt box is editing is the brightest.\n- In a narrow window the Board's row drops Filter's word, then View's level (**View**), then the chip's 'showing', then Add to timeline's words (its glyph stays).\n- **Go to or do** in the titlebar, or **Ctrl/Cmd+K** (in a project and on Home), opens on **Do**: a few commands for where you are, the selected card's own first. Then **Go to**: the scenes, shots, boards, Library items and folders here (projects on Home), three of each with an **N more** row. A line at the top names what the commands act on (**Acting on IMG-A12**, **3 images**, a shot and its scene). Type to search one list: a command by its name, a place by its name, its code or its words; an exact code comes first. A command that can't run here shows dimmed with the reason, and the palette opens on the first row that can run. Arrow keys choose, Enter runs, Escape closes. Settings' rows are here too: **Sign out**, **Save all projects to a file…**, **Load projects from a file…**, **Change projects folder…**, **Show usage**.\n- **A jump never changes the tab.** From the palette a shot comes into view where you are: its card on Board, its words on Script, its newest take on Media. On Media nothing is bound and the unsent draft stays as it was.\n- **The Board without a mouse:** arrow keys walk the shots in order (Shift adds to the batch selection), Enter steps the detail in and Backspace steps out, Space plays the animatic from the shot, Escape clears the batch selection and then unbinds the shot.\n- **Media tabs: All · Images · Videos · Audio.** **Filter** holds where media came from (Generated, Imported), your Library categories and, on Images, **Only with linked videos**; the number beside it counts the rows narrowing the grid. Media remembers, per project: the folder, tab, search, filter toggles, scroll position, folded rounds and compare set. Favorites persist across reopening the project. While a project holds nothing, **Filter**, search and the heart rest greyed and still work. A card shows its caption and model at rest (under a round header, only its picture); **Reuse** and the heart show on hover, everything else is on right-click. A file that came in reads **Imported**, and its **Reuse** and **Copy prompt** are greyed with the reason, unless it is a re-imported Slates file whose name gave back its prompt. While anything narrows the grid (a folder, a search, the heart, a Filter row, a hidden category), one line under the toolbar names each with an **×** and says how many show (**11 of 69**); the compare set is there too (**Compare 2** opens it, **×** empties it).\n- In a small window Media's row folds rather than cutting anything off: the search becomes a magnifier (it opens when you click it), Filter keeps its funnel and its count, the heart and **Group by generation** move to the foot of **Filter**'s menu (the line under the row still names the heart while it is on), Import keeps its glyph, and the type tabs keep only the open one's word. Point at a control whose word has gone for its name.\n- Right-click a picture, clip or audio card (or a selection) for one menu in one order: what you do with it (**Add to prompt**, **Animate**, **Edit with AI**, **Add as reference**, **Use as voice**, **Add to board…**, **Add to timeline**), **Reuse prompt**, **Save as shot**, **Move to folder ›**, **More ›** (Save to Library…, Generate a Library sheet…, Pin to dock, Trim or split…, Link to image…, Add to compare, Go to source, Copy image, Copy prompt, Copy code, Show in File Explorer, Export original file…, Move to project…, Copy to project…) and **Delete**. Inside a selection the rows count what they act on (**Add 3 to prompt**) and one-picture rows leave. The same commands are in Ctrl/Cmd+K for the selected cards.\n- **Rounds.** The outputs of one press of Generate sit under a round header: model, count, prompt, its reference thumbnails, `From IMG-…` when the recipe was reused from a card, and **Reuse**. **Group by generation** is the layers button right after the type tabs, on by default and pressed while on (also in Ctrl/Cmd+K). Takes made before rounds were recorded, and images saved from an external generator (the ChatGPT surface), are grouped by time, and the count's tooltip says so. Under a round header the cards are pictures only.\n- **Playing a clip.** Click a clip to play it on its card. Every clip plays in one player: Play/Pause, the time, a scrub, mute and fullscreen along its bottom edge, which steps aside while it plays and the pointer rests. Once you have clicked it, Space plays and pauses and ←/→ step a frame (Shift: ten). Fullscreen (the bar's right-end button, or a double click) fills the window without restarting the clip: the wheel zooms, a right-click zooms 2×, a middle-drag pans, Escape leaves.\n- **Compare.** Up to four items side by side, across rounds and types — from a card's menu (**More › Add to compare**), the selection band or **Compare N** on the line under Media's toolbar. The panes are laid out by their pictures' shapes (portraits stand in one row, landscapes sit two by two, and two portraits keep their full height beside a landscape), an audio pane is as tall as its player, each with its code, model, heart and remove; a prompt every item shares is printed once above them. Right-click a pane for **Open**, **Reuse prompt** (Compare stays open and says what the prompt box now holds, with **Restore draft**), **Add to prompt**, **Export original file…**, **Go to image in Media** (a clip or audio clip reads \"Go to clip in Media\" or \"Go to audio clip in Media\") and **Remove from compare**. **Clear** empties the set and leaves Compare open; Escape or **Back to Media** returns. With four in the set, a card's **Add to compare** is greyed and says so; outside two to four, the band's **Compare** is greyed with the reason on hover. An image pane opens in the viewer; a clip pane plays in place, in the same player.\n- **Export.** Copies the originals by code: one file through a save dialog, several through a folder picker. Never overwrites (`-2`).\n- **Unsent draft.** The prompt box's unbound text and references survive leaving the project and restarting. Binding a shot keeps the draft aside and brings it back on unbind. Generate empties it for the next prompt. If that generation fails, the prompt comes back to the box when the box is still empty; otherwise the failure notice offers **Restore prompt**, and the words it replaces go to **Restore draft**.\n- **Jumps** (Go to … in Media, `From IMG-…`, Go to a board) keep the view you had. If the view hides the target, only the hiding part changes — its folder opens, its round unfolds, the search clears, a filter tag is added — and a toast says which. A type tab that cannot show the target switches to the target's own tab, and the toast names both.\n- A dialog's title and buttons stay on screen in a short window; the middle scrolls, with a fade above the buttons while more is below.\n\n**Pinned references:** the **Pinned** section on the dock's bottom edge. Its **pin** button opens the image picker (pick several at once); each pin is a row with its picture and caption (point at it for its code). Click a row to attach that image to the prompt — while it is attached the row prints the number the prompt's reference strip gives it (First / Last for a frame) — and right-click it for **Add to prompt**, **Copy code** and **Unpin** (the image stays in Media). Also **Pin a reference** in the command palette. Pinning alone does not attach an image to generation.\n\n## SHOTS — THE BOARD IS THE SHOT LIST\n\nA **Shot** is the prompt bar, saved: the prompt, every reference with the job it carries, the model, every setting — and now the beat itself: who speaks, what they say, how it is said, what happens, the prop, the framing and the camera. It lives in the **board**, which is the one place Shots are listed. It is never required: the prompt bar works exactly as it always has for anyone who never touches one.\n\n### Why it exists\nA generation's full recipe was already stored, but only once you had paid for it. A Shot can be written **before anything is generated**, so a whole piece can be planned, read, timed, priced and corrected while it is still free. That is the point of the thing: look at the entire ad or short film — every cheap asset lined up in the actual flow — before the videos exist.\n\n### What a Shot holds\nRaw prompt (@mentions intact); the model; aspect ratio / duration / resolution / negative prompt / sound and the rest of the bar's settings; every attachment with its ROLE (plain reference, subject, look, reference video, reference audio, first frame, last frame); and the script layer — `speaker`, `line`, `delivery`, `action`, `prop`, `shotSize`, `camera`, and a `continues` flag for one sentence running across two cuts. Library items (characters, locations, looks, products and props) are stored as the item, not a copied picture, so updating a character updates every Shot that mentions it.\n\n**The scene script owns the words; a Shot line mirrors its range.** The resolved prompt uses the authored prompt when present and the script line when it is empty. The Generate panel shows the composed prompt that will be sent. Delivery notes remain separate; put any supported performance cues into the spoken text itself.\n\n### Every Shot has an address\n`SHOT-A1`, `SHOT-A2` … per project, never reused — the same idea as the `IMG-A12` badge on a Media card. It is the handle for talking to Claude. On screen a shot wears its **place in the story** instead: **1A** is scene 1, first shot, the same mark on a Board tile, a Script margin picture and the prompt box's tab. Its code shows when you point at it, in **Copy code** on its right-click menu, in **Copy codes** and Ctrl+C on a selection, and to any connected agent. Give the code to ChatGPT via Codex, Claude or Cursor and you are both pointing at the same row. It is for **this session**, not for retrieval later: there is no shot search and no shot library, because a Shot is workspace state — alive while you build the piece, worthless once it ships.\n\n### Making one\n- **Save as shot** on any generated image, clip or audio clip's right-click menu restores that generation and keeps it — and that generation becomes the Shot's first take, so the row opens showing the result you kept it for. **Reuse prompt** on those same menus does the restore WITHOUT saving anything.\n- Connected agents such as ChatGPT via Codex, Claude, and Cursor can write Shots directly (`slates_create_shot`), including for shots whose image does not exist yet — and can re-chop them with `slates_split_shot` / `slates_merge_shots`.\n- **Add to board…** (an image's right-click menu, or several selected images) opens a two-step picker with the picture being added in its header (the first of several, with a +N). A board row opens it; a scene row adds and closes. The dashed **New board with this image** and **New scene with this image** rows make the board or scene and add in one click. Scene counts are shots.\n- **It files itself.** A saved Shot lands in the scene you have open, else the last scene of the board you were most recently working in; if the project has no board, one appears as Board 1. Nothing you save is ever somewhere you have to go and find.\n\n### There is no save button\nSelecting a Shot row **binds** the prompt bar to it. Edits write straight back to that row. The tab above the prompt box says what it holds: **Editing 1A · name · model** (point at the tab for the code) while a shot is bound (a Board tile click binds it and brings the tile up above the prompt box if the box covered it; the tab names what came with it), or **New draft · saves to All media** (or the open folder). Its **×** stops editing and restores the unsent draft, keeping every shot edit. **Clear**, on the tab, clears only the draft; **Restore draft** there shows while the box is empty, or right after the Clear, Reuse prompt or Restore prompt that replaced the words, until they change. A bound shot offers **Restore previous setup** on the tab and in Ctrl/Cmd+K. The generations underneath a row keep the recorded recipes; the row itself is the working copy. Continue checkpoints it before restoring a take, with an explicit way back. Generate while a shot is bound makes a take of that shot, and the shot stays in the bar. Picking a model that takes fewer references keeps all of a bound shot's references; the ones past its limit are greyed on the rail and not sent. On the unsent draft the extras are removed, and a notice says how many. Restore previous setup swaps the recipe only; the shot's words stay.\n\n### Two ways to look at it\nA board has two tabs and two jobs.\n\n- **Board** — arrange. One picture per Shot, dragged into the order you want. Drag one and the whole beat moves with it: the line, the references, the model, the settings, the takes. There is nothing else to drag, so there is never a question of what followed what.\n- **Script** — write. One continuous page: the script, the references beside the words that mention them, the prompts underneath. This is where you read the piece before paying for it.\n\nScript is one rich document in a single reading column: the board's title, then paragraphs you type anywhere. **Bold** and *italic* marks, document headings and subheadings, and non-spoken directions are formatting: they are never spoken, never sent to a model, and a heading does not create a scene, a shot or a generation. A production scene starts only where you choose **Start a new scene here** (and **Join with previous scene** undoes that). The page stays one readable script; shot machinery is not rendered under every paragraph. The Script toolbar, beside the tabs, switches how much the page shows: **Words** is the words alone (the default, with nothing marking which words are shots); **Words + shots** puts each shot's picture in the page's right margin, level with its words (a dashed slot when it has none yet), each wearing its place in the story (**1A**; point at it for the name and code), and underlines the words each shot owns. Right-click a picture for the shot's own menu. Click a picture and the prompt box starts editing that shot, with its details in a panel on the right of the page (where the window leaves too little room, it slides over the page's right side instead of narrowing it); putting the cursor in a sentence only moves the cursor and never changes the prompt box. The panel holds the shot's picture and the references it sends (a first or last frame says so on the picture; one past the model's limit is grey, with the reason on hover), its takes, and any detail it has: what happens, speaker, how it's said, framing, camera, prop, name, or that its words run on from the shot before. **Add detail** offers the rest, and typing saves. Its prompt and model are edited in the prompt box, which is bound to it. Right-click a take there for **Reuse prompt**, **Continue from this**, **Use as the tile picture**, **New shot from take** (a new shot right after, holding the take and its recipe), **Find takes with matching inputs** and more; drag a take onto another shot's margin picture to move it to that shot. The panel's header holds **Duplicate**, **Delete** and close (Esc); **Restore previous setup** (after Continue) is on the prompt box's tab. When the words change after you wrote your own prompt for them, the panel says so and offers **Use the new words** (Ctrl+Z brings your prompt back). **Show shot details** in Ctrl/Cmd+K opens the details of the shot the cursor is in, and **Words + shots** switches that mode. Agents read and set Words + shots with `slates_get_view` / `slates_set_view` (`script.details`). The prompt box hides from its own Hide button (or `'`, or Ctrl/Cmd+K → Prompt box) and never hides on its own. Text size is **Ctrl/Cmd + scroll** over the page, or **Larger text**, **Smaller text** and **Default text size** in Ctrl/Cmd+K.\n\nWrite or paste first; it makes text, not generations or mandatory shots. Enter starts a new paragraph and Shift+Enter a line break. Selecting words shows nothing extra. Right-click the selection for **Make shot** (or **Split**, **Merge** or **Text for** when the selection calls for it), **Bold**, **Italic**, **Save as section** and **Ask the agent about it**; right-click with nothing selected, or the **⋯** in the title row, opens the page's structure: **Make script variation**, **Show shot details**, **Insert heading**, **Insert subheading**, **Insert note**, **Start a new scene here**, **Join with previous scene**, and under **More** **Move paragraph up/down**, **Undo** and **Redo** (the selection's rows are on the selection's menu, and every one is in Ctrl/Cmd+K). **Undo** puts back words, sections and shot ranges; a prompt, model or reference set since in the prompt box or by the agent stays. A drag that starts in the margin or between lines still selects the words. While any paragraph has no shot, the title row shows **Break into N shots**, which cuts every unshot paragraph into a shot (also **Break the script into shots** in Ctrl/Cmd+K). It sits in the row, so typing never moves the words. **Saved** shows there for a moment after each save. A paragraph with no speaker is sent to the model as written; set the shot's **Name** (speaker) or a delivery note to have it sent as spoken dialogue. **Move paragraph up** and **Move paragraph down** carry each shot's words and saved sections with the paragraph; a move that would pull a shot spanning several paragraphs apart is refused. The board menu's **Paste script** still starts a production scene at each `SCENE`, `INT.`, `EXT.` or `#` line. Shots without words are listed under the page as picture tiles named by the shot (or its place, like 1A), under a line reading \"N shots without words\": open while the page has no words, folded otherwise, absent at zero. Each tile opens the shot's details panel. To give one words, select them on the page, in either order: right-click for **Text for 1A**, or press **Use the selected words** in its panel. With **Script follows a drag** on, Board moves carry their words; card line edits write through the same scene text.\n\nEvery save carries the revision it was made against. If the agent, another window or a card changed the document first, the write is refused, your unsaved words are kept as a retained local draft, and the page offers to reload. Ctrl/Cmd+Z and Ctrl/Cmd+Shift+Z undo and redo whole document actions, including version switches and accepted suggestions.\n\n### Sections, versions and variations\nSelect any passage (a line, several paragraphs, even text across production scenes), right-click **Save as section**, type a name and press Enter. A section has a free name and optional free tags; Hook, Proof or CTA are only examples. Sections can nest. Its label sits quietly beside the passage; click it for the section's **versions**, each a saved rewrite of its words, with the one on the page highlighted. Click a version to put its words on the page; double-click it (or press F2) to rename it, and double-click the section's name to rename the section. **Save as new version** names the words now on the page as a new version and shows it; the version that was showing keeps what it last saved. **More** holds **Rename section**, **Tags**, **Insert a copy** (its words as ordinary editable text at the end of the scene), **Update N copies** (when copies elsewhere are behind; a copy you edited stays exactly as it is) and **Remove section** (its words stay on the page). Edits on the page always belong to the version showing: switching, **Remove section**, **Insert a copy** and **Update N copies** save them into it first, so nothing is ever unsaved. Switching then restores the chosen version's words, formatting and shot bindings, and never generates anything; Ctrl/Cmd+Z puts the version back.\n\n**Make script variation** builds a separate board, named for the versions it picks. Each section with more than one version is a row: pick a version, **As on the page**, or **Every version** to make one board per version (the button then reads **Create N variations**; every other passage stays fixed). **Rearrange passages** turns the sections into passages you can move up, repeat or leave out; only the listed passages appear. **Swap references** shows the Library items the shots mention and the pictures they attach: pick a replacement from an item's list or from the pictures (a replacement keeps the original voice unless you pick **Use (name)'s voice**). The line under **Create variation** follows your choices: the shot count, how many can reuse a finished take with matching inputs, how many cannot be sent yet, and what generating them would cost. Creating spends no credits. One variation opens when it is made; while a set is being made the button reads **Stop**, and making the same set again resumes without duplicating a board. A variation's shots are its own copies, so editing one never changes another.\n\nWhen a shot's words change after it was generated, its takes stay and are marked as made from an earlier version; nothing regenerates by itself. A shot's prompt either follows its words (composed by the rule above) or is your own: typing a prompt in the box while the shot is bound makes it your own, kept byte for byte, and clearing it lets the words drive again. When the words change after you wrote your own, the shot's panel notes it and **Use the new words** lets the words drive again. **Find takes with matching inputs** (right-click a take in the panel) shows finished takes from elsewhere in the project whose exact request and inputs match at the end of the takes row; press one to add it to this shot's takes without regenerating. It is greyed, with the reason, when none match.\n\n### Agent suggestions\n**Ask the agent about it** (right-click on selected words) opens the Studio Agent on a chat for that script (named for it; a second ask continues it) with the passage quoted above the composer. The composer starts on one line asking for suggestions rather than edits, which you can change before sending; the quote goes with the message, including changes sent while a plan is waiting. Suggestions quote the exact words they would replace and appear as \"N suggestions\" in the title row. Click a suggestion to accept it as a single undoable edit, or press its × to dismiss it; each row shows the new words with what they replace and the agent's note under them. A suggestion follows edits made elsewhere in the document, but once its own words change, its row is greyed and says why; its × still clears it. Connected agents read and create suggestions with `slates_get_script_suggestions` and `slates_update_script_suggestions`.\n\nDelivery is an optional performance note, not a required label for every line. TTS sends the authored prompt, or the dialogue when the prompt is empty, verbatim; separate Delivery notes are not added. For speech cues, use the selected TTS model's prompting guide and place supported tags in that spoken text. Script view does not strip inline speech cues from your words.\n\n### The header tells you what you are about to make\n`5 generations · 7 cuts · 54s · 84 credits`, and beneath it a variety strip like `6/7 wide · 5 push · 3 cuts in the loft`.\n\n**Two counts, because they measure different things.** Rhythm is counted in **cuts**; money is counted in **generations**. A clip made with **Cuts** is several cuts inside one paid call, so mixing them would be wrong. A cut with no model chosen has no duration and shows as `—` rather than `0s` — a runtime that invented seconds would be a lie about the one number this view exists to give.\n\n### Splitting and merging — the chop\nUse the Script selection action or the shot operations to split and merge. Splitting preserves the text and gives each shot its range; merging leaves one range across the combined words. Settings and references follow the existing shot operations, and the runtime and price update from those recipes.\n\nSplit is also the move behind a voiceover that keeps talking while the picture hard-cuts to a new world: split at a word boundary and both rows carry one sentence, each with its own visuals.\n\n**The words run on from the shot before** (in a shot's **Add detail**) is a planning note that the sentence spans a cut. It does not merge shots, join generated audio, or change generation settings. Set, it shows as **Runs on** in the panel with an × to remove it; neither moves the script. Selecting words across two shots and choosing **Merge 2 shots** (right-click) is what actually combines them. Scene headings and text belong to the continuous page, independently of machinery filters.\n\n### Variety, counted and never judged\nSlates counts what is in front of it — shot sizes, camera moves, cast, locations, durations, and any of them repeating three or more times in a row — and shows the counts. **It never changes anything, never suggests anything and never blocks.** `shotSize` and `camera` are free text: write `long-lens CU, other head blurred` if that is the shot. Anything unrecognised counts as \"other\", which is a fine answer.\n\nIf a spoken line cannot be read in its cut at any plausible pace, the row says so — and says it only when the line is genuinely impossible, never when it is merely long.\n\n### The animatic\n**Play from here** on any shot (or Space on the Board) plays the board as a rough cut from that shot: each picture held for **its own cut's duration**, with the line underneath. That tells you the rhythm of the finished piece before a single video exists. It has the clip player's bar: Play/Pause, which shot of how many, and a scrub across every shot; it stops on the last shot, and Play starts it over. The shot's code and length show on the picture while the bar is up. A clip made with **Cuts** holds one picture across its cuts, and says so. A cut with no duration is shown for 3 seconds and says so; the header leaves it out of the runtime for the same reason.\n\n### Things that stay honest rather than being hidden\n- **Deleted references.** If an asset or character a Shot points at is gone, the Shot still loads and the row says how many items were left out of what gets sent — and editing the row does not quietly drop them.\n- **A swapped model.** Changing a Shot's model never rewrites your words — video models genuinely take different prompt grammars, so the row tells you which model the prompt was written for and leaves the sentence alone. The settings line shows what will actually be sent after the swap, and that is the value it prices.\n- **Image Shots carry no role badges.** Image generation sends every reference in one undifferentiated list, so an image Shot can remember that a picture is a look reference but cannot tell the model.\n- **The thumbnail is never a question.** Slates picks it — the first frame, else the first reference, else the newest take — and you can override it from any reference in the gutter.\n\n### Finding board commands\nThe board's name beside the project name opens its menu: **Rename**, **Paste script**, **Break the script into shots**, **Script follows a drag**, **Generate…** (opens the Generate panel, which shows the price first: its **Shots** tab sets a model and its **Previews** tab makes preview pictures), **Use pictures as first frames**, **Export as template**, **Delete board**. Right-click the Board's empty space for **Add scene**, **Paste script**, **Generate…** and **Add to timeline**. On Script the page's title is the board's name, so the titlebar keeps only the board glyph, which opens the same menu without **Generate…**: the Generate panel is the Board's. The project name goes back to all projects; double-click it to rename. Right-click the name, a scene header or a shot for that object's commands; the same commands are searchable in **Go to or do** (Ctrl/Cmd+K). **Filter**, after View on the Board, holds which shots show and the linked clips; active filters remain visible as removable chips. **Collapse all scenes** is on every scene's menu and in Ctrl/Cmd+K. **Add scene** is after the last scene. The dashed tile at the end of each scene offers **From Media** and **New empty shot**. Deleting a shot asks in place, **Delete** or **Keep** (Escape keeps it), and Ctrl/Cmd+Z brings it back. Deleting a scene asks in a dialog that names it and counts its shots; it cannot be undone.\n\n### Firing several\nSelect Shots and open the **Generate** panel for them, or click a scene's readout (**N of M have their video**, or **picture** on a board of image shots) or the same readout for the whole board in the titlebar, the button with a chevron beside the board's name (the Board's alone: Script shows no readout). The titlebar adds the cost to finish only when every missing shot can be priced. In a small window the titlebar keeps the project's and the board's names whole: Help and Settings drop their words, the offer shows its glyph, the readout shortens to its count (**0/19**), and Go to or do to its magnifier and key. The panel shows a bar of how many can go now (**N of M can go**), then one line per shot: its picture, its code, its model, its length (video) and its cost. A shot can't go yet without a model, words, or (video) a length; its missing value is a dashed chip you click to fill in place (**Words** opens the shot in the prompt box), and **Set model** / **Set length** at the top fill it on every blocked shot at once (Ctrl+Z takes it back). Hover the blocked count for the reasons. **Generate N** sends only the shots that can go, with the largest single shot's price beside it. Each generation is rounded separately, as billing does. Generate approves that exact recipe fingerprint; a shot edited afterwards has to be priced again. Shots run one at a time, failures are reported per shot, and nothing retries automatically. Unknown or deleted shot ids reject the batch before it starts.\n\n**Previews** is the second tab of that same panel, and **Generate previews** in Ctrl/Cmd+K opens it for the whole board. It prices one picture for every Shot in scope that has no picture at all (no tile picture, first frame, image reference or take), on the image model you pick in the panel's dropdown. It starts on Slates' default image model, each model is used at its usual settings, every row names the model and its price, and the total changes as you switch. It works on a Shot that has no model yet, and a Shot with only script words sends those words. A shot framed at a shape that image model cannot draw (21:9, say) is drawn at the nearest one, and its row says so. The Shot's prompt is sent as written; its last frame and its video and audio references are left out, because an image request cannot carry them. No Shot is changed: the picture arrives as a take of its Shot, so it becomes the tile picture and the animatic's picture, and a video Shot still counts as missing its video.\n\n**From a picture to image-to-video.** On a video Shot, an image take's right-click menu has **Use as the first frame**. With several Shots selected on the Board, **First frames · N** does it for every chosen video Shot that has a picture and no first frame yet: the tile picture you chose, else its newest image take, else a picture that is the Shot's only reference (a picture placed on the board from Media), which moves from Reference to First frame. The same is **Use its picture as the first frame** on a shot's right-click and **Use pictures as first frames** in the board's menu and Ctrl/Cmd+K. Nothing is generated, and Ctrl+Z takes it back. Then price and fire them from the Generate panel as above.\n\n**A new Shot has a model.** Add a shot, Break the script into shots, Make shot and pictures placed from Media all start on the default video model at 8 seconds, shown on the tile; change it in the prompt box, on the panel's chip, or with **Set model** on the selection band or a shot's **Choose its model**. A Shot saved before this with no model takes the prompt box's model the first time you select it, and the tile shows it.\n\nAgents read the same data through `slates_get_board_quote` (the price the Generate panel shows) and `slates_get_board_progress`. To generate a batch, get approval for that price, then pass its `fingerprint` with `confirm: true` to `slates_generate_from_shots`. Both ops take `draft` for previews (`{}` previews on the default image model, `{ model }` picks another; pass the same value when confirming); a first frame is `firstFrameAssetId` on `slates_update_shot`. Spend comes from completed generation history and remains after a take is removed; takes, running jobs and failures are separate counts.\n\n### Explicit changes to the timeline\nClips retain their playable paths and carry nullable asset and shot links. Selecting a shot emphasizes its clips; selecting a clip emphasizes its shot. Changing a preferred take does not change an edit. A clip whose shot's favourite take (its star) is another video wears a hollow star, and the row above the lanes says \"1 clip has a different favourite take\" with **Update**, which swaps every such clip on the current board; right-click one clip for **Swap to its favourite take**. Editor Undo takes either back. The clip's start stays; source timing stays when the take is long enough. A shorter take clamps and carries a **shortened** mark. Locked tracks are excluded.\n\nBoard export lays preferred videos in board order at their cut durations, including preferred takes outside the poster's source lineage. Legacy linked videos still export; stills retain their animatic behavior. Agents use `slates_edit_cut` to inspect changes, replace, sync or build through the same desktop operations; its restore and undo-build actions reverse those edits using the returned snapshots or created IDs.\n\n### Deleting\nDeleting a board tells you how many Shots are attached before it does anything, and deletes them with it. It never moves them somewhere else without asking. A Shot that also lives in another board survives.\n\n---\n\n## BOARDS\n\n### Hierarchy\nBoard → Scenes → **Shots**. A scene is an ordered list of Shots, and a Shot is one beat: its picture, its references and their roles, its model and settings, its prompt, its words, and the generations it has produced. See **SHOTS** above — that section is the board.\n\n**Collapse all scenes / Expand all scenes**, on any scene's menu (its **⋯** or right-click) and in Ctrl/Cmd+K, closes or opens every scene in the current board, including scenes hidden by the animation filter. Individual scene headings still toggle independently. Available in Board and in Script when the Scene layer is visible; hiding that layer keeps the script readable. Newly added scenes start expanded.\n\n### What happened to frame types\nThere used to be a \"frame type\" on each picture — first / last / ingredient — plus a separate motion-prompt box. Both were a second, weaker way of saying what a Shot already says: **a reference's role lives on the Shot** (first frame, last frame, subject, style, plain reference), and the motion prompt was just the Shot's prompt under another name. Existing boards were converted automatically and nothing was lost. Pick a picture's job on the Shot's reference rail; write the motion in the Shot's prompt.\n\n### Grid Exploration\n2x2 grid: four pictures in one image, for quick iteration. 3x3 grid: nine, for deeper exploration. Select individual cells → extract to full-resolution images. Tip: 2x2 is usually sufficient and produces better quality. 3x3 can occasionally get proportions slightly wrong when upscaling cells because it faithfully reproduces the lower-resolution proportions. Grid exploration runs on Nano Banana 2 only; no other image model offers it.\n\n### Board → Video\nSelect shots → generate video for each → **Add to timeline** puts the clips on the timeline in order with source tracking maintained.\n\n### The animatic\nPlay the board as a rough cut. Each beat is held for **its own duration**, with its line underneath, so what you are watching runs at the finished piece's real length. It opens playing. Space = play/pause. ←/→ = previous/next shot. Escape or the close button = exit.\n\n### Paste a script\n**Paste script** (the board name's menu, Ctrl/Cmd+K, or a blank project's starts) puts the clipboard on the Script page as text, at the end of the active scene. A line reading `SCENE …`, `INT.`, `EXT.` or `# …` opens a new scene. No Shot is made, and cues and parentheticals stay words on the page. It is a plain paste, not a model: nothing is invented and nothing is sent anywhere. To cut shots from it, select words and choose **Make shot**, or run **Break the script into shots** from Ctrl/Cmd+K (see **Two ways to look at it** above). A connected agent such as ChatGPT via Codex, Claude, or Cursor pastes and cuts the same way.\n\n---\n\n## VIDEO EDITOR (TIMELINE)\n\n### Tracks\nMulti-track: video tracks + audio tracks stacked vertically. Clips independent per track. Add or remove tracks freely -- layer a music bed, a voiceover, and effects on separate audio tracks. Video assets go on video tracks, audio assets on audio tracks. Overlapping video clips resolve top-track-wins. A lane with nothing on it is a thin row until a clip lands, and still takes a drop. A lane's mute (speaker), lock (padlock) and fader show under the pointer, or stay while off their default. Clips are named as the Board names their shot; the file and the shot's code are the tooltip.\n\n### Audio Mixing\nEach track has a volume fader, and the timeline has an **Output level** control (the master fader) for the final mix. Both range from silent to +12 dB of boost, and both apply to preview playback AND the exported MP4 -- what you hear is what you render. Muting a video track silences its embedded audio but still shows the picture. Use the master fader to prevent clipping when stacking loud tracks.\n\n### Timeline Settings\nResolution and frame rate (24/30/60) are auto-managed: the first video clip sets both, and a later higher-resolution clip raises the canvas. All clips are conformed to the timeline frame rate on export. Changing the frame rate after clips are placed retimes them.\n\n### Clip Properties\nSource asset, in/out points (frame-level precision), duration. There are no per-clip scale, position or opacity controls: every clip is fitted inside the timeline frame. Right-click a clip for the picture it was made from (**Open source image**, **Go to image in Media**), then **Swap to its favourite take** (when its shot's favourite is another clip), **Edit with AI**, **Go to clip in Media**, **Go to** its board, **Show in File Explorer** (Finder on a Mac) and **Delete** (greyed on a locked track, with the reason).\n\n### Tools\nOn the timeline's toolbar after the transport: **Select (V)** click or drag clips · **Split (C)** split a clip at the playhead · **Snap to clips (S)** snap to the playhead and clip edges · the markers: previous, **add at the playhead (M)**, next.\n\n### Markers\nColor-coded timeline markers (6+ colors) with optional labels. Use for scene breaks, cue points, notes. Click a marker to jump to it, double-click to rename it, Alt+click to delete it; right-click it for **Rename…**, **Colour** and **Delete marker**. Agents: `slates_manage_timeline_marker` (add, change, delete). Right-click an empty stretch of a lane or the ruler for **Add marker here**, **Add audio track** and **Fit the timeline**. **Add audio track** is also in Ctrl/Cmd+K while the timeline is open.\n\n### Playback & Navigation\nSpace = play/pause. Left/Right arrows = frame-by-frame. Home/End = start/end of timeline.\n\n### Zoom\nThe mouse wheel scrolls: up and down through the lanes while some are out of view, otherwise through time; Shift+wheel or a sideways swipe always moves through time, as does the wheel over the ruler. Ctrl/Cmd+wheel and a pinch zoom around the pointer; Ctrl/Cmd+Plus/Minus and the toolbar's zoom buttons zoom too. **Fit** (beside the zoom, on a lane's right-click, and in Ctrl/Cmd+K) shows the whole timeline. The program monitor zooms only in fullscreen.\n\n### Undo/Redo\n50-step history. Ctrl+Z = undo. Ctrl+Shift+Z = redo.\n\n---\n\n## EXPORT\n\n### Video Export (FFmpeg)\n**Export**, the last button on the timeline's toolbar, holds **Export MP4**, **Export for DaVinci, Premiere or Final Cut** and **Export several cuts…**, the same words as the File menu and Ctrl/Cmd+K. **Export MP4** renders the timeline to MP4 (H.264 video, AAC audio) at the timeline's resolution and frame rate (the resolution/fps chip on the same toolbar), to the file you pick in the save dialog. There is no bitrate or quality setting. Every video track renders, top track winning where clips overlap, and each clip is fitted inside the frame with black bars where its shape differs. Muting a video track silences its audio but still renders its picture; muted audio tracks are left out. Track faders and the master fader apply, clip in/out points are respected, and gaps render as black. FFmpeg is bundled -- no separate install needed. When the file is written, a message names it with **Show in File Explorer** (Finder on a Mac); if the export fails, the message says why. While the timeline is empty the button is quiet rather than lime, and its rows are greyed with the reason under them.\n\n### Named cuts and batch export\nA project can hold several named cuts. The timeline's name button, the first button on its toolbar, lists them: pick one to open it; **New cut** and **Rename current cut** each become a name field in their own row (Enter keeps it, Escape takes it back), and every build, sync or export names its cut, so building one variation never appends to another. **Export several cuts…** opens a dialog: tick the cuts, pick MP4 or XML, and **Choose folder and export** writes each into a folder you choose (Cancel or the × closes the dialog; an export already started keeps running), beside a `slates-<id>.json` manifest that freezes each cut's timeline and records the media, script revisions, section choices and generation receipt behind every clip. Export runs in the background and never generates media: **Stop after this output** cancels between files, and **Retry unfinished** renders only what failed or was stopped, under the same filenames, without overwriting a finished file. Agents: `slates_list_timelines`, `slates_save_timeline`, `slates_export_cuts` (poll with `action: \"status\"`); `slates_edit_cut` builds with `skipPresent` when a repeated build must add only the shots a cut does not hold yet.\n\n### XML Export\n**Export → Export for DaVinci, Premiere or Final Cut** writes one Final Cut Pro 7 XML file wherever you choose in the save dialog. It carries clip references (paths to the source files), the tracks and clips with each clip's in and out points as played, and the timeline markers. Slates has no clip transforms, so none are written: reframe, zoom and fade in your editor.\n\n**Importing into DaVinci Resolve:** File → Import → Timeline, then pick the XML. From there you can color grade and export your final master.\n\n---\n\n## THE LIBRARY: CHARACTERS, LOCATIONS, PRODUCTS & LOOKS\n\nThe Library keeps saved references in categories you name. A new project has **Characters**, **Locations**, **Products**, **Props & Wardrobe** and **Looks**; in the left dock, `+` adds a category. Beside the name, say what kind of category it is: a subject in the shot (**Things** or **Characters**), a place (**Locations**) or a look (**Looks**). A leading `#` remains a shortcut for looks. Double-click renames, drag reorders, and the row menu changes the kind (**For things**, **For characters**, **For locations**, **For looks**) or deletes an empty category. A change of kind says how many shot mentions it rewrites before you apply it. Names suggest icons only; they never change what a category is. Use `@name` in prompts for a subject or a place and `#name` for a look. A row opens that category, and **New** there files the item in it. The open category shows its items under it, each a row with its picture: point at one to light where it is used, hover it to read what to type (**Type @pilot_girl in the prompt**), and its arrow puts its mention in the prompt (greyed while it is already there); click it to open its page with its picture open, in the same viewer its card opens, double-click to rename it, and its **…** menu offers Open, Put in the prompt and Rename; a number beside it counts the shots that mention it, once there is one. While a category is open the tab row reads **Library / <its name>** and no tab is lit; **Media** goes back to the grid you left.\n\n**Saving an image.** Right-click any image → **More › Save to Library…**: a category picker that remembers your last choice, and a name that is already filled in (\"Product 1\") and selected, so Enter alone saves and typing replaces it. Click the name on its card to rename it later. **Existing item** in the same dialog puts the image on an item you already have, in any category. Switching between **New item** and **Existing item** moves nothing: the toggle and Save stay put, Save says Save in both, and Escape closes the dialog. Dragging an image onto the **Library** drop zone, or pasting or dropping one while a Library category is open, opens the same dialog on that category. On an item's page, its picture tile does the same: an empty tile sets the image from Media, clicking a filled one opens it; **Replace image…** and **Remove image** are on the item's menu (right-click it, or press its **…**), and it works alike on characters, locations, products and looks. **New** sits at the top right of every category page, empty or not.\n\n**Moving an item.** Right-click an item, or press its **…** → **Move to** lists every category. A move between a subject or place category and a looks category changes what you type to mention the item (`@candle` becomes `#candle`), and a move into or out of a Locations category changes what it composes as. The menu row says so before you click, with how many shots mention the item; the move then updates those shots' prompts to match, and the confirmation offers **Undo**. A voice on an item moved into a Locations category is kept but not used there.\n\n**Renaming an item.** Click its name on its card, or choose **Rename** on its menu. Every saved shot that mentions it follows (`@sarah` becomes `@emma`), a message says how many shots changed, and **Undo** puts the name and the shots back.\n\nA category is a label: the model never sees it. What matters is what you type: `@name` for anything in a Things, Characters or Locations category (something in the shot), and `#name` for anything in a Looks category (a look applied to the whole shot). A bare name attaches nothing. Names are unique per sigil, so a name already taken comes back with a number (\"Candle 2\"). A product, prop or mascot works exactly like a character, voice included. Every category is optional; pasting an image as a reference needs none of this.\n\n### Sheet tools (any item)\nEvery item has ONE image that its mention attaches. You can assign any image, or generate one with a sheet tool (license required; the dialog states the credit cost first). Two tools exist, and every item is offered both, whatever its category: **Identity sheet** (a portrait plus front and back full-body views of one character) and **Establishing image** (one clean, empty wide view of a place). Pick one under **Sheet** in a category's **New → Generate** form, or right-click an image → **Generate a Library sheet…** to make a new item from that picture. Characters categories start on the identity sheet and Locations categories on the establishing image. There is no product-specific sheet yet: for a product or prop, assign a clean image of it instead. An item's menu has **Generate sheet…**, which makes a new item with a sheet from its picture.\n\n### Characters\nCreate a character with a name and optional notes, then assign or generate its identity image. Use `@character_name` in any prompt to attach it.\n\n**Tip:** a single well-chosen image often works better than a generated sheet, especially when the character already matches your project's style, lighting and wardrobe.\n\n**Voice.** A character can carry one voice clip, the same way it carries one identity image — a shortcut for reusing a voice, never a requirement for speaking in one. **Add voice** (on the card's menu: right-click or **…**) or **Change voice** on a card that has one opens the same voice picker the prompt box uses (a menu off the button, not a pop-up; the other cards stay on screen): a clip from the project attaches as it is; a preset or a described voice renders the character speaking a fixed audition line on Inworld TTS-2 and attaches that clip, at the credit cost the picker states first. Right-click the voice card, or open **More** on the card's menu → **Show voice in File Explorer** or **Remove voice**, which detaches it without deleting the clip. The character's voice then shows under **Clips** in the Voice lane's picker, and mentioning the character (`@name`) attaches its clip on supported audio and video models. See the generated voice-attachment guidance above for current model support; the reference rail shows what will be sent.\n\n### Locations\nCreate a location with a name and optional notes, then assign or generate its establishing image. Use `@location_name` in prompts. Describing a location in words is the default; lock one with an image only when it must match exactly across shots.\n\n### Looks\nCreate a look with a name, optional notes and one reference image. Use `#look_name` in a prompt to attach its image. Nothing attaches a look automatically: to keep one look across shots, mention it (or attach it) in each shot. Pinning its image only keeps it one click away in the **Pinned** section; a pin attaches nothing until you click it.\n\n---\n\n## SETTINGS\n\n### Generation\nEvery generation runs on Slates Credits — there are no API keys to configure. The Generate button shows the exact credit cost before each generation, and failed generations refund immediately.\n\n### Other Settings\nSettings is one window: categories on the left, the open one on the right, one size whichever is open.\n- **Account:** your email with **Sign out**; your balance with **Buy credits**; **Usage**, the estimated credits spent across all projects, by model name, for this month, the last 7 days or all time. A license shows only when it is not active.\n- **AI tools:** **Studio Agent**: **Show Studio Agent** hides or shows the in-app agent (chatting is free; what it generates uses credits); when hidden, **Show Studio Agent** in Ctrl/Cmd+K brings it back. **Use Slates from Claude, Cursor or Codex** (formerly Agent Control): Connected or Not connected, and when a tool last used Slates; **Send link** connects your AI tools to your account and credits, and Slates keeps waiting for the link with Settings closed (**Cancel** stops waiting); **Disconnect**; **Connect** writes Claude Desktop's, Claude Code's or Cursor's settings (restart the tool after); Codex, the Slates CLI and any other MCP tool each have a command to **Copy**; **Setup guide** opens slates.video/docs/connect-claude; **Connect without the email link** is for a Slates key made on the website. **ChatGPT images**: see EXTERNALLY GENERATED IMAGES.\n- **Storage:** the projects folder (**Change folder…**, **Use the default folder**); projects in another folder, each with **Move into <folder>** and then **Undo** (a move waits for the project's generations, and any file still being saved into it, to finish; if a file in the old folder is still in use, the project moves, the row says some files could not be removed from the old folder, and there is no Undo; agents: `slates_relocate_project` and `slates_undo_relocate_project`); **Move to a new computer** (**Save all projects to a file**, **Load projects from a file**; if a load did not finish, the pane says so until the file is loaded again).\n- **Generation logs:** the recent-failure count; **Copy report for the latest failure** (includes your prompt and settings; send it to hello@slates.video); the failures newest first, five then **Show older**, each with its own copy button. Help → Report a failed generation opens it.\n- **General:** **New projects open on** Media, Script or Board.\n- **API keys:** only for accounts that still use their own keys.\n- There is no default-model, default-resolution or grid-size setting: the model, its resolution and the 2×2/3×3 grid are chosen on the prompt bar, which remembers the last model you used in each lane.\n- **Prompting guide:** A link at the foot of Settings' category list to <https://slates.video/docs/prompting> — per-model prompting guidance for every model (see PROMPT SYSTEM above).\n\n---\n\n## ACCOUNT & BILLING\n\n### Login\nEmail-only, no password. Enter email → receive magic link → click to log in. First login creates account automatically. Session persists across restarts.\n\n### License\nUnlocks: the Library sheet tools (Identity sheet and Establishing image). Includes 12 months of updates (Slates Pro includes lifetime updates). Major upgrades discounted after.\n\n### Credits\n\n<!-- BEGIN:GENERATED credits -->\nCredits are what every generation is paid with. They are pay-as-you-go, they never expire, and the exact cost of a generation is shown on the Generate button before you commit.\n\n- A **Slates Standard** license ($149 one time) starts you with **1,000 credits**.\n- **Slates Pro** ($297 one time, or $97 to upgrade later) starts you with **3,000 credits**.\n\n| Pack | Credits (Standard) | Credits per dollar | Versus the smallest pack |\n|------|--------------------|--------------------|--------------------------|\n| $10 | 250 | 25.0 | standard rate |\n| $25 | 650 | 26.0 | +4% more credits |\n| $50 | 1,375 | 27.5 | +10% more credits |\n| $100 | 3,000 | 30.0 | +20% more credits |\n| $250 | 8,000 | 32.0 | +28% more credits |\n| $500 | 17,000 | 34.0 | +36% more credits |\n| $1,000 | 35,000 | 35.0 | +40% more credits |\n\nPacks up to $500 are open to everyone; the $1,000 pack is offered inside the app to licensed accounts. Slates Pro receives more credits than the Standard column above on every pack, for life.\n<!-- END:GENERATED credits -->\n\nCredits NEVER expire, there is no monthly reset, and failed generations refund immediately. You can also turn on auto-topup so your balance refills when it runs low.\n\n### Standard vs Pro\n- **Standard:** the app, every AI model, and pay-as-you-go credits that never expire, plus 12 months of updates.\n- **Slates Pro:** everything in Standard, plus our lowest credit rate on every pack, forever (buy the smallest pack and pay the largest pack's rate), **4K video generation** on every model that offers it, and lifetime updates. The more you top up, the more the better rate adds up.\n\nEvery AI model is available on both tiers. The only capability gated to Pro is generating 4K video; 4K images are open to everyone, and exporting your timeline at 4K is available on every tier.\n\n### 30-Day Guarantee\nEvery license has a 30-day money-back guarantee, no questions asked: email hello@slates.video within 30 days of purchase and get the license fee back, minus the retail value of any credits you've used (the credits bundled with your license count at their standard price). Credit packs bought on their own are non-refundable once the purchase completes, and license fees are non-refundable after 30 days. Full terms: slates.video/terms.\n\n---\n\n## KEYBOARD SHORTCUTS\n\n| Key | Action |\n|-----|--------|\n| [ | Left dock (boards, Library, folders) |\n| ] or Ctrl+. | Studio Agent panel |\n| ; | Open or close the timeline |\n| Shift+; | The timeline at full height |\n| ' | Show or hide the prompt box |\n| Ctrl/Cmd+K | Go to or do: commands for where you are, then places (also on Home) |\n| Ctrl/Cmd + scroll | Card size on Board and Media (View); text size on Script |\n| Arrow keys (Board) | Walk the shots; Shift adds to the selection |\n| Enter / Backspace (Board) | Step the detail in / out (Film · Scenes · Shot) |\n| Space (Board) | Play the animatic from the bound shot |\n| Ctrl/Cmd+A (Media) | Select every card the tab shows |\n| Space | Play/pause (the timeline, a clip you clicked, the animatic) |\n| V | Select tool |\n| C | Split tool |\n| S | Snap to clips on/off (the timeline) |\n| M | Add marker |\n| Left/Right | Frame-by-frame (the timeline, a clip you clicked; Shift: ten); a shot in the animatic |\n| Ctrl+Z | Undo |\n| Ctrl+Shift+Z | Redo |\n| Ctrl/Cmd+= or Plus, Ctrl/Cmd+Minus, Ctrl/Cmd+wheel, pinch | Zoom the timeline, while the timeline has the keys (the wheel alone scrolls it) |\n| Ctrl/Cmd+Plus, Minus, 0 | Anywhere else: zoom the whole window in, out, back to actual size (on a US keyboard, Plus is Shift+=) |\n| Delete/Backspace | Delete selected clip |\n| Escape | Close the topmost thing only, one per press: an open menu or list, then an edit in progress, then a mode, then the dialog, viewer or slideshow; on the Board with nothing open, clear the selection, then unbind; on Media, clear the selection |\n| Ctrl+Enter | Submit generation |\n| Home/End | Jump to timeline start/end |\n| B | Split every clip under the playhead (the timeline) |\n\n### The app menu\n\nOn a Mac the menu bar holds **Slates** (About, Settings, Hide, Quit), **File** (New project, All projects, Import…, Start from a template, Export MP4, Export for DaVinci, Premiere or Final Cut, Export several cuts…, and Export as template for the open board), **Edit** (Undo, Redo, Cut, Copy, Paste, Select All), **View** (the three tabs; the timeline and where it is parked; the project navigator, Studio Agent and the prompt box; Go to or do; then Actual Size, Zoom In, Zoom Out and Full Screen), **Window** (Minimize, Zoom, Close) and **Help**, whose rows are the same as the **?** button's in the titlebar. Go to or do opens Ctrl/Cmd+K, which also finds every other row that can run. A checked row is showing now, and a greyed row cannot run where you are, such as a tab outside a project or Export MP4 with an empty timeline. The Mac menu shows no shortcut beside those rows; the keys are in the table above, in Ctrl/Cmd+K and in tooltips.\n\nWindows has no menu bar: the same commands are in Ctrl+K, and the zoom keys above work. Ctrl+R and Ctrl+Shift+I do nothing in the installed app.\n\n---\n\n## EXTERNALLY GENERATED IMAGES\n\nAn agent can save an image made by its host with `slates_save_external_image`.\nIt retains the exact prompt, generator, reference images and measured dimensions\nwithout running a Slates generation or charging Slates credits. The desktop must\nadvertise `external-image-metadata`; older installations need an update.\n\nPass a local file or image data URL for a new result, or an existing imported\nimage's asset ID to annotate it in place. References must be in the same project.\nOnly name a model when the host reports it. Requested settings are recorded\nseparately from measured output properties.\n\nOrdinary drag-and-drop, paste and imports keep their existing behavior. Reuse\nprompt restores the external image's prompt and references. Check the displayed\ngeneration destination before generating again.\n\n### ChatGPT account connection\n\nTurn on the optional add-on in Settings → AI tools → ChatGPT images, then choose ChatGPT\nin the image picker to generate directly from the prompt bar. It is off by\ndefault; ordinary Slates use does not require Codex or a ChatGPT account.\nSettings checks the local Codex host and shows its connection state in place.\nIf missing, Install Codex… opens OpenAI's installation instructions; install it\nand click Check again. A signed-out host offers Connect ChatGPT in Settings;\nfinish sign-in in your browser and return. Connected means image generation is\navailable. The image picker shares this same state. An unavailable connection\nexplains what is missing while keeping the prompt and references. A ChatGPT\nbrowser login alone does not establish this local connection.\n\nThis path uses ChatGPT account limits. It never falls back to Slates credits or\nan API key. It exposes no API model, quality, size or batch settings. Describe\ndesired output properties in the prompt; saved dimensions come from the file.\nThe aspect-ratio picker offers framing requests using the shared GPT presets.\nSlates appends the request in words, visible in What gets sent before Generate.\nThis is not an exact-size guarantee. Reuse restores the original editable text,\nrequested ratio and references; the saved image keeps the exact submitted text.\nEvery image is saved into the project with the exact submitted prompt, ordered\nreference lineage, generator and any host-reported revised prompt.\nBridge generations use a temporary background conversation. Once the project\nasset is saved and its bytes verified against the original, Slates removes that\nthread's original image file. If verification or cleanup fails, the original is\nretained. Images made in ordinary Codex conversations and imported through the\nexternal-image operation are not cleaned up by this bridge.\n\nStudio Agent, MCP and CLI use the same desktop implementation through\n`slates_get_chatgpt_status`, `slates_connect_chatgpt` and\n`slates_generate_chatgpt_image`. The generation operation requires a UUID\nrequestId: reuse it after an uncertain response to inspect/retrieve the existing\nrun without starting another. Background requests can be polled with\n`slates_get_generation_status`. Never automatically regenerate after an error.\nCompleted images are retained if a later host step fails; interrupted unfinished\nruns are marked failed on restart and are not automatically resumed.\n\n## OFFLINE USAGE\n\nThe app launches and works offline for everything except AI generation and login. Specifically:\n\n**Works offline:** Opening projects, viewing all assets (images/videos), editing timeline (trim, reorder, split clips), adding markers, slideshow playback, FFmpeg export to MP4, XML export.\n\n**Requires internet:** AI generation (all models), login/signup, credit purchases, credit balance sync, license validation (only checked on first generation attempt per session, then cached), auto-updater.\n\nIf you lose internet mid-session, you can keep editing and exporting. Generation will fail until connectivity returns.\n\n---\n\n## GENERATION RECOVERY\n\nIf the app closes during a generation: on restart, Slates detects in-flight jobs, polls the AI provider, and downloads completed results automatically. If it opens offline or signed out, those generations stay recovering and are tried again while the app is open and on the next launch; only the provider saying a job failed or no longer exists ends one. Nothing is lost. Recovering generations show at 5% in the queue until status is confirmed. Works for every model.\n\n---\n\n## TROUBLESHOOTING\n\n**\"Insufficient credits\"** — Your credit balance is too low for this generation. Buy more credits in the app (packs from $10 to $500) or turn on auto-topup. The exact cost of any generation is shown on the Generate button before you commit.\n\n**\"Input was rejected by Kling\"** — Image may not meet quality requirements (character visibility, proportions, content policy). Try a different image or prompt.\n\n**\"Failed to upload image to FAL CDN\"** — Network issue during reference image upload. Check internet connection, retry.\n\n**\"Generation failed: …\"** — The notice gives the reason in one line; **Open logs** shows the full error to copy for support. An unsent prompt comes back to the box, or **Restore prompt** on the notice brings it back. Provider errors are usually temporary: retry, and if one persists, try a different model.\n\n**\"Source asset not found\" / \"Source video asset not found\" / \"Target image asset not found\"** — The image or video you're trying to use was deleted or moved. Re-import or select a different asset.\n\n**\"Invalid audio source\"** — Lip sync: either enter TTS text or upload an audio file. One is required.\n\n**\"TTS response missing audio URL\"** — Text-to-speech failed during lip sync. Retry.\n\n**Generation stuck** — Restart app. Recovery system polls providers and picks up where it left off.\n\n**API rate limit** — Too many requests (limit: 20 generations/minute). Wait 1-2 minutes, retry.\n\n**Project files missing** — Project folder was moved/deleted outside the app. Put the folder back where it was. If it sits in a previous storage location, **Settings → Storage** offers to move it into the current one.\n\n**License shows \"revoked\"** — Contact support. The Library sheet tools (identity sheets and establishing images) are unavailable until resolved.\n\n**Session expired** — Magic link session timed out. Log in again via Settings.\n\n**iPhone photos won't import** — iPhones save photos as HEIC/HEIF format, which Slates doesn't support. Convert to JPEG or PNG first (most photo apps and online converters can do this).\n\n---\n\n## PRIVACY & DATA\n\n- Generated files stay on YOUR machine. Slates servers never store your videos/images.\n- For each generation, Slates logs the prompt text, the model, the time, the credit cost and whether it succeeded, and keeps those logs for 12 months. Nobody reviews prompts in real time, and they are never used to train models.\n- File uploads go directly to the AI provider via pre-signed URLs. Slates servers never buffer your media.\n- Server stores only: email, license status, credit balance, transaction history, session tokens, and the generation logs above.\n- Stripe handles all payment data. Slates never sees your card number.\n\n---\n\n## SYSTEM REQUIREMENTS\n\n- Windows 10/11 or macOS 12+\n- Internet connection required for AI generation (not for editing/exporting)\n- Disk space for project files (AI videos are typically 5-50MB each)\n- FFmpeg bundled with app (no separate install needed)\n- No GPU required (all AI processing happens in the cloud)\n\n---\n\n## COMMON TASKS (STEP-BY-STEP)\n\n### Generate an Image\n1. Open the floating prompt box (visible on every page).\n2. Enter your prompt describing the image.\n3. Pick an image model. The picker starts on the default; WHICH MODEL TO USE says when to switch.\n4. Choose aspect ratio and resolution.\n5. Press Ctrl+Enter or click Generate.\n\n### Generate Video From an Image\n1. In the prompt box, switch the lane pill to **Video**, attach the image, and make its role badge **First frame**.\n2. Write a prompt describing the desired motion/action.\n3. Pick a video model. The picker starts on the default; WHICH MODEL TO USE says which models are strongest from a start frame.\n4. Choose duration, aspect ratio, and resolution. The Generate button shows the cost of what you chose.\n5. Click Generate.\n\n### Use a Character Reference for Consistency\n1. Create a character in your project (name + description).\n2. Either generate an identity sheet (a Library sheet tool) OR assign a single image as the character's reference.\n3. In the prompt box, type `@` and select your character from auto-complete.\n4. The reference image is attached automatically. Generate normally.\n\n### Export to DaVinci Resolve for Color Grading\n1. In the timeline (`;`), finalize your clips, markers and timing.\n2. Click **Export → Export for DaVinci, Premiere or Final Cut**.\n3. Choose where to save the XML file.\n4. In DaVinci Resolve: File → Import → Timeline. Select the XML file.\n5. The timeline loads with its clips, cuts and markers. Grade and export.\n\n### Extract a Still Frame From a Video\n1. Play any clip in Media (click it), or open it fullscreen (the bar's right-end button, or a double click).\n2. The camera chip at the clip's top-right extracts the **current frame**; ← and → step one frame first (Shift: ten) to land on the exact one. The ▾ beside it gives **First frame** or **Last frame**. The same chip is on the timeline's program monitor.\n3. The extracted image saves to Media. Use it as a start or end image for image-to-video, as a character reference, or as a picture on a board.\n\nKey workflow: extract a clip's last frame → use it as the start image for the next generation → seamless visual continuity between scenes.\n\n### Buy More Credits\n1. Open **Settings → Account → Buy credits**, or click your credits in the titlebar (it opens the credits page on slates.video).\n2. Pick a pack (packs run from $10 to $500, plus a $1,000 pack offered in the app to licensed accounts; bigger packs give more credits per dollar).\n3. Pay via Stripe. Credits are added to your balance instantly and never expire.\n4. Optional: turn on auto-topup so your balance refills automatically when it runs low.\n\n---\n\n## COMMON QUESTIONS\n\n**Q: Which model should I use for most videos?**\n<!-- BEGIN:GENERATED video-choice -->\nA: The default video model is **Seedance 2.5**. Use the routing section and model table above to choose a specialist for a specific requirement.\n<!-- END:GENERATED video-choice -->\n\n**Q: What's the best image model?**\n<!-- BEGIN:GENERATED image-choice -->\nA: The image picker defaults to **GPT Image 2.5 Sunburst**. Choose the model for its documented strengths and inspect the generated model table above for reference limits, resolutions, and prices. The quality and background controls show the options supported by the selected model.\n<!-- END:GENERATED image-choice -->\n\n**Q: Do I need to set up API keys?**\nA: No. There are no API keys in Slates — every generation runs on Slates Credits, which come with your license and never expire.\n\n**Q: How much does a generation cost?**\nA: It depends on the model, resolution, and length. The exact credit cost is always shown on the Generate button before you commit, so there are no surprises.\n\n**Q: Can I use Slates offline?**\nA: Yes for viewing projects, editing timeline, and exporting. No for AI generation -- that requires internet.\n\n**Q: Do credits expire?**\nA: No. Credits never expire.\n\n**Q: What happens if I close the app during a generation?**\nA: Nothing is lost. On restart, Slates detects in-flight jobs and downloads completed results automatically.\n\n---\n\n## FEATURES NOT IN SLATES\n\nThe following are NOT available. Do not suggest them:\n\n- Bring-your-own API keys (BYOK) — every generation runs on Slates Credits; there is no key-entry option\n- Local/on-device GPU inference (all AI runs in the cloud)\n- Built-in music generation (use external tools like Suno, import audio)\n- A voice picker for Seed Audio — you describe the voice you want in words instead. The preset voice shelf belongs to the Voice lane (Inworld TTS-2), and Kling Lip-Sync keeps its own small fixed list: six English/UK voices plus a storyteller, with a speed control\n- Automatic video editing from a script\n- A prompt \"Enhance\" button — ask Studio Agent to rewrite a prompt instead\n- A settings/gear panel on the prompt box — every parameter is a dropdown on the bar\n- Cloud project storage (all files are local)\n- Real-time collaboration / multi-user editing\n- Mobile app (desktop only: Windows and macOS)\n- HEIC/HEIF image import (convert to JPEG/PNG first)\n- Board JSON import or export. To move a board, scene or shot between projects or machines, use **Export as template** (a `.slatestemplate` file; see Templates under THE WORKSPACE)\n- Per-clip scale, position, crop or opacity on the timeline. Every clip is fitted inside the frame; reframe, zoom and fade in your editor after the XML export\n\n---\n\n## VERSION\n\n<!-- BEGIN:GENERATED version -->\nSlates Reference Version: 1.6.0\nLast Updated: 2026-09-30\n\nThis document is generated. Its source of truth is `slate/docs/slates-llm-manual.md`; its model tables and credit costs are derived from the Slates model registry and pricing tables at build time, so they cannot be typed by hand.\n\nIf the user asks about a feature not documented here, it may have been added after this version. The current copy is always at <https://slates.video/slates-reference.md>.\n<!-- END:GENERATED version -->\n\nIf this document didn't answer your question, email hello@slates.video so we can help and improve the app.\n\n</slates_reference>\n";
3
3
  //# sourceMappingURL=content.js.map