# Veo 3.1 | Reference to Video Analyze the style and structure of a video you admire with veo3-1-reference-to-video and replicate its visual language and motion structure in your new videos. ## API Information - **Model Slug:** veo3-1-reference-to-video - **Branded URL:** https://www.eachlabs.ai/google/veo3-1/veo3-1-reference-to-video - **Provider:** Google - **Category:** Reference to Video - **Output Type:** video - **Status:** active - **Version:** 0.0.1 - **Base Cost:** Default: 720p/1080p, Audio On = $3.20 - **Estimated Processing Time:** 100 seconds - **Last Updated:** 2026-08-16 - **Interactive Demo:** https://www.eachlabs.ai/ai-models/veo3-1-reference-to-video ## Pricing - **Charge Type:** dynamic - **Estimated Price (default example):** $3.20 - **Pricing Details:** Default: 720p/1080p, Audio On = $3.20 ### Pricing Rules | Condition | Pricing | | --- | --- | | resolution eq_i "4k" AND generate_audio eq_i "false" | 4k, Audio Off | | resolution eq_i "4k" | 4k, Audio On/default | | generate_audio eq_i "false" | 720p/1080p (default), Audio Off | | Rule 4 | Default: 720p/1080p, Audio On = $3.20 | ## Input Schema | Parameter | Type | Required | Default | Constraints | Description | |-----------|------|----------|---------|-------------|-------------| | image_urls | array | Yes | - | 1–3 | URLs of the reference images to use for consistent subject appearance | | prompt | string | Yes | - | - | The text prompt describing the video you want to generate | | duration | integer | No | 8 | 8 | The duration of the generated video in seconds | | resolution | string | No | 720p | 720p,1080p | Resolution of the generated video | | aspect_ratio | string | No | 16:9 | 16:9 | Aspect ratio of the generated video | | generate_audio | boolean | No | true | - | Whether to generate audio for the video. If false, %33 less credits will be used. | | auto_fix | boolean | No | false | - | Whether to automatically attempt to fix prompts that fail content policy or other validation checks by rewriting them. | ## Example Request ```bash curl -X POST https://api.eachlabs.ai/v1/prediction/ \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "veo3-1-reference-to-video", "input": { "prompt": "The subject sits down into the armchair, then reaches coffee table to pick up the glass matcha mug and brings it to his lips for a calm, relaxed sip", "image_urls": [ "https://storage.googleapis.com/magicpoint/inputs/veo3-1-reference-to-video-input1.jpg", "https://storage.googleapis.com/magicpoint/inputs/veo3-1-reference-to-video-input2.jpg", "https://storage.googleapis.com/magicpoint/inputs/veo3-1-reference-to-video-input3.jpg" ] } }' ``` ## Output Schema Response returned by `GET /v1/prediction/{id}` when the job completes: ```json { "status": "success", "predictionID": "string", "output": "string (URL of generated video)", "metrics": { "predict_time": "number (seconds)" } } ``` ## Polling ```bash curl https://api.eachlabs.ai/v1/prediction/{PREDICTION_ID} \ -H "Authorization: Bearer YOUR_API_KEY" ``` | Status | Meaning | |--------|---------| | `processing` | Still running — poll again | | `success` | Done — read `output` | | `error` | Failed — read `message` / `details` | ## Webhook (alternative to polling) Pass `"webhook_url": "https://your.host/path"` in the create request. Eachlabs POSTs this payload when the job ends: ```json { "exec_id": "prediction-uuid", "status": "succeeded", "output": "https://...", "error": "" } ``` `status` is `"succeeded"` or `"failed"`. `exec_id` equals the `predictionID` from create. Return 2xx within 30 seconds. ## Errors Error body: `{ "status": "error", "message": "...", "details": "..." }` | Code | Meaning | |------|---------| | `400` | Invalid input | | `401` | Missing / invalid `Authorization` bearer token | | `404` | Unknown model or prediction id | | `429` | Rate limit — 100 creates / min, 10 concurrent per key | | `5xx` | Retry with backoff | ## Overview **veo3.1-reference-to-video — Image-to-Video AI Model** Developed by Google as part of the veo3.1 family, **veo3.1-reference-to-video** is an image-to-video AI model that transforms reference images into expressive, cinematic videos while maintaining precise visual consistency. Instead of generating videos from text alone, this model anchors video generation to your source images—whether character photos, product shots, or style references—ensuring that every frame preserves the identity, appearance, and visual characteristics you provide. This solves a critical problem for creators and developers: maintaining character consistency and brand alignment across AI-generated video content without manual frame-by-frame editing. The model uses an advanced diffusion-transformer architecture to understand both your reference images and natural language prompts with high semantic accuracy. You provide up to four reference images showing your character, object, or desired visual style, write a text prompt describing the scene and action you want, and veo3.1-reference-to-video generates a video that stays true to your references while executing your creative direction. This makes it ideal for serialized storytelling, branded content creation, and any workflow where visual consistency across multiple videos is non-negotiable. ## Usage Notes - API Base URL: `https://api.eachlabs.ai/v1` - Authentication: send `Authorization: Bearer YOUR_API_KEY`. Generate a key from the Eachlabs dashboard at https://www.eachlabs.ai/dashboard/api-keys. - File-typed parameters (`*_url`, `image_url`, `video_url`, `audio_url`, etc.) accept publicly-reachable HTTPS URLs only. Upload your asset first (GCS / S3 / your CDN) and pass the resulting URL. Data-URIs and localhost URLs are rejected. - For structured parameters (arrays / objects) send real JSON values, not stringified payloads. - Monetary values are reported in USD; per-token / per-megapixel rates may be billed in micro-cents internally. - Prefer `webhook_url` over polling for long-running predictions — see the Webhook Callback section.