Plan every cut with stand-ins, watch the whole episode for $0, then render it once with real models. The cuts stay consistent: one frame shape, one screen direction, one look.
AI video goes wrong between the shots, not inside them. One clip is square and the next is wide, a character looks left and then right, one cut has sound and the next has none. This guide makes a short anime episode where every cut matches, because you check the whole episode for free before you pay for a single picture.
What you get
A 20-second, 7-cut episode at 1920×1080, with the lines as subtitles and no sound.
Time to read
About 8 minutes. The steps take about an hour, most of it in planning.
This is episode 1 of a small show, Lamp Oil: a young lighthouse keeper, Mira, meets the old keeper, Tomas, on the cliff path, and then lights the great lamp. Every cut follows the steps in this guide.
Lamp Oil, episode 1: 7 cuts, 19.9 seconds. Keyframes on Seedream 4.5, videos on Hailuo 2.3 Fast Pro, one camera move made by the engine at $0. Model spend: $2.17 at the prices of November 2026.
And this is the process in the studio, from a new show to the export. It runs in demo mode, so the pictures are placeholders and nothing costs money.
The steps in the Vinci studio, in demo mode ($0). 1 minute 30 seconds, no sound.
git clone https://github.com/tryvinci/vinci && cd vincipython3 -m venv .venv && . .venv/bin/activate && make install./scripts/vinci init --demo./scripts/vinci studio
Open the studio at http://127.0.0.1:4310/studio and pick Shows on the left rail. Demo mode uses practice models: every render costs $0, so you can try each step before you spend.
2
Create the show and the first character
Click New show. Give it a title, keep the medium 2D anime, and pick 16:9. Then add the first character: a name, one sentence about the look, and the whole character sheet. The sheet is the reference for every picture of that character, so use the same sheet for the whole show.
3
Paste the script
Paste the script in the next step. Each action paragraph and each line of dialogue becomes a shot, with a framing and a length. In a 2D anime show, a line gets the camerawork kuchipaku-hold (a held pose, only the mouth moves) and only its speaker in the shot. Click Create show.
4
Give every character a sheet
A speaker who is new in the script has no sheet yet, and the show stays invalid until it has one. Open the character in the Bible and add the sheet image.
5
Choose the camerawork of each shot
Open a shot from the storyboard and pick a template in the Camerawork menu. It fills the camera, the length and the words that go to the model. For a dialogue scene:
two-shot-axis on the first shot with both characters. It fixes who stands left and who stands right for the rest of the scene (the 180° line).
ots-a and ots-b for over-the-shoulder shots. They keep each character on their side.
reaction-cu for a short reaction close-up with no line.
An engine move (for example tu-to-eyes or tilt-up-hero) makes the video from the keyframe with no video model, for $0.
6
Check the staging with pills
Until a shot has a keyframe, the storyboard and the shot page show pills: one flat stand-in per character, with a white dot where they look. A character keeps one color in every shot. A single that looks off screen sits beside the centre, behind its gaze.If a shot turns the characters around, the shot page says Crosses the 180° line. Fix it before you render. For a single, write the direction into the shot’s blocking in the scene file, so the words go to the model too:
- id: e01/s01/sh050 duration: 2+00 description: "Tomas, alone, looks out to sea." camera: { framing: close_up } characters: [char/tomas] blocking: { char/tomas: "at the right of the frame, looking toward frame left" }
7
Check the timing on the e-conte sheet
Click E-conte sheet in the storyboard header. You get a PDF with 5 cuts a page: the cut number, the picture with the camera move, the action, the dialogue and the time in seconds+frames (2+12 is 2.5 seconds). With no sound, a subtitle must stay long enough to read: give each line about 2 seconds.
8
Watch the mock render
Click Mock render. You get one video of the whole episode, every cut drawn from its pills under its camera move, with no sound and each line as a subtitle. It costs $0. Watch it once: if the cuts do not flow as pills, they will not flow as paintings either. Fix the staging and the timing now.
9
Render with real models
Add your provider key under Connect, and start the studio with live spend on (VINCI_ALLOW_LIVE_SPEND=1). Every render shows its price first.Render the keyframe of one shot, approve it, then render its video. Check that shot before you render the rest: the frame shape, the faces, where each character looks. Then render the other shots one by one, keyframe first.
10
Check that the cuts match
Play the shots in order and look at three things: the same frame shape in every cut, the same screen direction in a scene, and the same light in a scene. Render again only the shot that breaks. If a take still fits after you change only text (a line, a length), click Keep v1 anyway (with that take’s name) on its stale banner: with no sound, the picture does not need to change.
11
Cut and export with no sound
Open Cut and click Use approved takes. In the export panel, keep Burn-in subtitles on, turn Sound off and click Export episode. The file has no audio stream, and each subtitle names its speaker (Mira: You kept the key?).
The mock render is the plan; the real render follows it. Each cut keeps its place, its length, its subtitle and its screen direction.
Plan with pills, pay once. The mock render and the e-conte sheet cost nothing. A change to a cut after the real render costs a keyframe and a video for that cut.
A model does not obey every word. The template words and the blocking steer the model, but they do not bind it. Render one shot, check it, then render the next. In the example, one reaction shot came back with the light on the wrong side, and a new render of that shot fixed it.
A show is a folder of plain files (Open Lore Format). The studio keeps it in ~/.vinci/shows/<show>, and each step above also runs from the command line:
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.schema.json","name":"Docs","description":"Complete API documentation and guides for Vinci's AI-powered video generation, image creation, translation services, and digital content APIs","colors":{"primary":"#21dad2","light":"#f8fdfc","dark":"#74d0cc"},"logo":{"light":"https://mintcdn.com/vinci/6eX6mcvRdd8fjhwZ/logo/logo-light.svg?fit=max\u0026auto=format\u0026n=6eX6mcvRdd8fjhwZ\u0026q=85\u0026s=8e644110136b2aeda3a71fb9413d3cb2","dark":"https://mintcdn.com/vinci/6eX6mcvRdd8fjhwZ/logo/logo-dark.svg?fit=max\u0026auto=format\u0026n=6eX6mcvRdd8fjhwZ\u0026q=85\u0026s=0e129303616dbcd61f5f2e2b97314dfe","href":"https://docs.tryvinci.com"},"favicon":"https://mintcdn.com/vinci/6eX6mcvRdd8fjhwZ/favicon.svg?fit=max\u0026auto=format\u0026n=6eX6mcvRdd8fjhwZ\u0026q=85\u0026s=72655c03294598b03dee3d7b353d766e","appearance":{"default":"system","strict":false},"navbar":{"links":[{"icon":"headset","href":"mailto:team@tryvinci.com","label":"Support"},{"icon":"rocket","href":"https://app.tryvinci.com","label":"Go to App"},{"icon":"discord","href":"https://tryvinci.com/discord","label":"Discord"}]},"footer":{"socials":{"website":"https://tryvinci.com","discord":"https://tryvinci.com/discord","linkedin":"https://www.linkedin.com/company/tryvinci","instagram":"https://www.instagram.com/try.vinci"},"links":[{"header":"Product","items":[{"label":"Solutions","href":"https://tryvinci.com"},{"label":"Pricing","href":"https://tryvinci.com"},{"label":"Clips","href":"https://tryvinci.com/clips"},{"label":"Curated","href":"https://tryvinci.com/curated"},{"label":"Brand Custodian","href":"https://tryvinci.com/brand-custodian"}]},{"header":"Resources","items":[{"label":"Wall of Love","href":"https://tryvinci.com/wall-of-love"},{"label":"Blog","href":"https://blog.tryvinci.com"},{"label":"Cookbook","href":"https://blog.tryvinci.com/category/cookbook"},{"label":"Guides","href":"https://blog.tryvinci.com/category/guides"},{"label":"Developer","href":"https://docs.tryvinci.com"}]},{"header":"Compare","items":[{"label":"All Platforms","href":"https://tryvinci.com/compare"},{"label":"vs HeyGen","href":"https://tryvinci.com/compare/heygen"},{"label":"vs Synthesia","href":"https://tryvinci.com/compare/synthesia"},{"label":"vs D-ID","href":"https://tryvinci.com/compare/d-id"},{"label":"vs Runway","href":"https://tryvinci.com/compare/runway"}]},{"header":"Legal \u0026 Support","items":[{"label":"Privacy Policy","href":"https://tryvinci.com/privacy"},{"label":"Terms of Service","href":"https://tryvinci.com/terms"},{"label":"Contact Support","href":"mailto:team@tryvinci.com"},{"label":"Discord Community","href":"https://tryvinci.com/discord"},{"label":"WhatsApp","href":"https://tryvinci.com/whatsapp"},{"label":"LLMs.txt","href":"https://docs.tryvinci.com/llms.txt"},{"label":"LLMs Full","href":"https://docs.tryvinci.com/llms-full.txt"}]}]},"search":{},"seo":{"metatags":{"og:site_name":"Vinci - AI Video \u0026 Image Generation API Documentation","og:type":"website","og:description":"Complete API documentation for Vinci's AI video generation, image creation, and digital content services","og:image":"/logo/logo-light.svg","twitter:card":"summary_large_image","twitter:title":"Vinci API Documentation","twitter:description":"AI-powered video and image generation API documentation with guides and examples","robots":"index, follow","theme-color":"#21dad2","description":"Comprehensive documentation for Vinci's AI video generation, image creation, translation, and digital content APIs with code examples and integration guides"},"indexing":"all"},"styling":{"eyebrows":"breadcrumbs","codeblocks":"system","latex":false},"contextual":{"options":["copy","view","chatgpt","claude","perplexity"],"display":"header"},"thumbnails":{"appearance":"light","background":"https://mintcdn.com/vinci/6eX6mcvRdd8fjhwZ/logo/logo-light.svg?fit=max\u0026auto=format\u0026n=6eX6mcvRdd8fjhwZ\u0026q=85\u0026s=8e644110136b2aeda3a71fb9413d3cb2"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"vinci","hasAudioNarration":false,"actualSubdomain":"vinci","customDomains":["docs.tryvinci.com"],"gitSource":{"type":"github","owner":"tryvinci","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6af4081d20832f6fbc65f2af","clientVersion":"0.0.4102","searchFilterCounts":[{"language":"default","tag":"Documentation","count":29},{"language":"default","tag":"Guides","count":19},{"language":"default","tag":"Platform Services","count":7},{"language":"default","tag":"Create with AI","count":7},{"language":"default","tag":"Essentials","count":6},{"language":"default","tag":"Platform","count":5},{"language":"default","tag":"Prompting Guides","count":5},{"language":"default","tag":"API Reference","count":3},{"language":"default","tag":"Introduction","count":2},{"language":"default","tag":"Product Updates","count":1}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"learn/anime-episode-from-a-script","slug":"/learn/anime-episode-from-a-script","pageMetadata":{"title":"From a script to an anime episode","sidebarTitle":"Script to anime episode","description":"Plan every cut with stand-ins, watch the whole episode for $0, then render it once with real models. The cuts stay consistent: one frame shape, one screen direction, one look.","icon":"clapperboard","keywords":["AI video","Vinci","OLF","anime","storyboard","e-conte","animatic","camerawork","subtitles"],"href":"/learn/anime-episode-from-a-script"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Plan every cut with stand-ins, watch the whole episode for $0, then render it once with real models. The cuts stay consistent: one frame shape, one screen direction, one look.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,em:`em`,input:`input`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Card,CodeBlock,Columns,Frame,Heading,OptimizedImage,Step,Steps,Tab,Tabs,Tip,Warning}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Columns)_missingMdxReference(`Columns`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`AI video goes wrong between the shots, not inside them. One clip is square and the next is wide, a character looks left and then right, one cut has sound and the next has none. This guide makes a short anime episode where every cut matches, because you check the whole episode for free before you pay for a single picture.`}),`\n`,_jsxs(Columns,{cols:2,children:[_jsx(Card,{title:`What you get`,icon:`flag-checkered`,children:_jsx(_components.p,{children:`A 20-second, 7-cut episode at 1920×1080, with the lines as subtitles and no sound.`})}),_jsx(Card,{title:`Time to read`,icon:`clock`,children:_jsx(_components.p,{children:`About 8 minutes. The steps take about an hour, most of it in planning.`})})]}),`\n`,_jsx(Heading,{level:`2`,id:`the-example`,children:`The example`}),`\n`,_jsxs(_components.p,{children:[`This is episode 1 of a small show, `,_jsx(_components.em,{children:`Lamp Oil`}),`: a young lighthouse keeper, Mira, meets the old keeper, Tomas, on the cliff path, and then lights the great lamp. Every cut follows the steps in this guide.`]}),`\n`,_jsx(Frame,{caption:`Lamp Oil, episode 1: 7 cuts, 19.9 seconds. Keyframes on Seedream 4.5, videos on Hailuo 2.3 Fast Pro, one camera move made by the engine at $0. Model spend: $2.17 at the prices of November 2026.`,children:_jsx(`video`,{controls:true,playsInline:true,className:`mint-w-full mint-aspect-video mint-rounded-xl`,src:`https://mintcdn.com/vinci/aWvTefBjBTaoVzeY/videos/anime-episode-example.mp4?fit=max\u0026auto=format\u0026n=aWvTefBjBTaoVzeY\u0026q=85\u0026s=4299e77dd63c3ecd7321b3555fbdaa21`,poster:`/images/learn/anime-episode-poster.jpg`,\"data-path\":`videos/anime-episode-example.mp4`})}),`\n`,_jsx(_components.p,{children:`And this is the process in the studio, from a new show to the export. It runs in demo mode, so the pictures are placeholders and nothing costs money.`}),`\n`,_jsx(Frame,{caption:`The steps in the Vinci studio, in demo mode ($0). 1 minute 30 seconds, no sound.`,children:_jsx(`video`,{controls:true,playsInline:true,className:`mint-w-full mint-aspect-video mint-rounded-xl`,src:`https://mintcdn.com/vinci/aWvTefBjBTaoVzeY/videos/anime-episode-walkthrough.mp4?fit=max\u0026auto=format\u0026n=aWvTefBjBTaoVzeY\u0026q=85\u0026s=292ca35738fabae22655b65b1ed1305b`,poster:`/images/learn/anime-episode-walkthrough-poster.jpg`,\"data-path\":`videos/anime-episode-walkthrough.mp4`})}),`\n`,_jsx(Heading,{level:`2`,id:`what-you-need`,children:`What you need`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`The free and open source Vinci studio (the install is in step 1)`}),`\n`,_jsx(_components.li,{children:`A short script: scene headings, action and dialogue, in Fountain or plain text`}),`\n`,_jsx(_components.li,{children:`One sheet image for each character: the whole character, front view at least`}),`\n`,_jsx(_components.li,{children:`For the real render only: a model provider key (this example uses Wavespeed) and live spend turned on`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`steps`,children:`Steps`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Start the studio in demo mode`,children:[_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`git`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` clone`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://github.com/tryvinci/vinci`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026 `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`cd`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` vinci`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`python3`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -m`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` venv`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` .venv`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026 `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`.`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` .venv/bin/activate`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026 `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`make`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` install`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`./scripts/vinci`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` init`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --demo`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`./scripts/vinci`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` studio`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`Open the studio at `,_jsx(_components.code,{children:`http://127.0.0.1:4310/studio`}),` and pick `,_jsx(_components.strong,{children:`Shows`}),` on the left rail. Demo mode uses practice models: every render costs $0, so you can try each step before you spend.`]})]}),_jsx(Step,{title:`Create the show and the first character`,children:_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`New show`}),`. Give it a title, keep the medium `,_jsx(_components.strong,{children:`2D anime`}),`, and pick `,_jsx(_components.strong,{children:`16:9`}),`. Then add the first character: a name, one sentence about the look, and the whole character sheet. The sheet is the reference for every picture of that character, so use the same sheet for the whole show.`]})}),_jsx(Step,{title:`Paste the script`,children:_jsxs(_components.p,{children:[`Paste the script in the next step. Each action paragraph and each line of dialogue becomes a shot, with a framing and a length. In a 2D anime show, a line gets the camerawork `,_jsx(_components.strong,{children:`kuchipaku-hold`}),` (a held pose, only the mouth moves) and only its speaker in the shot. Click `,_jsx(_components.strong,{children:`Create show`}),`.`]})}),_jsx(Step,{title:`Give every character a sheet`,children:_jsxs(_components.p,{children:[`A speaker who is new in the script has no sheet yet, and the show stays invalid until it has one. Open the character in the `,_jsx(_components.strong,{children:`Bible`}),` and add the sheet image.`]})}),_jsxs(Step,{title:`Choose the camerawork of each shot`,children:[_jsxs(_components.p,{children:[`Open a shot from the storyboard and pick a template in the `,_jsx(_components.strong,{children:`Camerawork`}),` menu. It fills the camera, the length and the words that go to the model. For a dialogue scene:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`two-shot-axis`}),` on the first shot with both characters. It fixes who stands left and who stands right for the rest of the scene (the 180° line).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`ots-a`}),` and `,_jsx(_components.strong,{children:`ots-b`}),` for over-the-shoulder shots. They keep each character on their side.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`reaction-cu`}),` for a short reaction close-up with no line.`]}),`\n`,_jsxs(_components.li,{children:[`An engine move (for example `,_jsx(_components.strong,{children:`tu-to-eyes`}),` or `,_jsx(_components.strong,{children:`tilt-up-hero`}),`) makes the video from the keyframe with no video model, for $0.`]}),`\n`]})]}),_jsxs(Step,{title:`Check the staging with pills`,children:[_jsxs(_components.p,{children:[`Until a shot has a keyframe, the storyboard and the shot page show `,_jsx(_components.strong,{children:`pills`}),`: one flat stand-in per character, with a white dot where they look. A character keeps one color in every shot. A single that looks off screen sits beside the centre, behind its gaze.`]}),_jsxs(_components.p,{children:[`If a shot turns the characters around, the shot page says `,_jsx(_components.strong,{children:`Crosses the 180° line`}),`. Fix it before you render. For a single, write the direction into the shot’s `,_jsx(_components.code,{children:`blocking`}),` in the scene file, so the words go to the model too:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`- `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`e01/s01/sh050`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` duration`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`2+00`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` description`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Tomas, alone, looks out to sea.\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` camera`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`framing`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`close_up`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` characters`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`char/tomas`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` blocking`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`char/tomas`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"at the right of the frame, looking toward frame left\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`]})})})]}),_jsx(Step,{title:`Check the timing on the e-conte sheet`,children:_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`E-conte sheet`}),` in the storyboard header. You get a PDF with 5 cuts a page: the cut number, the picture with the camera move, the action, the dialogue and the time in seconds+frames (`,_jsx(_components.code,{children:`2+12`}),` is 2.5 seconds). With no sound, a subtitle must stay long enough to read: give each line about 2 seconds.`]})}),_jsx(Step,{title:`Watch the mock render`,children:_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Mock render`}),`. You get one video of the whole episode, every cut drawn from its pills under its camera move, with no sound and each line as a subtitle. It costs $0. Watch it once: if the cuts do not flow as pills, they will not flow as paintings either. Fix the staging and the timing now.`]})}),_jsxs(Step,{title:`Render with real models`,children:[_jsxs(_components.p,{children:[`Add your provider key under `,_jsx(_components.strong,{children:`Connect`}),`, and start the studio with live spend on (`,_jsx(_components.code,{children:`VINCI_ALLOW_LIVE_SPEND=1`}),`). Every render shows its price first.`]}),_jsx(_components.p,{children:`Render the keyframe of one shot, approve it, then render its video. Check that shot before you render the rest: the frame shape, the faces, where each character looks. Then render the other shots one by one, keyframe first.`})]}),_jsx(Step,{title:`Check that the cuts match`,children:_jsxs(_components.p,{children:[`Play the shots in order and look at three things: the same frame shape in every cut, the same screen direction in a scene, and the same light in a scene. Render again only the shot that breaks. If a take still fits after you change only text (a line, a length), click `,_jsx(_components.strong,{children:`Keep v1 anyway`}),` (with that take’s name) on its stale banner: with no sound, the picture does not need to change.`]})}),_jsx(Step,{title:`Cut and export with no sound`,children:_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`Cut`}),` and click `,_jsx(_components.strong,{children:`Use approved takes`}),`. In the export panel, keep `,_jsx(_components.strong,{children:`Burn-in subtitles`}),` on, turn `,_jsx(_components.strong,{children:`Sound`}),` off and click `,_jsx(_components.strong,{children:`Export episode`}),`. The file has no audio stream, and each subtitle names its speaker (`,_jsx(_components.code,{children:`Mira: You kept the key?`}),`).`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`mock-render-and-real-render-side-by-side`,children:`Mock render and real render, side by side`}),`\n`,_jsx(_components.p,{children:`The mock render is the plan; the real render follows it. Each cut keeps its place, its length, its subtitle and its screen direction.`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/vinci/aWvTefBjBTaoVzeY/images/learn/anime-episode-mock-and-real.jpg?fit=max\u0026auto=format\u0026n=aWvTefBjBTaoVzeY\u0026q=85\u0026s=a527b98a1e3a761686523ff41dc3d8d3`,alt:`The four dialogue cuts of the example. Left: the mock render, with pills. Right: the real render. Mira stays on the left and Tomas on the right, and each cut has the same subtitle.`,\"data-og-width\":`1328`,width:`1328`,\"data-og-height\":`1670`,height:`1670`,\"data-path\":`images/learn/anime-episode-mock-and-real.jpg`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/vinci/aWvTefBjBTaoVzeY/images/learn/anime-episode-mock-and-real.jpg?w=280\u0026fit=max\u0026auto=format\u0026n=aWvTefBjBTaoVzeY\u0026q=85\u0026s=207a87987329752f005b385350e13611 280w, https://mintcdn.com/vinci/aWvTefBjBTaoVzeY/images/learn/anime-episode-mock-and-real.jpg?w=560\u0026fit=max\u0026auto=format\u0026n=aWvTefBjBTaoVzeY\u0026q=85\u0026s=96e7c05cb0753dc2adc9a249b90e163c 560w, https://mintcdn.com/vinci/aWvTefBjBTaoVzeY/images/learn/anime-episode-mock-and-real.jpg?w=840\u0026fit=max\u0026auto=format\u0026n=aWvTefBjBTaoVzeY\u0026q=85\u0026s=3f70d02e683a7f9a74cd905ba5e50d70 840w, https://mintcdn.com/vinci/aWvTefBjBTaoVzeY/images/learn/anime-episode-mock-and-real.jpg?w=1100\u0026fit=max\u0026auto=format\u0026n=aWvTefBjBTaoVzeY\u0026q=85\u0026s=ccb67c8e35187cf82a61bd9373f38b7a 1100w, https://mintcdn.com/vinci/aWvTefBjBTaoVzeY/images/learn/anime-episode-mock-and-real.jpg?w=1650\u0026fit=max\u0026auto=format\u0026n=aWvTefBjBTaoVzeY\u0026q=85\u0026s=bee786d3fb5db9dad47eed56be2cd8e9 1650w, https://mintcdn.com/vinci/aWvTefBjBTaoVzeY/images/learn/anime-episode-mock-and-real.jpg?w=2500\u0026fit=max\u0026auto=format\u0026n=aWvTefBjBTaoVzeY\u0026q=85\u0026s=016d7560622c9ce11c59c018f42ed35d 2500w`}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Plan with pills, pay once.`}),` The mock render and the e-conte sheet cost nothing. A change to a cut after the real render costs a keyframe and a video for that cut.`]})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`A model does not obey every word.`}),` The template words and the blocking steer the model, but they do not bind it. Render one shot, check it, then render the next. In the example, one reaction shot came back with the light on the wrong side, and a new render of that shot fixed it.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`before-you-publish`,children:`Before you publish`}),`\n`,_jsxs(_components.ul,{className:`contains-task-list`,children:[`\n`,_jsxs(_components.li,{className:`task-list-item`,children:[_jsx(_components.input,{type:`checkbox`,disabled:true}),` `,`Every character has a sheet`]}),`\n`,_jsxs(_components.li,{className:`task-list-item`,children:[_jsx(_components.input,{type:`checkbox`,disabled:true}),` `,`The first two-shot of each dialogue scene sets the 180° line, and no shot crosses it`]}),`\n`,_jsxs(_components.li,{className:`task-list-item`,children:[_jsx(_components.input,{type:`checkbox`,disabled:true}),` `,`Each line has about 2 seconds on screen`]}),`\n`,_jsxs(_components.li,{className:`task-list-item`,children:[_jsx(_components.input,{type:`checkbox`,disabled:true}),` `,`The mock render plays as one episode`]}),`\n`,_jsxs(_components.li,{className:`task-list-item`,children:[_jsx(_components.input,{type:`checkbox`,disabled:true}),` `,`Every cut has the same frame shape, and each scene keeps its screen direction and its light`]}),`\n`,_jsxs(_components.li,{className:`task-list-item`,children:[_jsx(_components.input,{type:`checkbox`,disabled:true}),` `,`The export has subtitles and no sound`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`two-ways-to-go-further`,children:`Two ways to go further`}),`\n`,_jsxs(Columns,{cols:2,children:[_jsx(Card,{title:`Let Vinci make it`,icon:`wand-magic-sparkles`,href:`https://tryvinci.com/meet?utm_source=guide\u0026utm_medium=docs\u0026utm_campaign=anime-episode`,children:_jsx(_components.p,{children:`Send us the script and the character sheets, and we return the episode in your style. Book a demo to get started.`})}),_jsx(Card,{title:`Free and open source Vinci`,icon:`github`,href:`https://github.com/tryvinci/vinci`,children:_jsx(_components.p,{children:`Run the Vinci studio on your own machine with your own model keys. It shows the price before every render.`})})]}),`\n`,_jsx(Heading,{level:`3`,id:`run-this-workflow-from-the-command-line`,children:`Run this workflow from the command line`}),`\n`,_jsxs(_components.p,{children:[`A show is a folder of plain files (Open Lore Format). The studio keeps it in `,_jsx(_components.code,{children:`~/.vinci/shows/\u003cshow>`}),`, and each step above also runs from the command line:`]}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Plan ($0)`,id:`plan-%240`,children:[_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`./scripts/vinci`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` olf`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` validate`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -C`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/.vinci/shows/lamp-oil`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`./scripts/vinci`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` olf`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` template`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` anime/two-shot-axis`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --shot`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` e01/s01/sh030`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -C`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/.vinci/shows/lamp-oil`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`./scripts/vinci`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` olf`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` previs`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` e01`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --sheet`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -C`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/.vinci/shows/lamp-oil`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`./scripts/vinci`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` olf`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` previs`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` e01`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --mock`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -C`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/.vinci/shows/lamp-oil`})]}),`\n`]})})}),_jsxs(_components.p,{children:[_jsx(_components.code,{children:`validate`}),` prints the 180° warnings. The sheet and the mock render go to `,_jsx(_components.code,{children:`previs/e01/`}),` in the show folder.`]})]}),_jsxs(Tab,{title:`Render`,id:`render`,children:[_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`./scripts/vinci`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` olf`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` render`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` e01/s01/sh030`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --dry-run`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -C`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/.vinci/shows/lamp-oil`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`./scripts/vinci`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` olf`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` render`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` e01/s01/sh030`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --yes`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -C`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/.vinci/shows/lamp-oil`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`./scripts/vinci`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` olf`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` review`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` e01/s01/sh030/v1`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --status`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` approved`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -C`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/.vinci/shows/lamp-oil`})]}),`\n`]})})}),_jsxs(_components.p,{children:[_jsx(_components.code,{children:`--dry-run`}),` prints the plan and the price; nothing runs. `,_jsx(_components.code,{children:`--yes`}),` spends it.`]})]}),_jsxs(Tab,{title:`Export`,id:`export`,children:[_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`./scripts/vinci`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` olf`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cut`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` e01`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --use-approved`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -C`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/.vinci/shows/lamp-oil`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`./scripts/vinci`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` olf`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` export`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` e01`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --aspect`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 16:9`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --no-sound`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -C`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/.vinci/shows/lamp-oil`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`The episode goes to `,_jsx(_components.code,{children:`exports/e01/`}),` in the show folder, with the subtitles as an `,_jsx(_components.code,{children:`.srt`}),` file too.`]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`more-guides`,children:`More guides`}),`\n`,_jsxs(Columns,{cols:2,children:[_jsx(Card,{title:`Stop paying for AI clips you throw away`,icon:`receipt`,href:`/learn/ai-video-cost`}),_jsx(Card,{title:`Five things that break an AI product ad`,icon:`list-check`,href:`/learn/keep-the-label-intact`})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"system","config":{},"pageMetadata":{"title":"From a script to an anime episode","sidebarTitle":"Script to anime episode","description":"Plan every cut with stand-ins, watch the whole episode for $0, then render it once with real models. The cuts stay consistent: one frame shape, one screen direction, one look.","icon":"clapperboard","keywords":["AI video","Vinci","OLF","anime","storyboard","e-conte","animatic","camerawork","subtitles"],"href":"/learn/anime-episode-from-a-script"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"The example","slug":"the-example","depth":2,"children":[]},{"title":"What you need","slug":"what-you-need","depth":2,"children":[]},{"title":"Steps","slug":"steps","depth":2,"children":[]},{"title":"Mock render and real render, side by side","slug":"mock-render-and-real-render-side-by-side","depth":2,"children":[]},{"title":"Before you publish","slug":"before-you-publish","depth":2,"children":[]},{"title":"Two ways to go further","slug":"two-ways-to-go-further","depth":2,"children":[{"title":"Run this workflow from the command line","slug":"run-this-workflow-from-the-command-line","depth":3,"children":[]}]},{"title":"More guides","slug":"more-guides","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"dynamicCss":".mint-aspect-video {\n aspect-ratio: 16 / 9\n}\n.mint-w-full {\n width: 100%\n}\n.mint-rounded-xl {\n border-radius: 0.75rem\n}","subdomain":"vinci","siteName":"Docs","title":"From a script to an anime episode - Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-11T06:16:02.260Z","originalFileLocation":"learn/anime-episode-from-a-script.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Plan every cut with stand-ins, watch the whole episode for $0, then render it once with real models. The cuts stay consistent: one frame shape, one screen direction, one look.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"index, follow\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/vinci/J5YnjggAla_1QrZC/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/vinci/J5YnjggAla_1QrZC/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/vinci/J5YnjggAla_1QrZC/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/vinci/J5YnjggAla_1QrZC/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/vinci/J5YnjggAla_1QrZC/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/vinci/J5YnjggAla_1QrZC/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/vinci/J5YnjggAla_1QrZC/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/vinci/J5YnjggAla_1QrZC/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/vinci/J5YnjggAla_1QrZC/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"From a script to an anime episode - Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Complete API documentation for Vinci\u0026#x27;s AI video generation, image creation, and digital content services\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Vinci - AI Video \u0026amp; Image Generation API Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.tryvinci.com/learn/anime-episode-from-a-script\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://vinci.mintlify.site/logo/logo-light.svg\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Vinci API Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"AI-powered video and image generation API documentation with guides and examples\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://vinci.mintlify.site/logo/logo-light.svg\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/vinci/J5YnjggAla_1QrZC/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#21dad2\">\u003cmeta data-mint-head name=\"theme-color\" content=\"#21dad2\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.tryvinci.com/learn/anime-episode-from-a-script\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/learn/anime-episode-from-a-script.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.tryvinci.com/#organization\",\"name\":\"Docs\",\"url\":\"https://docs.tryvinci.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/vinci/6eX6mcvRdd8fjhwZ/logo/logo-light.svg?fit=max\u0026auto=format\u0026n=6eX6mcvRdd8fjhwZ\u0026q=85\u0026s=8e644110136b2aeda3a71fb9413d3cb2\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.tryvinci.com#website\",\"name\":\"Docs\",\"url\":\"https://docs.tryvinci.com\",\"publisher\":{\"@id\":\"https://docs.tryvinci.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.tryvinci.com/learn/anime-episode-from-a-script#webpage\",\"url\":\"https://docs.tryvinci.com/learn/anime-episode-from-a-script\",\"name\":\"From a script to an anime episode\",\"description\":\"Plan every cut with stand-ins, watch the whole episode for $0, then render it once with real models. The cuts stay consistent: one frame shape, one screen direction, one look.\",\"dateModified\":\"2026-11-11T06:16:02.260Z\",\"isPartOf\":{\"@id\":\"https://docs.tryvinci.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.tryvinci.com/learn/anime-episode-from-a-script#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.tryvinci.com/learn/anime-episode-from-a-script#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Create with AI\",\"item\":\"https://docs.tryvinci.com/learn\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"From a script to an anime episode\",\"item\":\"https://docs.tryvinci.com/learn/anime-episode-from-a-script\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.tryvinci.com/learn/anime-episode-from-a-script#article\",\"headline\":\"From a script to an anime episode\",\"name\":\"From a script to an anime episode\",\"description\":\"Plan every cut with stand-ins, watch the whole episode for $0, then render it once with real models. The cuts stay consistent: one frame shape, one screen direction, one look.\",\"url\":\"https://docs.tryvinci.com/learn/anime-episode-from-a-script\",\"mainEntityOfPage\":{\"@id\":\"https://docs.tryvinci.com/learn/anime-episode-from-a-script#webpage\"},\"image\":\"https://docs.tryvinci.com/logo/logo-light.svg\",\"dateModified\":\"2026-11-11T06:16:02.260Z\",\"keywords\":\"AI video, Vinci, OLF, anime, storyboard, e-conte, animatic, camerawork, subtitles\",\"publisher\":{\"@id\":\"https://docs.tryvinci.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.tryvinci.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Docs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Docs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/learn/anime-episode-from-a-script.md","siteName":"Docs","nav":{"global":null,"anchors":[{"anchor":"Documentation","icon":"book-open","pages":[{"title":"Documentation","href":""}]},{"anchor":"Guides","icon":"compass","groups":[{"group":"Create with AI","icon":"wand-magic-sparkles","pages":[{"title":"Guides","sidebarTitle":"All guides","icon":"compass","href":"/learn"},{"title":"Make a product ad from one photo","sidebarTitle":"Product ad from one photo","description":"You can make a short product ad from a single good photo. Shoot it plainly, generate a few scenes around it, add one camera move and cut it to fifteen seconds.","icon":"image","href":"/learn/product-ad-from-one-photo"},{"title":"From a script to an anime episode","sidebarTitle":"Script to anime episode","icon":"clapperboard","href":"/learn/anime-episode-from-a-script"},{"title":"Turn one podcast into a week of shorts","sidebarTitle":"Podcast to shorts","description":"A clip has about two seconds to earn the next ten. Here is how to cut podcast moments people actually finish, and how to get five of them out of one episode.","icon":"scissors","href":"/learn/podcast-to-shorts"},{"title":"Stop paying for AI clips you throw away","sidebarTitle":"Cut AI video costs","icon":"receipt","href":"/learn/ai-video-cost"},{"title":"One ad, five languages","sidebarTitle":"One ad, five languages","icon":"language","href":"/learn/one-ad-five-languages"},{"title":"Ten fresh ads from one winner","sidebarTitle":"Ten ads from one winner","icon":"layer-group","href":"/learn/ten-ads-from-one-winner"},{"title":"Five things that break an AI product ad","sidebarTitle":"Product ad checklist","icon":"list-check","href":"/learn/keep-the-label-intact"}]}]}]},"basePath":"","title":"From a script to an anime episode - Docs","buildId":"dpl_596ePT575z4qnAFksq1biRW97aLY","deploymentId":"dpl_596ePT575z4qnAFksq1biRW97aLY","dynamics":["07c022d89b","a74be98ba7","a9bb46feb3"],"chunks":["Frame-BXrZabKK.js","DynamicMarkdown-CtasenyM.js","zoom-image-lightbox-C5F0mVLH.js","lightbox-handle-r17bVUz3.js","Markdown-CwLx6PAg.js","clsx-C3kuh_dz.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CmKHfscc.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-U3mI6Ljh.js"]}