Skip to content
Automation Forge

Pipelines

A capability of AutomationForge.

Editor and commandlet only. Nothing here ships inside a game.

The machinery under PlayableOps: it is what makes a run traceable, and what lets one stop.

Runs for hours. Answers to you.

Everything here composes. Voice a scene, solve its faces, build its montages — one pipeline, wired from any of the Forge sets, handed to an agent or left to run overnight. It prices the work before committing, skips everything already done, and stops exactly where you said a person decides.
PlaceholderVideo: a production pipeline, end to end — authored in the graph, run to a gate, resumed after the reviewAsset A1 — real pipelines, built together and captured: one dense enough to look like production work, one mid-run with counts on the nodes.
The pipeline editor mid-run: what executed, what was skipped, what it cost — and the amber step waiting on a person, not on a machine.

Why you can walk away

Automation is only useful if you can trust it alone.

An unattended run holds to three promises. They belong to the executor itself — every pipeline gets all of them, including the ones you build.

It never spends blind.

The one place automation gets expensive is a loop over a script. So spending is a decision you make once, up front — never a surprise in an invoice.

Principle 10 · Show the cost before the click

Costed before it commits

A run prices itself end to end and shows you the total before anything is spent.

Guarded

A step refuses to overwrite anything the ledger has no record of making. Ninety-five lines already had audio; the run touched none of them.

It never repeats work.

A pipeline you can only run once is a script. These are built to be re-run after every rewrite, and to charge you only for what changed.

Principle 11 · The boring safeguards protect the creative work

Cached

A step whose output already exists is skipped. Thirty-nine dialogues on the first pass; zero on the second.

Stepped and resumable

Run one step or all of them. A run that stopped — gated, failed, or the editor closed — resumes where it stood rather than starting again.

It never decides for you.

Some calls belong to a person: which take survives, whether a clip is good enough, whether to spend at all. The run does not guess — it stops, and asks.

Principle 06 · People own the game

Gated

A gate suspends the run and waits. Anything a machine should not decide on its own is a gate, and the run sits there until a person answers.

Recorded

Every run writes to the ledger — what executed, what was skipped, what it cost, what it produced. The audit trail is a by-product of running at all.

Everything composes

Any pipeline you need, out of the pieces you already have.

A pipeline is an asset: a definition you can edit, duplicate and check into source control, built in a node graph with a palette, a Check button and a Run button. Your surface is exactly as powerful as ours — our own voice-over pipeline runs as a user-editable definition, and the hardcoded version was deleted.

The node library is found, not listed. Every installed Forge set contributes its steps automatically, any BlueprintCallable function on an editor subsystem becomes a node, and so does a Blueprint function library in your own project. Installing a plugin adds its nodes with no edit to ours.

Nothing in the executor needs the editor UI: a run is advanced by calls that a commandlet of your own can make, which is what an overnight batch or a CI job would drive. We do not ship that commandlet yet. Write the definition once; run it from the graph or from an agent today.

Two editors, one definition

A graph for people. The same graph for agents.

An agent can write a pipeline a person then opens and rearranges; a person can build one an agent then runs nightly. Neither editor is the real one — both are thin layers over the same definition, which is why they cannot drift apart.

Nothing is available only through a panel, because an agent cannot read a panel — and a human iterating on a pipeline should not have to.

Why it is built that way →

What people build

Running against a real game, today.

These run in the production of our own title. They are what we needed first — the node library is open to whatever you need next.

A voice-over pass

Harvest the lines out of a dialogue, resolve each speaker to a voice, price the whole thing, generate what is missing, and write the audio and its measured duration back onto the dialogue. Run it again after a rewrite and it touches only the lines that changed.

  1. 01Harvest lines
  2. 02Resolve voices
  3. 03Price
  4. 04Generate
  5. 05Write back

Costing before committing

The same graph, stopped after the pricing step. Useful on its own: it answers what a full pass on an episode would cost, before anything is spent.

  1. 01Harvest lines
  2. 02Resolve voices
  3. 03Price

A motion quality pass

List every clip in a folder, measure self-penetration against a dense physics proxy, and gate on the result — so a batch of cheap takes sorts itself into the ones worth a person’s time and the ones that are not.

  1. 01List clips
  2. 02Measure depth
  3. 03Gate on depth

And every new set extends the same shape: chain approved audio into a face solve and the new pipeline inherits the cache, the gates and the ledger of the old one. That is the point of the layer — a capability added anywhere composes everywhere.

PlaceholderStill: the voice-over pipeline as authored — dense enough to look like the work it doesAsset A1 — the second capture: a real pipeline at rest, full graph in frame.

What a result carries

A result never arrives alone.

The audit trail is a by-product of running at all — not a report somebody remembers to write. Every generated asset keeps what produced it, so a revision starts from the record rather than from memory.

Principle 04 · Intent must survive the output →

What travels with a resultTHE RESULTin the projectwhat was askedthe definition, not the promptwhat went ininputs, references, seedwhich routeprovider, model, settingswhat it costpriced before it committedwho reviewed itand which take they chosewhere it landedthe target the game consumesWithout it, every revision starts from memory.
Kept with the asset rather than in a log beside it, because the intent is part of the asset — and provenance cannot be backfilled once it is lost.

When it stops

A pipeline has to know when it is no longer wanted.

The generated line is a placeholder until the actor records it. The blockout mesh is a placeholder until an artist rebuilds it. Automation that cannot tell the difference overwrites the finished work on its next run — and it will run again, because that is what you built it for.

So a target can graduate. Mark it owned and the pipeline stops treating it as its own: the step still runs, still reports, still prices the rest of the pass — and leaves that one alone. Nothing is deleted, nothing is disabled, and no rule about filenames has to be remembered by the person who did the work.

This is what makes the caching safe rather than merely cheap. A run that skips work already done is only trustworthy if “already done” includes done by a person, better, by hand — so a graduated target reads as current whatever its inputs now hash to. A human edit outranks anything the pipeline would produce, and the estimate says so out loud: a dry run reports what is already current, what it would generate, and what it is leaving alone because somebody owns it, as three separate numbers.

What graduation does not do is forget. The chain of candidates that led to the owned result is kept, because that chain is the brief for whoever makes the next one — the prompt, the take, the settings, the thing that was nearly right. Throwing it away at the moment a person takes over would discard the record exactly when it first becomes useful.

Content that predates the pipeline is the same problem from the other end, and it gets an honest answer rather than a clever one. An existing asset can be adopted: the ledger records that something is there and that we did not make it, which is enough to stop a run overwriting it and deliberately not enough to call it current. It has no real input hash, so the first time somebody genuinely wants it regenerated, the work happens.

And because ownership is recorded rather than inferred, the reverse works too. Hand a target back and the pipeline picks it up again on the next pass, priced and cached like any other. Graduation is a decision you can change, which is the only kind worth offering.

Principle 07 · Automation must stop when ownership begins →

Why gates exist

A pipeline that cannot be stopped where a person has to decide is not automation, it is a machine spending your money in a straight line.