Skip to content

fix(routing): TEMP de-list seedance-i2v-fast — route fast animate to pixverse-i2v (i2v success ~33%→~100%)#685

Merged
seanhanca merged 1 commit into
mainfrom
fix/temp-disable-seedance-i2v-fast-reroute-pixverse
Jul 20, 2026
Merged

fix(routing): TEMP de-list seedance-i2v-fast — route fast animate to pixverse-i2v (i2v success ~33%→~100%)#685
seanhanca merged 1 commit into
mainfrom
fix/temp-disable-seedance-i2v-fast-reroute-pixverse

Conversation

@seanhanca

Copy link
Copy Markdown
Contributor

TL;DR

prefer_fast:true (and the no-tier default) for animate currently routes to seedance-i2v-fast — the single worst i2v capability on the network. This PR temporarily re-routes the fast/default animate tier to the warm pixverse-i2v.

Expected impact: i2v fast-path success ~33% → ~100%, latency ~180s → ~48s.

Evidence (STORYBOARD-MCP-PERF-INVESTIGATION, 2026-07-20)

seedance-i2v-fast has no warm ("live") orchestrator. Live tests + 7-day server telemetry agree:

Capability Success p50 Warm?
seedance-i2v-fast (current fast default) 33% 176–181s (advertised ~30s) ❌ no live orch
pixverse-i2v (this PR's fast default) ~100% ~48s ✅ live
  • All 3 live runs ran 176–181s; 2 of 3 aborted at the ~180s SDK /inference ceiling (This operation was aborted).
  • Aborted jobs are still billed — $0.378 charged on the two failed renders in the perf run.
  • The "live"-flag ↔ success correlation is near-perfect; routing "fast" into a cold cap makes it both slower AND less reliable.

What changed

Single source of truth: lib/sdk/fast-animate.ts exports FAST_ANIMATE_CAP, gated by env SEEDANCE_I2V_FAST_WARM (default falsepixverse-i2v). Every fast/default animate routing site now imports it:

  • lib/mcp-server/tools/create-media.tsACTION_TO_FAST_CAP.animate (prefer_fast) + entity-anchored animate path; prefer_fast schema description updated.
  • lib/mcp-server/tools/director-re-render.tsprefer_fast description updated (routing already inherited from create_media).
  • lib/episodes/animate.ts + lib/episodes/production-manager.tsselectModel("fast").
  • lib/domains/registry.ts — product-marketing animate capability hint.

This is a TEMPORARY mitigation — and it is reversible

  • Non-destructive: seedance-i2v-fast is not deleted. It stays fully reachable via model_override:"seedance-i2v-fast" and the "seedance" keyword.
  • One-flag re-enable: set env SEEDANCE_I2V_FAST_WARM=true (no code change / redeploy) or revert this commit — flips every routing site back at once.
  • Re-enable condition: the seedance i2v family (seedance-i2v-fast / seedance-i2v / seedance-mini-i2v) has a warm orchestrator so it clears well under the ~180s ceiling.

Why a flag over a hard change

The repo already routes via typed capability tables; a single env-gated constant keeps the change minimal + typed, gives ops a redeploy-free revert, and centralizes the re-enable to one line. The real fixes (warm orch + timeout tiering + stop billing aborts) are structural and tracked in separate issues.

Tests

  • Added tests/unit/fast-animate-reroute.test.ts: asserts fast animate no longer selects seedance-i2v-fast and selects pixverse-i2v, and that seedance-i2v-fast stays reachable via model_override.
  • Updated tests/unit/episode-animate.test.ts mirror.
  • Full unit suite green: 3198 passed / 3 skipped. eslint clean on changed files (0 errors).

Related issues (structural fixes a routing change can't solve)

  • ~180s SDK /inference abort ceiling + billing of aborted jobs.
  • Warm-orchestrator provisioning for the seedance i2v family (the re-enable gate for this PR).

Made with Cursor

…ixverse-i2v

seedance-i2v-fast is the prefer_fast/default target for fast animate, but it
has no warm ("live") orchestrator. Live + 7-day telemetry show it runs
176-181s against the ~180s SDK /inference abort ceiling and succeeds only
~33% of the time -- and aborted jobs are still billed ($0.378 on the two
failed renders in the perf run). This makes "fast" both slower AND less
reliable than the warm alternative.

Re-route the fast/default animate tier to the warm pixverse-i2v
(~100% success, ~48s p50). Expected impact: i2v fast-path success
~33% -> ~100%, latency ~180s -> ~48s.

Mechanism (reversible, non-destructive):
- New single source of truth lib/sdk/fast-animate.ts exports FAST_ANIMATE_CAP
  gated by env SEEDANCE_I2V_FAST_WARM (default false -> pixverse-i2v).
- create_media prefer_fast + entity-anchored animate, episode-director
  selectModel ("fast" style), and the product-marketing domain animate hint
  all route through FAST_ANIMATE_CAP.
- seedance-i2v-fast is NOT deleted: still reachable via
  model_override:"seedance-i2v-fast" and the "seedance" keyword.

TO RE-ENABLE once the seedance i2v family has a warm orchestrator: set
SEEDANCE_I2V_FAST_WARM=true (no code change) or revert this commit.

Tests: add tests/unit/fast-animate-reroute.test.ts; update episode-animate
mirror. Full unit suite green (3198 passed).

Evidence: STORYBOARD-MCP-PERF-INVESTIGATION (2026-07-20).
Co-authored-by: Cursor <cursoragent@cursor.com>
@vercel

vercel Bot commented Jul 20, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
storyboard Ready Ready Preview, Comment Jul 20, 2026 11:30pm
storyboard-a3 Ready Ready Preview, Comment Jul 20, 2026 11:30pm
storyboard-creative-stage Ready Ready Preview, Comment Jul 20, 2026 11:30pm

Request Review

@seanhanca

Copy link
Copy Markdown
Contributor Author

Cross-links for the structural fixes this temporary mitigation depends on:

Re-enable when warm capacity exists: set SEEDANCE_I2V_FAST_WARM=true (no redeploy) or revert this PR.

@seanhanca

Copy link
Copy Markdown
Contributor Author

Self-review ✅ — approving for merge

Reviewed the full diff + changed files in-tree, ran the targeted tests, and verified CI.

Correctness of the re-route

  • lib/sdk/fast-animate.ts is the single source of truth: SEEDANCE_I2V_FAST_WARM defaults OFF (process.env... === "true"), so FAST_ANIMATE_CAPpixverse-i2v by default. Flag flips all sites back to seedance-i2v-fast at once. ✔️

All fast/default animate routing sites covered

  • create-media.ts: ACTION_TO_FAST_CAP.animate = FAST_ANIMATE_CAP (prefer_fast) ✔️ + entity-anchored path routed_capability = prefer_fast ? FAST_ANIMATE_CAP : "seedance-i2v" ✔️ + re-exports FAST_ANIMATE_CAP.
  • episodes/animate.ts & episodes/production-manager.ts: selectModel("fast")FAST_ANIMATE_CAP ✔️
  • domains/registry.ts: product-marketing animate hint → FAST_ANIMATE_CAP ✔️
  • director-re-render.ts: description updated; routing inherited from create_media ✔️
  • grep for seedance-i2v-fast shows all remaining refs are intentional (keyword map, fallback chains, registry entry, pricing/SLA/duration config, comments) — no missed routing site.

seedance still reachable

  • Not deleted. Reachable via model_override:"seedance-i2v-fast", the "seedance" keyword map, and as a fallback sibling. Test asserts resolveCapability("seedance-i2v-fast","animate") === "seedance-i2v-fast". ✔️

Tests assert the new behavior

  • tests/unit/fast-animate-reroute.test.ts (new): prefer_fast animate ≠ seedance, === pixverse; FAST_ANIMATE_CAP === pixverse-i2v; generate sibling still flux-schnell (no regression); resolves verbatim; seedance reachable via override.
  • tests/unit/episode-animate.test.ts: updated to expect pixverse-i2v and .not.toBe("seedance-i2v-fast").
  • Ran locally: 9/9 passed. Full CI unit suite green (3198+).

CI: all required checks green (Root unit suite, Bench regression, zero-regression gate, Bun, Node 20, all three Vercel deploys). preview-e2e skipping is expected/unrelated.

No regressions or typos found. Non-destructive + one-flag reversible. LGTM — merging.

@seanhanca
seanhanca merged commit 951eb7e into main Jul 20, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant