Attempt estimate: unknown
Failure charge state: unknown
Accepted-result cost: unavailable
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.
1 · Prepare
Inputs and safe defaults
reference_imageRequiredDefault: not publishedA user-supplied image the user is authorized to process.
Allowed: not published. semantic input
motion_promptRequiredDefault: not publishedPlain-language instructions describing subject motion, camera motion, and constraints.
Allowed: not published. semantic input
aspect_ratioOptionalDefault: not publishedOutput aspect ratio; supported values must come from the verified runtime contract.
Allowed: not published. runtime evidence incomplete
duration_secondsOptionalDefault: not publishedRequested duration; supported values and billing effects must come from the verified runtime contract.
Allowed: not published. runtime evidence incomplete · cost-sensitive
audioOptionalDefault: not publishedOptional 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_image→parameters.reference_images[first_frame]motion_prompt→parameters.motion_promptaspect_ratio→parameters.aspect_ratioduration_seconds→parameters.duration_secondsaudio→parameters.audio
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.
Region: unknown
Retention: unknown
Deletion: unknown
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_changeprovider_changeprivacy_changenew_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_ratioaudioresolutionquoteidempotencysafe_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);
}
