-
-
Notifications
You must be signed in to change notification settings - Fork 295
feat(ai-byteplus): add first-class Seedance 2.5 support #1060
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| --- | ||
| '@tanstack/ai-byteplus': patch | ||
| --- | ||
|
|
||
| Add first-class Seedance 2.5 support (`dreamina-seedance-2-5-260628`). | ||
|
|
||
| The model is fully open on ModelArk with documented capabilities: 4–30s | ||
| duration (or `-1`), 480p/720p only, multimodal reference media including | ||
| audio-only input, first-and-last-frame mode, `priority`, `generate_audio`, and | ||
| `output_format` (`mp4` | `mov`). The video adapter, typed model tables, unit | ||
| tests, docs, and Seedance Studio example catalog all treat it as a known | ||
| model rather than an escape-hatch string. | ||
|
Comment on lines
+7
to
+12
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
rg -n -C 3 \
'dreamina-seedance-2-5-260628|verified live|from ModelArk docs' \
.changeset/seedance-2-5.md \
packages/ai-byteplus/README.md \
examples/ts-react-media/src/lib/seedance.tsRepository: TanStack/ai Length of output: 2416 🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
printf '--- files ---\n'
git ls-files | rg -n '(^|/)(\.changeset/seedance-2-5\.md|README\.md|byteplus\.md|seedance\.ts)$' || true
printf '\n--- .changeset/seedance-2-5.md ---\n'
cat -n .changeset/seedance-2-5.md
printf '\n--- packages/ai-byteplus/README.md 150-188 ---\n'
sed -n '150,188p' packages/ai-byteplus/README.md | nl -ba -v150
printf '\n--- docs/adapters/byteplus.md around seedance support/activation ---\n'
rg -n -C 4 'Seedance 2\.5|seedance-2-5-260628|activation|account|live verification|from ModelArk|ModelArk' docs/adapters/byteplus.md packages/ai-byteplus/README.md examples/ts-react-media/src/lib/seedance.ts .changeset/seedance-2-5.md
printf '\n--- examples/ts-react-media/src/lib/seedance.ts 45-75 ---\n'
sed -n '45,75p' examples/ts-react-media/src/lib/seedance.ts | nl -ba -v45Repository: TanStack/ai Length of output: 240 🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
printf '%s\n' '--- relevant file matches ---'
git ls-files | rg '(^|/)(\.changeset/seedance-2-5\.md|README\.md|byteplus\.md|seedance\.ts)$' || true
printf '%s\n' '--- .changeset/seedance-2-5.md ---'
cat -n .changeset/seedance-2-5.md
printf '%s\n' '--- packages/ai-byteplus/README.md 150-188 ---'
sed -n '150,188p' packages/ai-byteplus/README.md | nl -ba -v150
printf '%s\n' '--- docs/adapters/byteplus.md model/support mentions ---'
rg -n -C 4 'Seedance 2\.5|seedance-2-5-260628|activation|account|live verification|from ModelArk|ModelArk' docs/adapters/byteplus.md packages/ai-byteplus/README.md examples/ts-react-media/src/lib/seedance.ts .changeset/seedance-2-5.md || true
printf '%s\n' '--- examples/ts-react-media/src/lib/seedance.ts 45-75 ---'
sed -n '45,75p' examples/ts-react-media/src/lib/seedance.ts | nl -ba -v45Repository: TanStack/ai Length of output: 3168 🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
echo '--- packages/ai-byteplus/README.md 150-188 ---'
sed -n '150,188p' packages/ai-byteplus/README.md
echo '--- docs/adapters/byteplus.md 320-350 ---'
sed -n '320,350p' docs/adapters/byteplus.md
echo '--- Seedance 2.5 mentions ---'
rg -n -C 4 'Seedance 2\.5|seedance-2-5-260628|activation|account|live verification|from ModelArk|ModelArk' docs/adapters/byteplus.md packages/ai-byteplus/README.md examples/ts-react-media/src/lib/seedance.ts .changeset/seedance-2-5.md || true
echo '--- examples/ts-react-media/src/lib/seedance.ts 1-90 ---'
sed -n '1,90p' examples/ts-react-media/src/lib/seedance.tsRepository: TanStack/ai Length of output: 24250 Align the Seedance 2.5 availability wording with the account-activation requirements.
📍 Affects 2 files
🤖 Prompt for AI Agents |
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -22,20 +22,21 @@ import type { | |
| export interface SeedanceExtras { | ||
| /** | ||
| * `generate_audio` — accepted by every model at the validation layer, but | ||
| * only the Seedance 2.0 family and 1.5-pro actually produce an audio track. | ||
| * only Seedance 2.5, the 2.0 family and 1.5-pro actually produce an audio | ||
| * track. | ||
| */ | ||
| generateAudio: boolean | ||
| /** `camera_fixed` — Seedance 1.x only; the 2.0 family rejects it. */ | ||
| /** `camera_fixed` — Seedance 1.x only; the 2.x family rejects it. */ | ||
| cameraFixed: boolean | ||
| /** `service_tier: 'flex'` — Seedance 1.x only (no offline tier on 2.0). */ | ||
| /** `service_tier: 'flex'` — Seedance 1.x only (no offline tier on 2.x). */ | ||
| serviceTier: boolean | ||
| /** `frames` — Seedance 1.0-pro and 1.0-pro-fast only. */ | ||
| frames: boolean | ||
| /** `draft` — Seedance 1.5-pro only. */ | ||
| draft: boolean | ||
| /** `priority` (0-9) — Seedance 2.0 family only. */ | ||
| /** `priority` (0-9) — Seedance 2.5 and the 2.0 family. */ | ||
| priority: boolean | ||
| /** `duration: -1` (model picks the length) — Seedance 2.0 and 1.5-pro. */ | ||
| /** `duration: -1` (model picks the length) — Seedance 2.5, 2.0 and 1.5-pro. */ | ||
| autoDuration: boolean | ||
| } | ||
|
|
||
|
|
@@ -50,16 +51,30 @@ export interface SeedanceModelEntry { | |
| type AssertNever<T extends never> = T | ||
|
|
||
| /** | ||
| * The six Seedance models, with the option applicability probed live against | ||
| * Ark on 2026-07-31 and documented on `BytePlusVideoProviderOptions`. Ark 400s | ||
| * on an inapplicable field rather than ignoring it, so these flags decide what | ||
| * the studio is allowed to send — not just what it renders. | ||
| * The Seedance models, with option applicability from | ||
| * `BytePlusVideoProviderOptions` (2.0/1.x live-probed; 2.5 from ModelArk | ||
| * docs). Ark 400s on an inapplicable field rather than ignoring it, so these | ||
| * flags decide what the studio is allowed to send — not just what it renders. | ||
| */ | ||
| export const SEEDANCE_MODELS = [ | ||
| { | ||
| id: 'dreamina-seedance-2-5-260628', | ||
| name: 'Seedance 2.5', | ||
| blurb: 'Current multimodal flagship — up to 30s, audio-only references', | ||
| extras: { | ||
|
Comment on lines
+61
to
+64
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win Keep the catalog claim aligned with the Studio. The new blurb says that Seedance 2.5 supports audio-only references. 🤖 Prompt for AI Agents |
||
| generateAudio: true, | ||
| cameraFixed: false, | ||
| serviceTier: false, | ||
| frames: false, | ||
| draft: false, | ||
| priority: true, | ||
| autoDuration: true, | ||
| }, | ||
|
Comment on lines
+70
to
+72
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win Update the auto-duration hint for Seedance 2.5.
Proposed hint update- hint="Sends duration: -1 (Seedance 2.0 and 1.5-pro only)"
+ hint="Sends duration: -1 (Seedance 2.5, 2.0 and 1.5-pro)"🤖 Prompt for AI Agents |
||
| }, | ||
| { | ||
| id: 'dreamina-seedance-2-0-260128', | ||
| name: 'Seedance 2.0', | ||
| blurb: 'Flagship — the only Seedance model with a 4k tier', | ||
| blurb: '2.0 flagship — the only Seedance model with a 4k tier', | ||
| extras: { | ||
| generateAudio: true, | ||
| cameraFixed: false, | ||
|
|
@@ -143,10 +158,10 @@ export const SEEDANCE_MODELS = [ | |
| ] as const satisfies ReadonlyArray<SeedanceModelEntry> | ||
|
|
||
| /** | ||
| * Compile-time link between this catalog and the package's model list: a | ||
| * seventh model shipping in `@tanstack/ai-byteplus` fails the example's build | ||
| * here — naming the id it is missing — instead of silently going absent from | ||
| * the picker with no capability copy or option policy. | ||
| * Compile-time link between this catalog and the package's model list: a new | ||
| * model shipping in `@tanstack/ai-byteplus` fails the example's build here — | ||
| * naming the id it is missing — instead of silently going absent from the | ||
| * picker with no capability copy or option policy. | ||
| */ | ||
| export type SeedanceCatalogCoversEveryModel = AssertNever< | ||
| Exclude<BytePlusVideoModel, (typeof SEEDANCE_MODELS)[number]['id']> | ||
|
|
@@ -182,14 +197,11 @@ export interface SeedanceCapability { | |
| } | ||
|
|
||
| /** | ||
| * Placeholder for the advanced custom-id field: the real Seedance 2.5 id. | ||
| * | ||
| * The June date suffix is the whole reason it needs typing out — guessing ids | ||
| * around the 2026-07-31 announcement never landed on it. The id is reachable | ||
| * but activation-gated: an account that has not enabled it in the Ark Console | ||
| * gets 404 `ModelNotOpen`. | ||
| * Placeholder for the advanced custom-id field when trying an id this package | ||
| * has not catalogued yet. Known models (including Seedance 2.5) live in the | ||
| * picker above. | ||
| */ | ||
| export const SEEDANCE_CUSTOM_MODEL_PLACEHOLDER = 'dreamina-seedance-2-5-260628' | ||
| export const SEEDANCE_CUSTOM_MODEL_PLACEHOLDER = 'dreamina-seedance-…-yymmdd' | ||
|
|
||
| /** | ||
| * Option applicability for an id the package has no table for: everything on. | ||
|
|
@@ -234,7 +246,7 @@ export interface SeedanceJobOptions { | |
| * unknown model's template shape before handing the values to Ark. | ||
| */ | ||
| size?: string | ||
| /** Whole seconds, or `-1` to let the model choose (2.0 / 1.5-pro only). */ | ||
| /** Whole seconds, or `-1` to let the model choose (2.5 / 2.0 / 1.5-pro). */ | ||
| duration?: number | ||
| /** Frame count instead of seconds; wins over `duration` server-side. */ | ||
| frames?: number | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Use a
minorchangeset for this public type-shape change.Adding
dreamina-seedance-2-5-260628to exported model unions and mapped capability types can make exhaustive consumer code fail to type-check. This is a public type-shape change, not only a bug fix. Changepatchtominor.Proposed changeset version
Based on learnings, this pre-1.0 repository uses a
minorbump for breaking or public type-shape changes.📝 Committable suggestion
🤖 Prompt for AI Agents
Source: Learnings