ModelSite
Video GenerationHappyHorse

HappyHorse Image-to-Video

POST /api/v1/services/aigc/video-generation/video-synthesis — generate video from a first-frame image

The HappyHorse image-to-video model animates a first-frame image, steered by an optional text description.

Models

ModelNotes
happyhorse-1.1-i2vGeneration 1.1
happyhorse-1.0-i2vGeneration 1.0
happyhorse-1.0-i2v-20260618Generation 1.0, 20260618 snapshot

Create a job

POST/api/v1/services/aigc/video-generation/video-synthesis
curl https://api.modelsite.ai/api/v1/services/aigc/video-generation/video-synthesis \
  -H "Authorization: Bearer $MODELSITE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "happyhorse-1.1-i2v",
    "input": {
      "prompt": "A cat running across a meadow",
      "media": [
        { "type": "first_frame", "url": "https://example.com/cat.png" }
      ]
    },
    "parameters": { "resolution": "720P", "duration": 5 }
  }'

Request body

FieldTypeNotes
modelstring (required)See the table above
input.promptstring (optional)Describes the intended motion. CJK counts as 2, everything else as 1, budget 5000
input.mediaarray (required)Exactly one first_frame entry: {"type": "first_frame", "url": "..."}. URL or data: Base64 both work
parametersobject (optional)Generation knobs, below

parameters

ParameterTypeNotes
resolutionstring480P / 720P / 1080P (default). Sellable tiers follow the price configuration. Output aspect ratio follows the first frame
durationinteger[3, 15], default 5
watermarkbooleanDefaults to true ("Happy Horse" stamp); pass false explicitly to opt out
seedinteger[0, 2147483647]
negative_promptstringNegative prompt

Image-to-video does not accept parameters.ratio — the output aspect ratio follows the first frame, and sending one is an InvalidParameter error.

First-frame requirements: JPEG / JPG / PNG / WEBP, both sides ≥300px, aspect ratio 1:2.5–2.5:1, ≤20MB.

Polling and result

GET/api/v1/tasks/{task_id}
curl "https://api.modelsite.ai/api/v1/tasks/$TASK_ID" \
  -H "Authorization: Bearer $MODELSITE_API_KEY"

Response fields

FieldMeaning
output.task_idJob ID (same value returned at creation)
output.task_statusPENDING queued / RUNNING processing / SUCCEEDED done / FAILED failed
output.video_urlThe generated video URL — only on SUCCEEDED; download promptly
output.code / output.messagePresent only on failure, with the reason
usageUsage stats (duration, resolution tier, …); counted only on success
request_idUnique request ID — include it when reporting issues

Status flow: PENDING → RUNNING → SUCCEEDED / FAILED.

Billing

Billed by actual generated seconds; the resolution tier affects the rate; failed jobs are not billed. Rates on the Models page.

Error handling

Creation-time errors return {"code": "...", "message": "..."}; mid-job failures surface through the poll's output.code / output.message. General error codes: Errors.

On this page