← Back to Livepeer Agent

Token Economy — where the savings actually come from

This page measures orchestration tokens — the LLM cost of deciding, plumbing and re-stating the work around a render. It deliberately does not measure GPU inference, which is billed per pixel or per second and is identical in every configuration. If a page tells you an agent framework made your renders cheaper, it is measuring the wrong thing.

360 trials · 3 configurations · 6 workloads · 3 briefs. Cost units = billed input + 10 × output (output is ~10× input price). Every constant is calibrated against production measured on 2026-08-10 — provenance table at the bottom. Regenerate with npm run bench:skills.

The three configurations

B Baseline — bare LLM + raw provider APIs
hand-orchestrated: you pick the models, you plumb the steps
LA Livepeer Agent
one cached context · unified capability layer · server-side routing, adaptation, fallback
LA+S Livepeer Agent + Skills router
adds a compiled-rules block per turn for better first-try routing

Five places orchestration tokens go

Every token in this bench is booked to exactly one of these terms. That is what makes the result actionable rather than promotional: you can see which term a given workload is dominated by, and what in the implementation removes it.

Floor
The irreducible work — stating the creative intent, and the content the model must emit.
Removed by: Nothing. Both configurations pay this in full.
State re-hydration
Re-pasting brief, style guide, character lock, prior scenes, transcripts and edit-decision lists — because a stateless chat call remembers nothing. Grows O(N²) in scene count and O(duration) in editing.
Removed by: Prompt caching on the static prefix (~90% hit after the first turn) plus server-side project + asset state. The transcript never enters the model context: transcribe / find_moments hold it and return a compact moments list.
Model discovery
Provider documentation pasted into context so the model can be chosen, plus translating the shot into that provider's parameter names.
Removed by: create_media takes an intent, not a model. resolveCapability + the 184-entry capability registry select server-side, so provider docs never enter the context window at all.
Step handoff
Reasoning about what URL, container, dimension or codec step N+1 needs from step N's output.
Removed by: The asset bus and project blob carry artifact URLs between steps; applyCapabilityAdaptation normalizes params before dispatch.
Retry
The marginal cost of doing the above more than once — failed picks, rejected params, broken chains.
Removed by: Per-capability fallback chains re-dispatch server-side. A retried render costs GPU seconds, not LLM tokens.

The saving changes shape with the workload

This is the most useful result on the page. Baseline cost split by term, at a 192-model catalog. Generation work is dominated by model discovery and retry. Long-video editing is dominated by state re-hydration — the transcript. Same product, different mechanism.

WorkloadFloorState re-hydrationModel discoveryStep handoffRetrySaving
7-step generation · 24 scenes12%13%31%6%39%7.8×
19-step long-form · 24 scenes7%7%39%8%38%7.2×
9-step edit · 10 min source5%19%33%5%38%10.0×
9-step edit · 60 min source3%52%4%1%41%45.9×
14-step mixed · 60 min source5%45%8%1%40%17.2×

Workloads

Bars are stacked by cost term, all scaled to the same axis within a section, so the shape of the saving is visible, not just its size.

Video generation — 7-step chain (192-model catalog)

Generate a multi-scene piece from a thin brief. Every scene runs a full key-frame → animate → grade → voice → mix chain. This is the reference generation workload.

The 7 steps, and the capability that runs each on production today
  1. text → image (key frame) flux-dev
  2. image → upscaled image topaz-upscale
  3. image → video (animate) pixverse-i2v
  4. video → color-graded video ffmpeg-colorgrade
  5. text → voice chatterbox-tts
  6. text → music sonilo-t2m · once per project
  7. video + voice + music → mix ffmpeg-mux

Per-scene steps run once per scene; the music score is generated once for the project.

6 scenes
8.3×
451k54k
9 scenes
7.8×
599k76k
12 scenes
7.7×
755k98k
24 scenes
7.8×
1.46M187k
FloorState re-hydrationModel discoveryStep handoffRetry
6 scenes
B
451k
LA
54k
LA+S
54k
9 scenes
B
599k
LA
76k
LA+S
75k
12 scenes
B
755k
LA
98k
LA+S
97k
24 scenes
B
1.46M
LA
187k
LA+S
183k

