Video
Veo 3.1 (First+Last Frame)
Credit-based pricing. Supports image-to-video, audio generation.
Output
video
Aspect ratio
auto, 16:9, 9:16
Resolution
720p, 1080p, 4k
Duration
4s, 6s, 8s
Inputs
- Start image (required)
- Generates audio
Example prompt
Provide a start and end frame — Veo 3.1 crafts a seamless cinematic transition between them with natural motion and optional AI audioTry this prompt →
LLM-ready
API & LLM schema
Exact request contract for this model. Agents can fetch it from /api/v1/models?id=fal-ai/veo3.1/first-last-frame-to-video.
POST
/api/v1/generate18 fields · 4 required| Field | Type | Requirement | Contract |
|---|---|---|---|
model_id | constant | Required | ArtEmotion model identifier. |
extra | object | Optional | Model-specific settings may also be nested here. |
max_credits | number | Optional | Reject before submission if the estimated list price exceeds this cap. · Range: 1–… |
webhook_url | string | Optional | Format: uri |
webhook_secret | string | Optional | Optional model input. |
folder_id | string | Optional | Optional model input. |
prompt | string | Required | Optional model input. |
auto_fix | boolean | Optional | Whether to automatically attempt to fix prompts that fail content policy or other validation checks by rewriting them. · Default: false |
first_frame_url | string | Optional | URL of the first frame of the video. Overrides the uploaded start frame. |
safety_tolerance | number | Optional | The safety tolerance level for content moderation. 1 is the most strict (blocks most content), 6 is the least strict. · Allowed: 1, 2, 3, 4, 5, 6 · Default: 4 |
seed | integer | Optional | The seed for the random number generator. |
negative_prompt | string | Optional | A negative prompt to guide the video generation. |
last_frame_url | string | Optional | URL of the last frame of the video. Overrides the uploaded end frame. |
aspect_ratio | string | Optional | Allowed: auto, 16:9, 9:16 |
resolution | string | Optional | Allowed: 720p, 1080p, 4k |
duration | number | Optional | Allowed: 4, 6, 8 |
image_url | string | Required | Format: uri |
end_image_url | string | Required | Format: uri |
Minimal request example
{
"model_id": "fal-ai/veo3.1/first-last-frame-to-video",
"prompt": "Provide a start and end frame — Veo 3.1 crafts a seamless cinematic transition between them with natural motion and optional AI audio",
"image_url": "https://example.com/image",
"end_image_url": "https://example.com/end_image"
}Raw JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://www.artemotion.ai/api/v1/models?id=fal-ai%2Fveo3.1%2Ffirst-last-frame-to-video",
"title": "Veo 3.1 (First+Last Frame) generation request",
"description": "Request body accepted by POST /api/v1/generate for fal-ai/veo3.1/first-last-frame-to-video.",
"type": "object",
"properties": {
"model_id": {
"type": "string",
"const": "fal-ai/veo3.1/first-last-frame-to-video",
"description": "ArtEmotion model identifier."
},
"extra": {
"type": "object",
"additionalProperties": true,
"description": "Model-specific settings may also be nested here."
},
"max_credits": {
"type": "number",
"minimum": 1,
"description": "Reject before submission if the estimated list price exceeds this cap."
},
"webhook_url": {
"type": "string",
"format": "uri",
"maxLength": 2048
},
"webhook_secret": {
"type": "string",
"maxLength": 512
},
"folder_id": {
"type": "string"
},
"prompt": {
"type": "string"
},
"auto_fix": {
"title": "Auto Fix",
"description": "Whether to automatically attempt to fix prompts that fail content policy or other validation checks by rewriting them.",
"default": false,
"type": "boolean"
},
"first_frame_url": {
"title": "First Frame Url",
"description": "URL of the first frame of the video. Overrides the uploaded start frame.",
"type": "string"
},
"safety_tolerance": {
"title": "Safety Tolerance",
"description": "The safety tolerance level for content moderation. 1 is the most strict (blocks most content), 6 is the least strict.",
"default": "4",
"type": "number",
"enum": [
1,
2,
3,
4,
5,
6
]
},
"seed": {
"title": "Seed",
"description": "The seed for the random number generator.",
"type": "integer"
},
"negative_prompt": {
"title": "Negative Prompt",
"description": "A negative prompt to guide the video generation.",
"type": "string"
},
"last_frame_url": {
"title": "Last Frame Url",
"description": "URL of the last frame of the video. Overrides the uploaded end frame.",
"type": "string"
},
"aspect_ratio": {
"type": "string",
"enum": [
"auto",
"16:9",
"9:16"
]
},
"resolution": {
"type": "string",
"enum": [
"720p",
"1080p",
"4k"
]
},
"duration": {
"type": "number",
"enum": [
4,
6,
8
]
},
"image_url": {
"type": "string",
"format": "uri"
},
"end_image_url": {
"type": "string",
"format": "uri"
}
},
"required": [
"model_id",
"prompt",
"image_url",
"end_image_url"
],
"additionalProperties": false
}FAQ
How much does Veo 3.1 (First+Last Frame) cost on ArtEmotion?
Credit-based pricing. You pay in ArtEmotion credits — every plan and top-up converts USD to credits at a fixed rate.
Do I get my credits back if Veo 3.1 (First+Last Frame) fails?
Yes — failed generations are never charged. The credits are released back to your balance automatically.
Can I call Veo 3.1 (First+Last Frame) from the API?
Yes. Use POST /api/v1/generate with model_id: "fal-ai/veo3.1/first-last-frame-to-video". See the API reference for the full schema.
Where are my generations stored?
Every output is saved to your personal Library. You can export or delete everything any time from Privacy & deletion.
Ready to generate with Veo 3.1 (First+Last Frame)?
Start now →No commitment. New accounts get 50 free credits on signup. See pricing.