01 commander where the work lives

Nothing lives on
anyone’s laptop.

Commander — one campaign, three formats, the values on the right.

Commander showing an Audi e-tron GT campaign: the ad formats down the left, the rendered banner in the middle, and the vehicle and offer values on the right.
account the dealer, or the maker campaign folder one campaign creative set the list of blanks creative one car’s answers revision the design, dated

Every delivered film traces back to one exact revision.

02 commander where the cars come in

A car arrives as a row of data.

How the cars arrive.

a stock feed a table we host a spreadsheet collectors run on a schedule one standard shape for a car, whoever sent it the blanks fill themselves in model, price, photo, offer

Nobody retypes a price. The feed changes, the films follow.

03 studio one design, every version

A designer builds it once.

Studio — a thirty-second film, open in a browser tab.

The Studio editor: project assets on the left, a thirty-second advert on the canvas, transform properties on the right, and an animation curve across the bottom.
One design. Every version the data asks for. {{photo}} {{model}} {{price}} and ten thousand more

The scenes are named, so the machine knows what each part is for.

intro offer packshot outro

04 studio the join

No file ever changes hands.

One sign-in. The designer never logs in twice.

COMMANDER holds the creative and every revision STUDIO a browser tab, nothing to install opens on one creative saves to the same record export, then import there is no step here

And if a designer adds a new blank, the form the campaign manager fills in grows to match.

05 under the surface the rest of this talk

That was the tip of the iceberg.

Everything in the last four slides.

The surface. About a tenth shows. the rest of this talk the editor a browser tab drawing engine used everywhere citra the image engine asset store pictures, video render by the thousand video encoding into a film file file readers designers’ files colour maths done in real light
395,000lines of code, all ours
1drawing engine, used everywhere
0third-party licences in the render path

06 why not just buy one the sealed engine

Nobody will sell you
the engine.

The software this work is normally done in.

the interface the timeline the engine sealed a browser tab nothing to install a render farm films by the thousand a desktop app native speed, same record no route out to any of them

Designed in the nineties, for one artist at one workstation.
And it only ever renders on that one machine, one film at a time.

07 so we wrote one citra, the engine

We wrote ours.

A sunset over a beach: the ordinary picture.
The picture
The gain map from the same file: a grey layer describing how much extra light each part of the scene really had.
The light it also carries
citracorecoloureffectsfiltersoperationsfile formatstextvectoranalysisgeneratorscontent-aware resizemipmapsgpuutilitiescommand linebrowser buildserver buildpythongo20 parts, 154,000 lines, all ours

08 the promise that sells one engine

The preview is the film.

ONE CREATIVE same engine same engine IN COMMANDER the thumbnail the manager sees IN THE BROWSER TAB the live preview the designer works on ON THE RENDER SERVICE the delivered film the customer’s file compared pixel by pixel on every build if the three ever drift apart, the build fails and nobody ships

09 what ownership buys scale

The ten-thousandth film costs nothing extra.

Ten thousand films from one design.

RENTING 10,000 charges tripped OWNING 0 charges tripped
3.6×faster, by hand. 0.38s to 0.1s a frame.
no GPUneeded. Ordinary computers are cheap, and rentable by the thousand.
1.5×the browser tax. The Rust desktop app takes it back.

You pay for ordinary computer time, and that is all. Same design, same feed, same afternoon.

10 ai built, not yet switched on

It writes a project, not a movie.

The usual way.

a prompt a movie and that is all you get

Ours.

a prompt a Studio project the same engine a film

Still editable. Still on brand. Still priced from the feed.

Planned. Dashed means not built yet.

our own back catalogue as the reference pull a photograph apart shape, colour, depth relight it after the shoot

Every design our designers have ever made is stored in that same format.

11 take this with you the pitch

So here is what you can promise.

What the designer approves is exactly what the customer receives.

one engine in all three places, checked against itself every build

Nothing to install, and nothing to lose. It is a browser tab onto the real record.

in the browser or the desktop app, the same record either way

The thousandth film costs the same as the second.

no licence meter, and no graphics card, anywhere in the path

If it does not do that yet, that is a decision, not a limit.

395,000 lines of it, and we own every one

12 for the record the stack, today

What it is actually built from.

Commander

the record, the data and the approvals

  • Next.js 16 + React 19
  • TypeScript, Tailwind 4
  • PostgreSQL + Drizzle
  • Clerk, multi-organisation
  • Salesforce for accounts
  • feed readers: XML, CSV, Excel
  • ElevenLabs for voiceover
  • and it draws with citra

Studio

the editor and the render service

  • React 19 + Vite, in a tab
  • the same UI native, via Tauri
  • our own fork of Google’s Skia
  • Node render service + queue
  • FFmpeg for the video file
  • readers for designers’ own files
  • the renderer, ported to Rust
  • pixel-diff tests, every build
  • and it draws with citra

citra

the engine. ours, from scratch

  • Rust, 20 parts, 154k lines
  • colour and light done properly
  • hand-written CPU maths
  • builds for the browser
  • builds for the server
  • speaks Python and Go too
  • GPU support, not yet needed
  • drawn in both of the above
the short version:three productsone engineno licence in the render pathno graphics card requiredbrowser, server and desktop

Arrow keys, or scroll