Перейти к основному содержанию
Обновление содержания: 2026-06-23

Seedance 2.0 Правила тарификации

В данной статье описана только реальная логика расчётов в текущем коде Crazyrouter, а не абстрактное объяснение официальной ценовой страницы. Применяемые модели:
  • doubao-seedance-2-0
  • doubao-seedance-2-0-fast
Адрес для подключения всегда используйте https://api.crazyrouter.com, базовые настройки см. API Endpoint.

Сначала выводы

  1. Seedance 2.0 и Seedance 2.0 Fast в локальном коде рассчитываются как per_output_token, а не по секундам.
  2. При отправке задачи для этих двух типов задач вычет по умолчанию равен 0.
  3. После успешного выполнения задачи система дополнительно вычитает оплату в зависимости от возвращённого upstream TotalTokens или CompletionTokens.
  4. duration будет записан как характеристика задачи, но не участвует в окончательной формуле расчёта Seedance 2.0.
  5. Поэтому в коде не существует фиксированной “сколько token = сколько секунд” глобальной формулы преобразования.
  6. Если нужно ответить “примерно сколько стоит секунда”, смотреть можно только на 实际输出 tokens / 实际秒数 после завершения задачи, но его нельзя считать фиксированным правилом тарификации.

Правила тарификации в локальном коде

1. Какая тарификация применяется

Правила тарификации Seedance 2.0 определяются наличием видео-входа: Здесь video0 / video1 – это не секунды, а:
  • video0: В запросе отсутствует видео-вход
  • video1: В запросе присутствует видео-вход
Соответствующий код:
  • model/video_billing_seedance.go
  • relay/video_billing_runtime.go

2. Почему при отправке задачи обычно не происходит вычитание

Во время выполнения Seedance 2.0 применяется платформенная тарификация per_output_token. В таких задачах при отправке:
  • Записывается BasePrice
  • Ratio устанавливается как 0
  • Поэтому на этапе отправки результат quota = int(ratio * QuotaPerUnit) всегда 0
Соответствующий код:
  • relay/video_billing_runtime.go
  • relay/relay_task.go
Это объясняет, почему стандартное поведение Seedance 2.0:
  • задача успешно отправляется
  • сразу не вычитается; предварительный вычет – 0
  • окончательный вычет делается после завершения задачи и исходя из действительного количества token

Окончательная формула тарификации

После успешного выполнения задачи система в первую очередь использует settlePerOutputTokenTaskBilling. Для серии Seedance при выборе token код использует приоритет:
  1. taskResult.TotalTokens
  2. если выше отсутствует, то taskResult.CompletionTokens
Соответствующий код:
  • controller/task_video.go
Итоговая формула цены:
Итоговая формула квоты:
В текущем коде:
Соответствующий код:
  • controller/task_video.go
  • common/constants.go

Какую роль секунды играют в коде

1. duration будет распознан и записан

Код анализирует секунды из следующих мест:
  • req.Duration
  • req.Seconds
  • metadata.durationSeconds
  • metadata.duration_seconds
  • metadata.duration
  • metadata.seconds
Соответствующий код:
  • relay/video_billing_runtime.go

2. Но Seedance 2.0 не рассчитывает по секундам

Хотя duration попадёт в характеристики и лог задачи, режим Seedance 2.0 / 2.0 Fast – это per_output_token, соответственно:
  • match.BilledSeconds не участвует в расчёте
  • окончательный вычет зависит только от возвращённых upstream token
Это отличается от видеомоделей Veo, Wan и подобных per_second.

Как сопоставить token и секунды

Тарификация

Нельзя напрямую переводить. То есть, в текущем коде нет такого правила:
Причина проста:
  • Цена Seedance 2.0 не завязана на per_second
  • Код тоже не отображает duration в фиксированные token диапазоны
  • Итоговое значение определяется только фактическим расходом token после завершения задачи

Аналитика

Если просто хотите провести “ретроспективу, сколько token потреблено в среднем за секунду”, то после завершения задачи можно посчитать наблюдаемое значение:
Наоборот:
Но это лишь аналитика, не формула тарификации.

