Seedance 是开源的吗?

OpenRouter:Announcements(RSS)·2026-09-25 08:00·1小时前·OpenRouter
AI 导读

OpenRouter 核查后未发现任何 Seedance 模型的公开权重或模型许可。ByteDance 官方页面、ByteDance-Seed 的 GitHub 与 Hugging Face 组织均无 Seedance 检查点,GitHub 和 Hugging Face 上名为 Seedance 的项目只是 API 客户端或托管服务。

OpenRouter:Announcements(RSS)
42AI 编辑部评分,满分 100

Seedance 是开源的吗?

2026-09-25 08:00· 1小时前· OpenRouter
AI 导读

OpenRouter 核查后未发现任何 Seedance 模型的公开权重或模型许可。ByteDance 官方页面、ByteDance-Seed 的 GitHub 与 Hugging Face 组织均无 Seedance 检查点,GitHub 和 Hugging Face 上名为 Seedance 的项目只是 API 客户端或托管服务。

Is Seedance Open Source?

We found no published weights and no model license for any Seedance model. ByteDance’s Seedance 2.5 launch post and model page describe access through Jimeng AI, Doubao, and the BytePlus ModelArk API, and neither links a checkpoint. The ByteDance-Seed organization on Hugging Face and the ByteDance-Seed organization on GitHub publish other models, and neither includes a Seedance model. None of the five Seedance entries in our catalog carry a Hugging Face ID.

That answers the question the title asks, with one boundary. We checked ByteDance’s first-party pages, both official ByteDance-Seed organizations, and our own catalog. We can’t rule out a release we didn’t find. If ByteDance publishes weights, the checkpoint would appear under one of those organizations, and we’ll update this post.

This post covers what open-weight and open-source mean for a video model, what the repositories named Seedance on GitHub and Hugging Face contain, when a checkpoint is a hard requirement, and how to run a Seedance job through the asynchronous video endpoint on OpenRouter. For output quality, per-clip cost, and how Seedance 2.5 compares with Seedance 2.0, Wan 3.0, and Veo 3.1, read our Seedance 2.5 review.

Summary

  • We found no published checkpoint or model license for Seedance 2.5, Seedance 2.0, Seedance 2.0 Fast, Seedance 2.0 Mini, or Seedance 1.5 Pro in ByteDance’s first-party pages, the ByteDance-Seed organizations on GitHub and Hugging Face, or the OpenRouter catalog.
  • The GitHub and Hugging Face projects named Seedance that we examined are API clients and hosted services. They don’t contain weights and they run nothing on your hardware.
  • Offline use, air-gapped deployment, and fine-tuning on your own footage all require a checkpoint. If you need one, Seedance isn’t a candidate. Kimi K3 and three of the four Qwen 3.8 models publish downloadable weights.
  • On OpenRouter, all five Seedance models run through POST /api/v1/videos. You submit a job, wait for a terminal status by polling or by webhook, then download the file with your API key.

Open-weight versus open-source

Open-weight means the publisher posted the model’s parameters so you can download and run them. Open-source means the license is on the Open Source Initiative approved list and grants use, modification, and redistribution. A model can be open-weight under a custom license without being open-source. Kimi K3 is the example from earlier in this series. Moonshot AI posted the checkpoint on Hugging Face under its own Kimi K3 License, which is not OSI-approved.

Seedance is neither, in the sources we checked. There is no public checkpoint, so there is no artifact for a model license to govern. The only licenses that apply are the terms of service of whichever hosted platform you call, including ours.

Where we looked

We checked four places. Each one is where a public Seedance release would appear if it existed.

ByteDance’s first-party pages. The Seedance 2.5 launch post says the model is rolling out on Jimeng AI and Doubao, with API access through BytePlus ModelArk. The Seedance 2.5 and Seedance 2.0 model pages describe hosted access. None of the three pages links a checkpoint, a repository, or a model license.

The ByteDance-Seed organization on GitHub. The organization has 63 public repositories at the time of writing, including released models such as Seed-Coder, Seed-OSS, BAGEL, and SeedVR2. None is a Seedance repository.