What this says: Model discovery and retry together account for roughly 70% of the baseline. Both go to zero in the agent path, because create_media receives an intent and the capability layer resolves the model, adapts the params and re-dispatches on failure — all server-side, none of it in the context window.

Long-form video — 19-step chain (192-model catalog)

What a real long-form piece actually ships through: 12 per-scene steps (key frame, character lock, upscale, animate, extend, grade, stabilize, reframe, voice, lip-sync, SFX, mux) plus 7 project-level finishing steps (score, concat, transcribe, subtitles, brand overlay, LUFS mix, export). At 24 scenes that is 295 distinct model and tool invocations.

The 19 steps, and the capability that runs each on production today
  1. text → image (key frame) gpt-image
  2. character-lock edit pass kontext-edit
  3. image → upscaled image topaz-upscale
  4. image → video (animate) pixverse-i2v
  5. shot extend beyond model max flux-3-extend
  6. video → color-graded video ffmpeg-colorgrade
  7. stabilize ffmpeg-stabilize
  8. reframe to delivery aspect ffmpeg-reframe
  9. text → voice (dialogue) chatterbox-tts
  10. lip-sync voice to picture veed-lipsync-v2
  11. video → synced SFX bed mirelo-sfx-v2v
  12. per-scene audio mux ffmpeg-mux
  13. text → music score sonilo-t2m · once per project
  14. concat all scenes ffmpeg-concat · once per project
  15. transcribe for subtitles whisper-word · once per project
  16. burn word-level subtitles ffmpeg-burn-subtitles · once per project
  17. brand overlay / lower third ffmpeg-overlay · once per project
  18. audio mix + LUFS normalize ffmpeg-audio-mix · once per project
  19. export per delivery spec ffmpeg-export · once per project

This is the pipeline the brand-film and luxury-product playbooks in this repo run, expressed in capabilities that are live on production today.

6 scenes
10.1×
961k95k
9 scenes
8.7×
1.20M137k
12 scenes
8.0×
1.44M179k
24 scenes
7.2×
2.49M349k
FloorState re-hydrationModel discoveryStep handoffRetry
6 scenes
B
961k
LA
95k
LA+S
92k
9 scenes
B
1.20M
LA
137k
LA+S
133k
12 scenes
B
1.44M
LA
179k
LA+S
174k
24 scenes
B
2.49M
LA
349k
LA+S
338k

What this says: Note the saving ratio DROPS as scene count rises (10.1× at 6 scenes → 7.2× at 24). That is honest and worth understanding: the baseline's dominant term is model discovery, which amortizes across scenes — you pick the i2v model once and reuse it. The agent's cost, meanwhile, grows linearly with scenes because each scene is a real turn. Longer pipelines widen the gap; more scenes narrow it.

Video editing — 9-step chain, no generation (192-model catalog)

Cut an existing video: transcribe, analyse shots, pick moments, strip silence, trim, reframe vertical, grade, burn word-level captions, export. Nothing is generated. The scale driver here is not scene count — it is source duration, because the artifact the model must reason over is a word-level transcript.

The 9 steps, and the capability that runs each on production today
  1. word-level transcription whisper-word · once per project
  2. shot / subject analysis marlin-video · once per project
  3. moment selection find_moments · once per project
  4. silence / filler cut ffmpeg-silence-cut · once per project
  5. trim to selected moments ffmpeg-trim · once per project
  6. reframe to vertical ffmpeg-reframe · once per project
  7. color grade ffmpeg-colorgrade · once per project
  8. burn word-level captions ffmpeg-burn-subtitles · once per project
  9. export per platform ffmpeg-export · once per project

Every step is project-scoped. A word-level cue serializes to ~34 chars, and speech runs ~150 wpm — so a 60-minute source is ~306,000 chars ≈ 76,500 tokens of transcript, per round that touches it.

3 min source
7.2×
319k44k
10 min source
10.0×
445k44k
30 min source
21.7×
1.35M62k
60 min source
45.9×
4.05M88k
FloorState re-hydrationModel discoveryStep handoffRetry
3 min source
B
319k
LA
44k
LA+S
44k
10 min source
B
445k
LA
44k
LA+S
44k
30 min source
B
1.35M
LA
62k
LA+S
61k
60 min source
B
4.05M
LA
88k
LA+S
87k

