<!-- GENERATED BY scripts/gen_workflows.py; DO NOT EDIT -->
# Turn an image into a short video

> Workflow v1 contract consumer. Version-locked, English-only, noindex, and not executable.

- Canonical: https://chinaapi.ai/workflows/image-to-video/
- Workflow JSON: https://chinaapi.ai/data/workflows/image-to-video.json
- JSON Schema: https://chinaapi.ai/data/workflows/workflow.v1.schema.json
- Agent Recipe: https://chinaapi.ai/agent-recipes/image-to-video/SKILL.md
- Updated: 2026-09-04
- Dash contract: `task-first.v1.0.0`
- Dash merge: `a5d2b80bf0b498c60b8764aca18449e663a496f1`
- Semantic digest: `023c0ef7992c7e959a04ceac9bf0fc6edd4f962212b1b7efdd4dea332b98fe7c`

Prepare one authorized reference image and a motion description, then inspect the locked task contract before runtime, price, availability, and privacy evidence is complete.

## Runtime state

The Dash contract is version-locked, but Intent and Quote are not registered and the legacy video route does not yet provide task-first validation, idempotency, safe task responses, live pricing, or privacy evidence.

The target operation, prospective field map, and fixture candidate are published for inspection. They are not an executable request, recommendation, price, availability claim, privacy claim, or continuation URL.

## Inputs

- `reference_image` — required; A user-supplied image the user is authorized to process. Evidence: `semantic_stable`.
- `motion_prompt` — required; Plain-language instructions describing subject motion, camera motion, and constraints. Evidence: `semantic_stable`.
- `aspect_ratio` — optional; Output aspect ratio; supported values must come from the verified runtime contract. Evidence: `runtime_contract_required`.
- `duration_seconds` — optional; Requested duration; supported values and billing effects must come from the verified runtime contract. Evidence: `runtime_contract_required`.
- `audio` — optional; Optional audio behavior; availability and billing effects must come from the verified runtime contract. Evidence: `runtime_contract_required`.

## Executor query

- Input modalities: `image, text`
- Output modalities: `video`
- Required capabilities: `image-to-video, async-task`
- Selection: Resolve model IDs, availability, price, privacy, and request fields from a verified runtime contract; never infer them from marketing copy.

### Prospective target

- Operation: `image_to_video_submit`
- Route: `/v1/video/generations`
- Status: `served_legacy_task_first_not_active`

### Candidate executor

- `doubao-seedance-2-5-260628` — routing-stable fixture candidate only.

### Canonical field map

- `reference_image` → `parameters.reference_images[first_frame]`
- `motion_prompt` → `parameters.motion_prompt`
- `aspect_ratio` → `parameters.aspect_ratio`
- `duration_seconds` → `parameters.duration_seconds`
- `audio` → `parameters.audio`

## Price

No attempt price or accepted-result cost is published. Quote is not registered; `price_source` and `availability_source` remain `null`.

## Privacy preflight

All policy values are `unknown`. Resolve processing region, retention, training use, deletion, commercial use, and watermark behavior before transferring the source image.

## Recovery

Resume the same task first. Do not fall back automatically. Stop when charge state is unknown. Ask before a price, provider, privacy, or billable-submission change.

## 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.

## Known activation gaps

- `aspect_ratio`
- `audio`
- `resolution`
- `quote`
- `idempotency`
- `safe_task_response`

## Read-only inspection examples

These examples fetch the public contract and do not create a task.

```sh
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);
}
```
