Workflow · image-to-video

Animate a reference image without losing control.

Prepare the reference, describe motion, and inspect the cost and acceptance criteria. The task contract is inspectable, not executable.

Use with Agent
VideooutputAsynclifecycleUnknownattempt estimateRead-onlyruntime disabled

1 · Prepare

Inputs and safe defaults

reference_imageRequired
Default: not published
A user-supplied image the user is authorized to process.
Allowed: not published. semantic input
motion_promptRequired
Default: not published
Plain-language instructions describing subject motion, camera motion, and constraints.
Allowed: not published. semantic input
aspect_ratioOptional
Default: not published
Output aspect ratio; supported values must come from the verified runtime contract.
Allowed: not published. runtime evidence incomplete
duration_secondsOptional
Default: not published
Requested duration; supported values and billing effects must come from the verified runtime contract.
Allowed: not published. runtime evidence incomplete · cost-sensitive
audioOptional
Default: not published
Optional audio behavior; availability and billing effects must come from the verified runtime contract.
Allowed: not published. runtime evidence incomplete · cost-sensitive

Bring one image you are authorized to process. Defaults and allowed values remain unpublished where capability evidence is incomplete.

2 · Match the executor

Inspect the prospective executor path

The locked contract targets image_to_video_submit at /v1/video/generations. That route is still served_legacy_task_first_not_active, so this is not a usage instruction or availability claim.

Candidate executor

  • doubao-seedance-2-5-260628 — routing-stable fixture candidate; capability and availability remain incomplete.

Canonical field map

  • reference_imageparameters.reference_images[first_frame]
  • motion_promptparameters.motion_prompt
  • aspect_ratioparameters.aspect_ratio
  • duration_secondsparameters.duration_seconds
  • audioparameters.audio

Workflow JSON · JSON Schema · Agent Recipe

3 · Pre-flight

Price and privacy preflight

No dollar estimate is published. Duration and audio may affect cost, but Quote is not registered and a live pricing snapshot is absent. Source-image transfer must wait until all privacy fields are resolved.

Cost

Attempt estimate: unknown
Failure charge state: unknown
Accepted-result cost: unavailable

Processing & retention

Region: unknown
Retention: unknown
Deletion: unknown

Use & output

Training use: unknown
Commercial use: unknown
Watermark: unknown

4 · Recover & accept

Recover safely and accept a result

Resume the same asynchronous task before considering another billable submission. Automatic provider fallback is disabled, and unknown charge state is a hard stop.

Ask before

  • price_change
  • provider_change
  • privacy_change
  • new_billable_submission

Acceptance checks

  • The task reaches an explicit succeeded terminal state.
  • The returned artifact is downloadable and has a readable video container.
  • Any requested duration, aspect ratio, or audio setting is checked only when the verified runtime contract exposes that field.

5. What still blocks activation

The contract package is pinned to task-first.v1.0.0 at Dash merge a5d2b80bf0b498c60b8764aca18449e663a496f1. Pinning prevents silent drift; it does not activate runtime behavior.

  • aspect_ratio
  • audio
  • resolution
  • quote
  • idempotency
  • safe_task_response

Capability profile 2026-09-04.1 is routing_verified_capability_incomplete. Contract semantic digest: 023c0ef7992c7e959a04ceac9bf0fc6edd4f962212b1b7efdd4dea332b98fe7c.

Read-only contract inspection

These examples fetch the published definition and stop because runtime binding is not verified. They do not upload media, use an API key, quote a price, or create a billable task.

curl

curl --fail --silent --show-error 'https://chinaapi.ai/data/workflows/image-to-video.json'

Python

import json
import urllib.request

with urllib.request.urlopen('https://chinaapi.ai/data/workflows/image-to-video.json') as response:
    workflow = json.load(response)

assert workflow['schema_version'] == 'chinaapi.workflow.v1'
if workflow['runtime_binding']['status'] != 'verified':
    raise SystemExit(workflow['runtime_binding']['blocking_reason'])

JavaScript

const response = await fetch("https://chinaapi.ai/data/workflows/image-to-video.json");
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const workflow = await response.json();
if (workflow.runtime_binding.status !== 'verified') {
  throw new Error(workflow.runtime_binding.blocking_reason);
}