What this says: This is where the largest saving in the bench lives, and it comes from a completely different term than generation does. At 60 minutes, state re-hydration alone is 52% of baseline cost: the transcript and edit-decision list get re-pasted on every decision round. Livepeer Agent never puts the transcript in the context window — transcribe and find_moments produce and hold it server-side and return a compact moments list. The saving therefore grows with video length: 7.2× at 3 minutes, 45.9× at 60.

Mixed edit + generation — 14-step chain (192-model catalog)

The most common real request: “here is my footage, cut it down, add B-roll and a voiceover, make it vertical.” Pays the editing chain's duration-driven state cost AND a 5-step generation chain per inserted shot. Insert count scales with source length.

The 14 steps, and the capability that runs each on production today
  1. word-level transcription whisper-word · once per project
  2. shot / subject analysis marlin-video · once per project
  3. moment selection find_moments · once per project
  4. silence / filler cut ffmpeg-silence-cut · once per project
  5. trim to selected moments ffmpeg-trim · once per project
  6. reframe to vertical ffmpeg-reframe · once per project
  7. color grade ffmpeg-colorgrade · once per project
  8. burn word-level captions ffmpeg-burn-subtitles · once per project
  9. export per platform ffmpeg-export · once per project
  10. B-roll insert: text → image flux-dev
  11. B-roll insert: image → video seedance-mini-i2v
  12. match grade to source footage ffmpeg-colorgrade
  13. voiceover for the insert chatterbox-tts
  14. splice insert into the cut ffmpeg-concat

The 9 editing steps run once per project; the 5 insert steps run once per generated insert (≈ one insert per 4 minutes of source).

3 min source
6.3×
563k89k
10 min source
7.7×
690k90k
30 min source
10.7×
1.81M169k
60 min source
17.2×
4.85M283k
FloorState re-hydrationModel discoveryStep handoffRetry
3 min source
B
563k
LA
89k
LA+S
87k
10 min source
B
690k
LA
90k
LA+S
87k
30 min source
B
1.81M
LA
169k
LA+S
165k
60 min source
B
4.85M
LA
283k
LA+S
275k

What this says: Mixed work sits between the two pure cases, and that is the practical point: as a workload shifts from generation toward editing, the saving migrates from model discovery to state re-hydration without shrinking. At 60 minutes, state is 45% of baseline and the saving is 17.2×.

Catalog sensitivity — 192 models today, 300 next

192 is measured, not projected: it is what GET /capabilities returns on production today (157 AI models + 35 deterministic tool containers). 300 is the forward bar for a saturated marketplace. Only the model-discovery term moves — which is exactly the point: the baseline gets worse as the ecosystem grows, and the agent path does not.

Workloadsaving @ 192saving @ 300Δ
7-step generation · 24 scenes7.8×9.2×+1.4
19-step long-form · 24 scenes7.2×8.8×+1.7
9-step edit · 60 min45.9×46.9×+1.1
14-step mixed · 60 min17.2×18.0×+0.9

Reference — authoring only, no pipeline

A thin brief becomes N quality scene prompts, and nothing else. No model selection, no multi-step chain. Isolates the cost of the authoring pipeline (plan → develop → anchor → optimize) that the baseline runs by hand and the agent absorbs into one cached context.

6 scenes
3.2×
109k34k
9 scenes
3.8×
175k46k
12 scenes
4.3×
248k58k
24 scenes
5.8×
617k106k
FloorState re-hydrationModel discoveryStep handoffRetry
6 scenes
B
109k
LA
34k
LA+S
34k
9 scenes
B
175k
LA
46k
LA+S
46k
12 scenes
B
248k
LA
58k
LA+S
58k
24 scenes
B
617k
LA
106k
LA+S
106k

What this says: 3.2× at 6 scenes rising to 5.8× at 24, driven entirely by state re-hydration growing O(N²) — every scene-development pass re-pastes every prior scene. This is the floor of the agent's advantage: it holds even with a single model and no pipeline at all.

Where Livepeer Agent LOSES — and why the number is left in