The ByteDance-Seed organization on Hugging Face. The organization has 59 public repositories, again including Seed-Coder, Seed-OSS, BAGEL, and SeedVR2. None is a Seedance model. A Hugging Face search for Seedance with the author set to ByteDance-Seed returns no results.

The OpenRouter catalog. Our model records carry a hugging_face_id field when the publisher has posted a checkpoint. All five Seedance records return null for that field. On its own that tells you only what our catalog links to, so we list it last and don’t treat it as proof of anything beyond our own data.

What the repositories named Seedance contain

A Hugging Face search for Seedance without an author filter does return results. The ones we examined are third-party repositories with names such as Seedance-2-AI-Video-Generator and Seedance-API. The first of those contains two files, a .gitattributes and a README.md, and its README states that the model is hosted exclusively on the maintainer’s platform and that users don’t need to download weights. That is a description of a hosted service, not a model release.

The same pattern applies to GitHub projects named Seedance generator or open-source Seedance, and to ComfyUI nodes that expose Seedance. They call a hosted endpoint. The setup instructions tell you which one. If the first step is to paste an API key, the project is a client for someone else’s server, and nothing runs on your machine. A ComfyUI node that hits an API is a client with a graph UI in front of it.

None of that makes these projects useless. It means they don’t answer the open-source question. They inherit whatever terms, pricing, and data policy the hosted endpoint applies.

When a checkpoint is the requirement

Three deployment patterns require weights you can download, and Seedance doesn’t fit any of them in the sources we checked.

  • Offline or air-gapped inference. If the machine that generates video can’t reach the internet, the model has to be on that machine. There is no Seedance artifact to put there.
  • Fine-tuning on your own footage. Training a model on your own data requires access to its parameters. No public Seedance parameters exist for you to train.
  • Self-hosting for data-residency reasons. Running a model in your own region under your own controls requires the weights. Hosted access, including through us, means the provider processes the request.

If one of these is your requirement, evaluate a model that publishes a checkpoint. In this series, Kimi K3 posts its checkpoint on Hugging Face under a custom license, and three of the four Qwen 3.8 models are downloadable. Neither is a video model. For video models that publish weights, check the hugging_face_id field in the video models list and confirm the license on the linked model card.

If your concern was vendor lock-in rather than local execution, hosted access still gives you one thing. The request body you send to /api/v1/videos is the same for every video model in our catalog, so switching from Seedance to another model is a change to the model string.

The five Seedance models on OpenRouter

We serve five Seedance models, all through the Seed provider. This table lists the parameters our catalog exposes for each one. It comes from /api/v1/videos/models on 2026-09-11.

ModelInput modalitiesDurationsResolutionsFrame imagesAudio output
bytedance/seedance-2.5Text, image, audio, video4 to 30 seconds480p, 720pFirst and last frameYes
bytedance/seedance-2.0Text, image, audio, video4 to 15 seconds480p, 720p, 1080p, 4KFirst and last frameYes
bytedance/seedance-2.0-fastText, image, audio, video4 to 15 seconds480p, 720pFirst and last frameYes
bytedance/seedance-2.0-miniText, image, audio, video4 to 15 seconds480p, 720pFirst and last frameYes
bytedance/seedance-1-5-proText, image4 to 12 seconds480p, 720p, 1080pFirst and last frameYes

Seedance 2.5 is the only one that runs past 15 seconds. Seedance 2.0 is the only one that reaches 4K, and Seedance 2.0 and Seedance 1.5 Pro are the only ones that reach 1080p. Pricing is per video token. The pricing_skus field in the video models list gives each model’s rates, and Seedance 2.5 lists separate rates for jobs with audio, without audio, and with video input. The Seedance 2.5 review works through what a clip costs at each resolution.

How to call Seedance on OpenRouter

Video generation on OpenRouter is asynchronous. You submit a job and get a job ID back immediately. The clip renders on the provider’s side, and you either poll for the result or receive a webhook when the job reaches a terminal state. The same request shape works for every video model in the catalog.

