[{"data":1,"prerenderedAt":310},["ShallowReactive",2],{"blog:\u002Fblog\u002Fwe-stopped-making-templates":3,"site":298},{"id":4,"title":5,"author":6,"body":7,"date":281,"description":282,"extension":283,"heroAlt":284,"heroImage":285,"meta":286,"navigation":287,"ogImage":288,"path":289,"seo":290,"stem":291,"tags":292,"updated":296,"__hash__":297},"blog\u002Fblog\u002Fwe-stopped-making-templates.md","We stopped making templates","Michael Ruescher, Founder",{"type":8,"value":9,"toc":275},"minimark",[10,14,17,22,30,209,212,216,219,231,234,238,244,247,250,254,257,260,263,266,271],[11,12,13],"p",{},"Open any clip tool and you'll find the same thing: a wall of templates.\nHundreds of them. Someone designed each one eighteen months ago, and it shows\n— they're frozen at whatever taste, trends, and tools existed the day they\nshipped. Your job is to scroll until one feels close enough, and then live\nwith \"close enough\" forever.",[11,15,16],{},"We shipped Identity Studio without a template wall, and it wasn't an\noversight. It was the whole point.",[18,19,21],"h2",{"id":20},"an-effect-is-a-program","An effect is a program",[11,23,24,25,29],{},"In BitterClip, an opener isn't a video file with your logo composited on\ntop. It's a ",[26,27,28],"strong",{},"scene"," — a compact program with a stage, elements, and\nmotion, keyed to time and sound. This is what a minimal one looks like:",[31,32,37],"pre",{"className":33,"code":34,"language":35,"meta":36,"style":36},"language-js shiki shiki-themes github-dark-dimmed","export const scene = {\n  id: 'my-scene',\n  mount(ctx) {\n    const root = document.createElement('div')\n    root.className = 'scene my-scene'\n    root.innerHTML = '\u003Cstyle>.my-scene{background:#000}\u003C\u002Fstyle>\u003Cb>YOUR MARK\u003C\u002Fb>'\n    ctx.layer.append(root)\n    return { root }\n  },\n  frame(ctx) {\n    \u002F\u002F motion, keyed to ctx.sync.progress and the soundtrack's amplitude\n    ctx.refs.root.style.opacity = ctx.sync.progress\n  },\n}\n","js","",[38,39,40,63,76,93,118,130,141,153,162,168,180,187,198,203],"code",{"__ignoreMap":36},[41,42,45,49,52,56,59],"span",{"class":43,"line":44},"line",1,[41,46,48],{"class":47},"scLw-","export",[41,50,51],{"class":47}," const",[41,53,55],{"class":54},"sDGpf"," scene",[41,57,58],{"class":47}," =",[41,60,62],{"class":61},"s1ain"," {\n",[41,64,66,69,73],{"class":43,"line":65},2,[41,67,68],{"class":61},"  id: ",[41,70,72],{"class":71},"sP_-H","'my-scene'",[41,74,75],{"class":61},",\n",[41,77,79,83,86,90],{"class":43,"line":78},3,[41,80,82],{"class":81},"sLyBy","  mount",[41,84,85],{"class":61},"(",[41,87,89],{"class":88},"s7B5-","ctx",[41,91,92],{"class":61},") {\n",[41,94,96,99,102,104,107,110,112,115],{"class":43,"line":95},4,[41,97,98],{"class":47},"    const",[41,100,101],{"class":54}," root",[41,103,58],{"class":47},[41,105,106],{"class":61}," document.",[41,108,109],{"class":81},"createElement",[41,111,85],{"class":61},[41,113,114],{"class":71},"'div'",[41,116,117],{"class":61},")\n",[41,119,121,124,127],{"class":43,"line":120},5,[41,122,123],{"class":61},"    root.className ",[41,125,126],{"class":47},"=",[41,128,129],{"class":71}," 'scene my-scene'\n",[41,131,133,136,138],{"class":43,"line":132},6,[41,134,135],{"class":61},"    root.innerHTML ",[41,137,126],{"class":47},[41,139,140],{"class":71}," '\u003Cstyle>.my-scene{background:#000}\u003C\u002Fstyle>\u003Cb>YOUR MARK\u003C\u002Fb>'\n",[41,142,144,147,150],{"class":43,"line":143},7,[41,145,146],{"class":61},"    ctx.layer.",[41,148,149],{"class":81},"append",[41,151,152],{"class":61},"(root)\n",[41,154,156,159],{"class":43,"line":155},8,[41,157,158],{"class":47},"    return",[41,160,161],{"class":61}," { root }\n",[41,163,165],{"class":43,"line":164},9,[41,166,167],{"class":61},"  },\n",[41,169,171,174,176,178],{"class":43,"line":170},10,[41,172,173],{"class":81},"  frame",[41,175,85],{"class":61},[41,177,89],{"class":88},[41,179,92],{"class":61},[41,181,183],{"class":43,"line":182},11,[41,184,186],{"class":185},"sVrTk","    \u002F\u002F motion, keyed to ctx.sync.progress and the soundtrack's amplitude\n",[41,188,190,193,195],{"class":43,"line":189},12,[41,191,192],{"class":61},"    ctx.refs.root.style.opacity ",[41,194,126],{"class":47},[41,196,197],{"class":61}," ctx.sync.progress\n",[41,199,201],{"class":43,"line":200},13,[41,202,167],{"class":61},[41,204,206],{"class":43,"line":205},14,[41,207,208],{"class":61},"}\n",[11,210,211],{},"The real ones are richer — the Signal Lock effect that glitches your\nwordmark into focus is a few hundred lines — but the shape is the same:\nplain code, drawing on a stage, in time with sound. When your render bakes,\nthe scene bakes with it, into the actual MP4.",[18,213,215],{"id":214},"why-code-instead-of-templates","Why code instead of templates",[11,217,218],{},"Because code is the one format that gets better on its own.",[11,220,221,222,226,227,230],{},"A template is a frozen decision. Code is a ",[223,224,225],"em",{},"language"," — and the striking\nthing about the last few years is that models have gotten very, very good at\nlanguages. When motion design is code, your AI assistant can do what a\nmotion designer does: write a draft, ",[26,228,229],{},"look at rendered frames of its own\nwork",", notice the wordmark is drifting or the beat lands late, revise, and\nlook again. That loop — write, preview, critique, revise — runs right inside\nyour ChatGPT or Claude conversation, against your brand pack, until the\nopener feels intentional.",[11,232,233],{},"We watched an assistant that had never seen these tools take a logo and a\none-line brief and produce a working signature opener, end to end, in one\nconversation. Not by picking template #47 — by writing the scene.",[18,235,237],{"id":236},"the-bet-underneath","The bet underneath",[11,239,240,241],{},"Here's the honest version of the bet: ",[26,242,243],{},"models improve every quarter;\ntemplate libraries don't.",[11,245,246],{},"If we shipped five hundred templates today, they'd be stale by spring, and\nthe only fix would be us designing five hundred more. Instead we shipped a\nsmall set of signature effects we're proud of — and a contract that lets any\nsufficiently good model author new ones. Every time the models get better at\ncode, at visual judgment, at taste, your ceiling rises. You didn't upgrade\nanything. Your subscription didn't change. The tool underneath your\nassistant just became a better designer.",[11,248,249],{},"That's the principle we build on across BitterClip: prefer general\nmechanisms that ride the improvement curve over special-cased features that\nfreeze it. Effects-as-code is the most visible example — the same idea runs\nthrough how assistants read transcripts, pick moments, and cut episodes.",[18,251,253],{"id":252},"what-stays-yours","What stays yours",[11,255,256],{},"Here's the part I should be honest about, because I lived it: the fiddling\ndoesn't go away. It moves up a level.",[11,258,259],{},"The signature effects that ship with BitterClip — Signal Lock included —\nwere made in exactly this loop, and it took a long, iterative process to\nget them right. But I never wrote a line of the code. I worked the way a\nproducer works: watch the take, react in plain language — \"I want the\nletters to feel like they're being smeared horizontally, but not\nvertically,\" \"the flash is too eager,\" \"let it settle a beat later\" — and\nlet the model translate taste into code. Less operating a timeline, more being Rick\nRubin on the couch: you don't play the instruments; you know when it's\nright.",[11,261,262],{},"That's the job that's left, and it's the good part. You bring the brand,\nthe references, the \"again, but calmer,\" and the final yes. The assistant\nbrings the hands. And because every scene is inspectable code bound to your\naccount, you can always open the lab, see exactly what it made, and change\nyour mind tomorrow.",[11,264,265],{},"The template wall asked you to settle. This asks you to produce.",[11,267,268],{},[223,269,270],{},"Your show, your taste, better hands every quarter.",[272,273,274],"style",{},"html pre.shiki code .scLw-, html code.shiki .scLw-{--shiki-default:#F47067}html pre.shiki code .sDGpf, html code.shiki .sDGpf{--shiki-default:#6CB6FF}html pre.shiki code .s1ain, html code.shiki .s1ain{--shiki-default:#ADBAC7}html pre.shiki code .sP_-H, html code.shiki .sP_-H{--shiki-default:#96D0FF}html pre.shiki code .sLyBy, html code.shiki .sLyBy{--shiki-default:#DCBDFB}html pre.shiki code .s7B5-, html code.shiki .s7B5-{--shiki-default:#F69D50}html pre.shiki code .sVrTk, html code.shiki .sVrTk{--shiki-default:#768390}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":36,"searchDepth":78,"depth":78,"links":276},[277,278,279,280],{"id":20,"depth":65,"text":21},{"id":214,"depth":65,"text":215},{"id":236,"depth":65,"text":237},{"id":252,"depth":65,"text":253},"2026-07-08","Every effect in BitterClip is real code — which means your AI assistant can write one, look at rendered frames of its own work, and make it better. Why we built motion design that way.","md","The Signal Lock scene as code — a dark editor panel where the frame function carries the direction note 'smeared horizontally — but not vertically'.","\u002Fimages\u002Fblog\u002Feffects-are-code\u002Fscene-code.jpg",{},true,"\u002Fimages\u002Fblog\u002Feffects-are-code\u002Fscene-code-og.jpg","\u002Fblog\u002Fwe-stopped-making-templates",{"title":5,"description":282},"blog\u002Fwe-stopped-making-templates",[293,294,295],"Identity Studio","effects","AI assistants",null,"egsG5YQXjyAlB3titjFsvgB-AdYyYoUsXOJcRu33-xs",{"id":299,"app_origin":300,"extension":301,"mcp_resource_url":302,"meta":303,"og_image_default":304,"pricing_url":305,"signup_url":306,"stem":307,"support_email":308,"__hash__":309},"site\u002F_data\u002Fsite.yml","https:\u002F\u002Fapp.bitterclip.com","yml","https:\u002F\u002Fapp.bitterclip.com\u002Fmcp",{},"\u002Fimages\u002Fbitterclip-og.png","https:\u002F\u002Fbitterclip.com\u002F#pricing","https:\u002F\u002Fapp.bitterclip.com\u002Fsign_up","_data\u002Fsite","hello@bitterclip.com","Tgsbw67aXUlzV7fI_vtqnk0QtrKrpPlvl81_t8jnOlY",1783724674485]