Normalize each source to the working format, one step per clip.
Concat the normalized segments.
Composite layers in z order, with placement, camera and masks.
Decorate with the grade, then titles and captions.
Mix audio, with the bed, ducking and loudness.
splice plan prints every step’s argv without running anything. That is the tool
to reach for when a render fails: the error came from one of those commands.
frames reads the render’s own output, so it cannot show something the render did
not produce. It refuses with nothing_rendered when that profile has not been
rendered yet.
prune deletes by reference, never by age: it keeps every step key and sidecar
stem referenced by the Final and Preview plans, each with and without the default
loudness pass. A non-default loudness target keys differently and is rebuilt by
the next render with those flags. If a plan cannot be built, nothing is deleted.
Every splice.json in one directory shares a single .splice/cache, so pruning
from one project removes the other project’s entries. Still safe — the cache is
never authoritative — but it costs a re-render.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"splice","description":"A video-editing CLI for AI agents: one JSON document in, ffmpeg out.","colors":{"primary":"#5B8DEF","light":"#8FB2F5","dark":"#3A6BD0"},"navbar":{"links":[{"href":"https://github.com/matthew-eth724/splice-cli","label":"GitHub"}]},"footer":{"socials":{"github":"https://github.com/matthew-eth724/splice-cli"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"splice-cli","hasAudioNarration":false,"actualSubdomain":"splice-cli","customDomains":[],"gitSource":{"type":"artifacts","owner":"prod","repo":"d4a098ae4a762e701b8337e9","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":"","_id":"6af6eecc4b52838f62bf6ead"},"entitlements":{},"buildId":"6af6eedc7f87d88f98cf1366","clientVersion":"0.0.4124","searchFilterCounts":[]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"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":"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},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"guides/rendering","slug":"/guides/rendering","pageMetadata":{"title":"Rendering and caching","description":"What a render compiles to, how the cache decides, preview versus final, loudness, and prunes.","href":"/guides/rendering"},"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: \"What a render compiles to, how the cache decides, preview versus final, loudness, and prunes.\"\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`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`A render is not one ffmpeg command. `,_jsx(_components.code,{children:`splice`}),` compiles the document into steps and\nruns each into a content-addressed cache.`]}),`\n`,_jsx(Heading,{level:`2`,id:`steps`,children:`Steps`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Normalize`}),` each source to the working format, one step per clip.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Concat`}),` the normalized segments.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Composite`}),` layers in z order, with placement, camera and masks.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Decorate`}),` with the grade, then titles and captions.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Mix`}),` audio, with the bed, ducking and loudness.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`splice plan`}),` prints every step’s argv without running anything. That is the tool\nto reach for when a render fails: the error came from one of those commands.`]}),`\n`,_jsx(Heading,{level:`2`,id:`what-a-cache-key-is`,children:`What a cache key is`}),`\n`,_jsx(_components.p,{children:`A step’s key is its argv, the stat token of each input (path, size, mtime), the\ncontract version, and the profile. So:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Changing one clip’s trim rebuilds that clip’s normalize step and everything\ndownstream, not the whole plan.`}),`\n`,_jsxs(_components.li,{children:[`Re-running the same render reuses everything and says so:\n`,_jsx(_components.code,{children:`{\"steps\":{\"total\":7,\"ran\":0,\"reused\":7}}`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`.splice/`}),` is never authoritative. Delete it and the next render rebuilds.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`preview-versus-final`,children:`Preview versus final`}),`\n`,_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:`splice`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` render`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --preview`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -o`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` preview.mp4`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`splice`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` render`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -o`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` out.mp4`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`--preview`}),` uses its own canvas, its own frame rate and its own cache, so\niterating does not pollute the final cache or the other way round.`]}),`\n`,_jsx(Heading,{level:`2`,id:`loudness`,children:`Loudness`}),`\n`,_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:`splice`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` render`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --loudnorm`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -o`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` out.mp4`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`splice`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` render`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --loudnorm`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --lufs`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -16`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --true-peak`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -1.5`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`--loudnorm`}),` adds one EBU R128 pass: video is copied, only audio is re-encoded.\nDefaults are −14 LUFS, −1 dBTP, LRA 11.`]}),`\n`,_jsx(Heading,{level:`2`,id:`stills`,children:`Stills`}),`\n`,_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:`splice`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` frames`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --at`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 1,2.5,4`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -o`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` stills`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`splice`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` frames`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --at`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 0,2,4,6`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --sheet`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 2`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -o`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` sheet`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`frames`}),` reads the render’s own output, so it cannot show something the render did\nnot produce. It refuses with `,_jsx(_components.code,{children:`nothing_rendered`}),` when that profile has not been\nrendered yet.`]}),`\n`,_jsx(Heading,{level:`2`,id:`the-cache-commands`,children:`The cache commands`}),`\n`,_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:`splice`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cache`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` info`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`splice`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cache`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` prune`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --dry-run`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`splice`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cache`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` prune`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`splice`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cache`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` prune`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --all`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`prune`}),` deletes by reference, never by age: it keeps every step key and sidecar\nstem referenced by the Final and Preview plans, each with and without the default\nloudness pass. A non-default loudness target keys differently and is rebuilt by\nthe next render with those flags. If a plan cannot be built, nothing is deleted.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Every `,_jsx(_components.code,{children:`splice.json`}),` in one directory shares a single `,_jsx(_components.code,{children:`.splice/cache`}),`, so pruning\nfrom one project removes the other project’s entries. Still safe — the cache is\nnever authoritative — but it costs a re-render.`]})})]})}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":{"config":{},"pageMetadata":{"title":"Rendering and caching","description":"What a render compiles to, how the cache decides, preview versus final, loudness, and prunes.","href":"/guides/rendering"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Steps","slug":"steps","depth":2,"children":[]},{"title":"What a cache key is","slug":"what-a-cache-key-is","depth":2,"children":[]},{"title":"Preview versus final","slug":"preview-versus-final","depth":2,"children":[]},{"title":"Loudness","slug":"loudness","depth":2,"children":[]},{"title":"Stills","slug":"stills","depth":2,"children":[]},{"title":"The cache commands","slug":"the-cache-commands","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"splice-cli","siteName":"splice","title":"Rendering and caching - splice","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-13T11:05:02.953Z","originalFileLocation":"guides/rendering.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=\"What a render compiles to, how the cache decides, preview versus final, loudness, and prunes.\">\u003cmeta data-mint-head name=\"application-name\" content=\"splice\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/splice-cli/_generated/favicon/apple-touch-icon.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/splice-cli/_generated/favicon/favicon-32x32.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/splice-cli/_generated/favicon/favicon-16x16.png?v=3\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/splice-cli/_generated/favicon/favicon.ico?v=3\">\u003cmeta data-mint-head property=\"og:title\" content=\"Rendering and caching - splice\">\u003cmeta data-mint-head property=\"og:description\" content=\"What a render compiles to, how the cache decides, preview versus final, loudness, and prunes.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"splice\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://splice-cli.mintlify.app/guides/rendering\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://splice-cli.mintlify.site/_mintlify/api/og/v2?division=Guides\u0026amp;title=Rendering+and+caching\u0026amp;description=What+a+render+compiles+to%2C+how+the+cache+decides%2C+preview+versus+final%2C+loudness%2C+and+prunes.\u0026amp;theme=3c76fba90887bc4b9ed696df\u0026amp;signature=f57b5db1134a89168167bfc7e7680c694affe7d9e261d983a972490b37c54443\">\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=\"Rendering and caching - splice\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"What a render compiles to, how the cache decides, preview versus final, loudness, and prunes.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://splice-cli.mintlify.site/_mintlify/api/og/v2?division=Guides\u0026amp;title=Rendering+and+caching\u0026amp;description=What+a+render+compiles+to%2C+how+the+cache+decides%2C+preview+versus+final%2C+loudness%2C+and+prunes.\u0026amp;theme=3c76fba90887bc4b9ed696df\u0026amp;signature=f57b5db1134a89168167bfc7e7680c694affe7d9e261d983a972490b37c54443\">\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=\"https://mintlify.s3.us-west-1.amazonaws.com/splice-cli/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"splice\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#5B8DEF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://splice-cli.mintlify.app/guides/rendering\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/guides/rendering.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://splice-cli.mintlify.app/#organization\",\"name\":\"splice\",\"url\":\"https://splice-cli.mintlify.app\"},{\"@type\":\"WebSite\",\"@id\":\"https://splice-cli.mintlify.app#website\",\"name\":\"splice\",\"url\":\"https://splice-cli.mintlify.app\",\"publisher\":{\"@id\":\"https://splice-cli.mintlify.app/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://splice-cli.mintlify.app/guides/rendering#webpage\",\"url\":\"https://splice-cli.mintlify.app/guides/rendering\",\"name\":\"Rendering and caching\",\"description\":\"What a render compiles to, how the cache decides, preview versus final, loudness, and prunes.\",\"dateModified\":\"2026-11-13T11:05:02.953Z\",\"isPartOf\":{\"@id\":\"https://splice-cli.mintlify.app#website\"},\"breadcrumb\":{\"@id\":\"https://splice-cli.mintlify.app/guides/rendering#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://splice-cli.mintlify.app/guides/rendering#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Guides\",\"item\":\"https://splice-cli.mintlify.app/guides/editing\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Rendering and caching\",\"item\":\"https://splice-cli.mintlify.app/guides/rendering\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://splice-cli.mintlify.app/guides/rendering#article\",\"headline\":\"Rendering and caching\",\"name\":\"Rendering and caching\",\"description\":\"What a render compiles to, how the cache decides, preview versus final, loudness, and prunes.\",\"url\":\"https://splice-cli.mintlify.app/guides/rendering\",\"mainEntityOfPage\":{\"@id\":\"https://splice-cli.mintlify.app/guides/rendering#webpage\"},\"dateModified\":\"2026-11-13T11:05:02.953Z\",\"publisher\":{\"@id\":\"https://splice-cli.mintlify.app/#organization\"},\"isPartOf\":{\"@id\":\"https://splice-cli.mintlify.app#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"splice\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"splice\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/guides/rendering.md","siteName":"splice","nav":{"global":null,"groups":[{"group":"Get started","icon":"rocket","pages":[{"title":"Introduction","sidebarTitle":"Overview","href":"/index"},{"title":"Quickstart","href":"/quickstart"},{"title":"Install and ffmpeg","href":"/guides/installation"}]},{"group":"Guides","icon":"book-open","pages":[{"title":"Editing","href":"/guides/editing"},{"title":"Layers, camera, masks","href":"/guides/layers"},{"title":"Captions and transcription","description":"Turn a recording into an SRT, review it, then decide separately whether to burn it in.","href":"/guides/captions"},{"title":"Rendering and caching","href":"/guides/rendering"},{"title":"For agents","description":"The loop, the JSON contract, and the mistakes that cost the most tokens.","href":"/guides/agents"}]},{"group":"Reference","icon":"code","pages":[{"title":"Command reference","href":"/reference/cli"},{"title":"Project file","href":"/reference/project-file"},{"title":"Errors and warnings","href":"/reference/errors"},{"title":"How it works","href":"/reference/how-it-works"}]}]},"basePath":"","title":"Rendering and caching - splice","buildId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","deploymentId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","dynamics":[],"chunks":[]}