Three stages of an asynchronous video job on OpenRouter. Submit with POST /api/v1/videos and receive 202 Accepted with an id, a polling_url, and status pending. Wait by polling GET /api/v1/videos/{id} while the status is pending or in_progress, or by receiving a callback_url webhook, until the status is completed, failed, cancelled, or expired. Download from GET /api/v1/videos/{id}/content?index=0 with the same Authorization header. A footer notes that submitting starts billable work, that poll and download requests are read-only and safe to retry, and that video jobs are not eligible for Zero Data Retention.

Submit

POST https://openrouter.ai/api/v1/videos takes model and prompt as required fields. Optional fields include duration, resolution, aspect_ratio, frame_images for first and last frame control, input_references for reference images, generate_audio, seed, and callback_url for a webhook. The response is 202 Accepted with the job’s id, its polling_url, and status set to pending.

{
  "id": "abc123",
  "polling_url": "https://openrouter.ai/api/v1/videos/abc123",
  "status": "pending"
}

Submitting starts billable work. If your HTTP client retries failed requests by default, a retry after a timeout or a 5xx can start a second paid job. Turn retries off for the submit call and keep them on for polling, which is read-only.

Wait

Poll GET https://openrouter.ai/api/v1/videos/{id}, which is the polling_url from the submit response, on an interval. The status moves from pending to in_progress and then to one of four terminal values. completed means the file is ready. failed carries an error field. cancelled and expired are the two other terminal states, and the webhook documentation covers all four. If you set callback_url on the request or at the workspace level, we send an HTTPS POST to that URL when the job reaches a terminal state, and you can skip polling. We can deliver the same event more than once, so deduplicate deliveries on the X-OpenRouter-Idempotency-Key header, which has the form <job_id>-<status>.

A completed job looks like this. The unsigned_urls array and the usage block appear only on completion.

{
  "id": "abc123",
  "generation_id": "gen-1234567890-abcdef",
  "polling_url": "https://openrouter.ai/api/v1/videos/abc123",
  "status": "completed",
  "unsigned_urls": [
    "https://openrouter.ai/api/v1/videos/abc123/content?index=0"
  ],
  "usage": {
    "cost": 0.25,
    "is_byok": false
  }
}

Download

The entries in unsigned_urls point at GET https://openrouter.ai/api/v1/videos/{id}/content?index=0. They aren’t pre-signed. Send the same Authorization: Bearer header you used to submit. The file can become downloadable a few seconds after the status reads completed, so retry an error from this route for a bounded window before you treat it as a failure. The download is read-only, so a retry can’t start a second job.

curl "https://openrouter.ai/api/v1/videos/abc123/content?index=0" \
  -H "Authorization: Bearer $OPENROUTER_API_KEY" \
  --output seedance.mp4

A complete run with the TypeScript SDK

This example submits a 20-second Seedance 2.5 clip, polls every 30 seconds, and downloads the result, retrying the download every 5 seconds for up to 2 minutes, whether the failure is an HTTP error or a dropped connection. The SDK maps the REST field names to camelCase, so generate_audio becomes generateAudio and aspect_ratio becomes aspectRatio. The retries option on the submit call disables the SDK’s default retry policy for that one request, so a transient error can’t start a second billable job. Polling keeps the default policy.

import { writeFile } from "node:fs/promises";
import { OpenRouter } from "@openrouter/sdk";

const apiKey = process.env.OPENROUTER_API_KEY;

if (!apiKey) {
  throw new Error("Set OPENROUTER_API_KEY first.");
}

const openRouter = new OpenRouter({ apiKey });

const job = await openRouter.videoGeneration.generate(
  {
    videoGenerationRequest: {
      model: "bytedance/seedance-2.5",
      prompt:
        "A slow dolly shot along a rain-soaked market street at dusk, lanterns reflecting in puddles, realistic motion",
      duration: 20,
      resolution: "720p",
      aspectRatio: "16:9",
      generateAudio: true,
    },
  },
  { retries: { strategy: "none" } },
);

console.log(job.id, job.status);

let current = job;