Реальный пример: простое видео 4 секунды, 720p

Ниже пример фактического вызова Seedance 2.0, чтобы показать, как на основе настоящего usage обратным образом получить “сколько стоило каждую секунду задачи”.
Этот пример – 720p, а не 1080p. Актуальная документация Crazyrouter по публичным функциям Seedance 2.0 / 2.0 Fast ограничена 480p, 720p; 1080p НЕ поддерживается публично.

Пример 1: самый простой текст-видео

Характеристики запроса:
  • Модель: doubao-seedance-2-0
  • Вход: только текст, без изображения или видео
  • Разрешение: 720p
  • Длительность: 4s
  • ID задачи: cgt-20260617212928-5s755
  • Upstream фактически вернул: completion_tokens = 87300, total_tokens = 87300
Поскольку нет видео-входа, применяется:
Расчёт:
Таким образом, этот очень простой 4s 720p текст-видео показывает наблюдаемую цену за секунду:

Пример 2: генерация видео по референсу предыдущего видео

Характеристики запроса:
  • Модель: doubao-seedance-2-0
  • Вход: текст + видео от предыдущей задачи, как reference_video
  • Разрешение: 720p
  • Длительность: 4s
  • ID задачи: cgt-20260617214300-rsnsx
  • Upstream фактически вернул: completion_tokens = 173700, total_tokens = 173700
Поскольку запрос содержит видео-вход, применяется:
Расчёт:
Таким образом, для этого 4s 720p видео с референсом наблюдаемая цена за секунду:

Как объяснить это значение клиенту

Можно пояснить так:
Поэтому нельзя изначально предполагать “типичная 1 секунда – это 100 000 tokens”. Для точной оценки клиенту рекомендуем использовать действительный usage.total_tokens либо usage.completion_tokens по факту завершения задачи.

Два шаблона для применения

Пример 1: doubao-seedance-2-0-fast, с видео-входом

Предположим:
  • Применяется doubao-seedance-2-0-fast:video1
  • Upstream возвращает TotalTokens = 1,200,000
  • quantityMultiplier = 1
  • groupRatio = 1
  • discount = 1
Тогда:
Если в этом запросе duration = 12, вы сможете получить только наблюдаемое значение:
Этот 100,000 tokens/s будет справедлив только для данной задачи.

Пример 2: doubao-seedance-2-0, без видео-входа

Предположим:
  • Применяется doubao-seedance-2-0:video0
  • Upstream возвращает CompletionTokens = 800,000
  • quantityMultiplier = 1
  • groupRatio = 1
  • discount = 1
Тогда:
Если при запросе указано duration = 8, возможен лишь просмотр значения:
Нельзя сделать вывод, что “8 секундная задача всегда равна 800 000 tokens”.

Какие поля стоит анализировать

Для проверки тарификации Seedance 2.0 прежде всего смотрите:
  • Есть ли видео-вход в запросе
  • Применённый billing_key
  • Token или quota, возвращённые upstream после завершения задачи: TotalTokens / CompletionTokens
  • groupRatio для данной задачи
  • Скидка модели discount
  • Итоговая task.Quota
Также в логах и snapshot кода фиксируется:
  • billing_mode
  • billing_key
  • billing_total_price
  • billing_output_tokens
  • billing_billed_tokens
  • billing_token_kind
  • billing_settled
Соответствующий код:
  • relay/relay_task.go
  • model/task.go
  • controller/task_video.go

Одно фразовое понимание

Для Seedance 2.0:
  • 秒数 – характеристика запроса
  • token – основание для расчёта
  • quota – это квота внутри платформы, рассчитанная после завершения расчетов token
Правильная последовательность:
А не:
Если в дальнейшем платформа специально введёт SKU с оплатой по секундам для Seedance 2.0, появится стабильное отображение “секунды в цену”. Но на 2026-06-06 локальный код этого ещё не реализует.

Связанные страницы