If you have already written every prompt yourself and want exactly one render each, the agent path costs more, not less:

6 scenes
2.1× worse
16k34k
9 scenes
1.9× worse
25k46k
12 scenes
1.7× worse
34k58k
24 scenes
1.4× worse
77k106k

The cause is concrete and measured: a creative agent session carries a 48,264-char tool surface (the 10 verbs a gen+edit session touches, measured on production). Caching amortizes it across a real session, but a one-shot render with a finished prompt never gets the chance. There is a mitigation in the product — the lean tool profile (STORYBOARD_LEAN_TOOLS, 12 verbs) — and this bench does not credit it. The number stays on the page because a benchmark that only reports wins is not a benchmark. The honest summary: the agent earns its overhead the moment there is more than one step, more than one scene, or more than one model choice to make.

What in production actually causes each term to drop

  • Model discovery → 0. create_media takes an action and an intent, not a model id. resolveCapability plus a 184-entry normalized registry (mean 553 chars per descriptor, vs ~900 for a raw provider doc) select server-side. Provider documentation never enters the context window.
  • Step handoff → 0. The asset bus gives every artifact a stable id and lineage, and the project blob carries output URLs between steps. applyCapabilityAdaptation normalizes each capability's parameter contract before dispatch — the same layer whose absence made raw run_capability run a 42% error rate against create_media's 7.5%.
  • Retry → GPU, not tokens. Every capability carries a fallback chain, and input-requirements guards ensure a fallback matches input modality, not just output kind. A failed render re-dispatches server-side; the model is never asked to diagnose it.
  • State → cache + server-side artifacts. The static prefix is cache-hot at ~90% after the first turn. For editing, the decisive detail is that transcribe and find_moments run ASR and shot analysis server-side and return a compact moments list — the word-level transcript is produced, used, and stored without ever being pasted into a prompt.
  • The Skills router (LA+S) adds ~90 tokens of compiled rules per turn, uncacheable by design because it is re-ranked every turn. On this bench it is essentially a wash — marginally cheaper on multi-step pipelines (better routing means shorter turns, which outweighs the rules block: 3% under LA on 24-scene long-form) and marginally more expensive on single-step reference workloads where there is nothing to compress. Read it as free, not as a token win: its actual payoff is routing accuracy, measured separately.

Calibration provenance

Measured against production on 2026-08-10. The previous revision of this bench used a 3,000-char tool surface and a 40/100-model catalog; both were far below reality, which understated the baseline's architecture cost and overstated its catalog cost.

ConstantValueSource
Live capabilities192 (157 AI + 35 tool)GET /api/capabilities
MCP verbs / full surface187 verbs · 260,451 chars ≈ 65,100 tokPOST /api/mcp tools/list on production
Agent tool surface (cached)48,264 chars ≈ 12,070 tokthe 10 verbs a gen+edit session touches
create_media schema alone16,539 chars ≈ 4,130 toksame tools/list response
Normalized descriptormean 553 chars (median 364)lib/capabilities/registry.json, 184 entries
Raw provider doc900 charsmidpoint of upstream fal / Luma / xAI docs
Per-call param repair rate35%run_capability 42% vs create_media 7.5% error rate
Prompt cache discount90% of input rateAnthropic / Gemini caching
Output price multiple10× inputClaude Sonnet + Gemini Flash
Word-level cue size34 chars @ 150 wpmwhisper-word output shape

What this bench does not claim

  • It is a calibrated estimator, not a live token meter. Structure and constants come from production; the arithmetic is deterministic and offline. It models the baseline generously — selection and plumbing are amortized once per pipeline step rather than charged per scene, and the baseline is charged nothing for carrying a tool surface.
  • GPU inference is out of scope. Renders cost the same either way. Only orchestration tokens are counted.
  • Retry rates are anchored, not observed per-run. The 35% param-repair rate comes from real measured error rates on two production surfaces; the 25% handoff-break rate comes from the class of bugs this repo has actually shipped fixes for. Neither is a per-trial observation.
  • LA+S is a token wash here. Its value is routing accuracy, measured separately, not token reduction. Do not read the small deltas either way as a result.

Sources: token-model.ts · run-sim.ts · bench README · plan §6