while (!["completed", "failed", "cancelled", "expired"].includes(current.status)) {
  await new Promise((resolve) => setTimeout(resolve, 30_000));
  current = await openRouter.videoGeneration.getGeneration({ jobId: job.id });
}

if (current.status !== "completed" || !current.unsignedUrls?.[0]) {
  throw new Error(current.error ?? `Video generation ${current.status}.`);
}

async function downloadWithRetry(url: string): Promise<Buffer> {
  const deadline = Date.now() + 120_000;
  let lastError = "no attempt made";

  while (Date.now() < deadline) {
    try {
      const response = await fetch(url, {
        headers: { Authorization: `Bearer ${apiKey}` },
        signal: AbortSignal.timeout(deadline - Date.now()),
      });

      if (response.ok) {
        return Buffer.from(await response.arrayBuffer());
      }

      lastError = `HTTP ${response.status}`;
      await response.body?.cancel();
    } catch (error) {
      lastError = error instanceof Error ? error.message : String(error);
    }

    await new Promise((resolve) => setTimeout(resolve, 5_000));
  }

  throw new Error(`Download failed after retrying for 2 minutes. Last error: ${lastError}`);
}

await writeFile("seedance.mp4", await downloadWithRetry(current.unsignedUrls[0]));
console.log("Saved seedance.mp4", current.usage?.cost);

We compiled this example against @openrouter/sdk with strict TypeScript settings. We didn’t run it against the paid endpoint for this post, so treat the code as a starting point and check the video generation documentation for the current request schema.

Zero Data Retention

Video generation isn’t eligible for Zero Data Retention. The provider has to hold the finished file until you download it, which is incompatible with a no-retention guarantee. If your workspace or your request enforces ZDR, we won’t route video requests. This is a second reason the open-source question matters for some teams. A hosted-only model can’t meet a requirement that no third party retains output, and no Seedance checkpoint exists to run in-house instead.

FAQ

Is Seedance 2.5 open source?

Not in any source we could find. ByteDance’s Seedance 2.5 launch post and model page describe access through Jimeng AI, Doubao, and the BytePlus ModelArk API. They don’t link a checkpoint or a model license. The ByteDance-Seed organizations on GitHub and Hugging Face publish other models but no Seedance model, and none of the five Seedance entries in our catalog carry a Hugging Face ID.

Is Seedance 2.0 open source?

We found no published weights or model license for Seedance 2.0, Seedance 2.0 Fast, or Seedance 2.0 Mini either. ByteDance’s Seedance 2.0 page presents the model as a hosted product, and the official ByteDance-Seed repositories on GitHub and Hugging Face don’t include it.

Can you run Seedance locally?

Not from any artifact we could locate. Running a model on your own hardware requires a checkpoint, and we found none for any Seedance version. The GitHub and Hugging Face projects named Seedance that we examined, such as the Hugging Face repository Seedance-2-AI-Video-Generator, are third-party wrappers that are not published by ByteDance. They call a hosted API and tell you to paste an API key, so they run nothing locally.

What is the difference between open-weight and open-source?

Open-weight means the publisher posted the checkpoint so you can download and run it. Open-source means the license is on the Open Source Initiative approved list and grants use, modification, and redistribution. A model can be open-weight under a custom license without being open-source. Seedance is neither in the sources we checked, because there is no public checkpoint to license.

How do I call Seedance on OpenRouter?

Send a POST request to https://openrouter.ai/api/v1/videos with a Seedance slug such as bytedance/seedance-2.5 in the model field. The response is a job with an id, a polling_url, and status set to pending. Poll the polling_url or receive a webhook until the status is completed, then download the file from the unsigned_urls array with your API key in the Authorization header.

Which Seedance models does OpenRouter offer?

Five. bytedance/seedance-2.5, bytedance/seedance-2.0, bytedance/seedance-2.0-fast, bytedance/seedance-2.0-mini, and bytedance/seedance-1-5-pro. All five are served by the Seed provider through the same asynchronous video endpoint.

References

来源:OpenRouter:Announcements(RSS)· openrouter.ai