Happy Horse

Generate 3-15 second videos with Happy Horse through the VicSee API. Text to video, image to video, multi-character reference to video, and prompt-driven video editing. 720p and 1080p with native audio.

Try it now: Use the Happy Horse Generator to create videos from text, images, references, or by editing an existing video.

Happy Horse generates short videos with native audio across four modes: text to video, image to video, multi-character reference to video, and prompt-driven video-to-video editing.

Pricing

Billed per second of output by resolution. Native audio is included at no extra cost. Credits are deducted only on successful generation.

Text to Video / Image to Video / Reference to Video

Duration720p Credits1080p Credits
3s120210
4s160280
5s200350
6s240420
7s280490
8s320560
9s360630
10s400700
11s440770
12s480840
13s520910
14s560980
15s6001050

Video Edit

Video editing is billed per second of total video — per-second rate x (input video duration + output duration), where the output length equals the input.

ResolutionCredits per second
720p40/s
1080p70/s

Example: editing a 5s clip at 1080p = (5 + 5) x 70 = 700 credits. The input video must be 3-15 seconds.

Credit range: 120-1050 credits (text/image/reference modes), variable for video edit.

Endpoint

POST https://vicsee.com/api/v1/generate

See Authentication for API key setup.


Text to Video

Generate videos from text descriptions with native audio.

Request Parameters

ParameterTypeRequiredDescription
modelstringYeshappyhorse-text-to-video
input.promptstringYesVideo description (max 5,000 chars)
input.durationnumberNo3-15 seconds, any integer (default: 5)
input.resolutionstringNo720p, 1080p (default: 720p)
input.aspect_ratiostringNo16:9, 9:16, 1:1, 4:3, 3:4 (default: 16:9)
input.seednumberNo0-2147483647. Omit to auto-generate.

Example Request

curl -X POST https://vicsee.com/api/v1/generate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "happyhorse-text-to-video",
    "input": {
      "prompt": "A miniature city built from cardboard comes to life at night, a small train passing through glowing streets",
      "duration": 5,
      "resolution": "720p",
      "aspect_ratio": "16:9"
    }
  }'

Image to Video

Animate a first-frame image into video with native audio. The output aspect ratio follows the input image.

Request Parameters

ParameterTypeRequiredDescription
modelstringYeshappyhorse-image-to-video
input.image_urlsstring[]YesExactly one first-frame image
input.promptstringNoDescription of the animation
input.durationnumberNo3-15 seconds, any integer (default: 5)
input.resolutionstringNo720p, 1080p (default: 720p)
input.seednumberNo0-2147483647. Omit to auto-generate.

Image constraints: jpeg, png, or webp; width and height at least 300px; aspect ratio between 1:2.5 and 2.5:1; up to 10MB.

Example Request

curl -X POST https://vicsee.com/api/v1/generate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "happyhorse-image-to-video",
    "input": {
      "prompt": "The girl walks gracefully through the meadow, her dress fluttering in the wind",
      "image_urls": ["https://example.com/first-frame.png"],
      "duration": 5,
      "resolution": "720p"
    }
  }'

Reference to Video

Generate a video featuring up to nine consistent characters from reference images. Refer to each image in the prompt as character1, character2, and so on — the order matches the array.

Request Parameters

ParameterTypeRequiredDescription
modelstringYeshappyhorse-reference-to-video
input.promptstringYesDescription; address images as character1, character2, ...
input.reference_image_urlsstring[]Yes1-9 reference images
input.durationnumberNo3-15 seconds, any integer (default: 5)
input.resolutionstringNo720p, 1080p (default: 720p)
input.aspect_ratiostringNo16:9, 9:16, 1:1, 4:3, 3:4 (default: 16:9)
input.seednumberNo0-2147483647. Omit to auto-generate.

Image constraints: jpeg, png, or webp; shortest side at least 400px (720p or higher recommended); up to 10MB each. Avoid small, blurry, or heavily compressed images.

Example Request

curl -X POST https://vicsee.com/api/v1/generate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "happyhorse-reference-to-video",
    "input": {
      "prompt": "character1 jogs lightly through a sunlit forest while character2, a glowing spirit, flies closely behind her",
      "reference_image_urls": [
        "https://example.com/girl.png",
        "https://example.com/spirit.png"
      ],
      "duration": 5,
      "resolution": "720p",
      "aspect_ratio": "16:9"
    }
  }'

Video Edit

Edit an existing video with a plain-language instruction — style transfer, character replacement, local edits, and more. Optionally guide the edit with reference images.

Request Parameters

ParameterTypeRequiredDescription
modelstringYeshappyhorse-video-edit
input.promptstringYesEdit instruction (e.g. style transfer or local replacement)
input.video_urlstringYesOne input video, 3-15 seconds
input.reference_image_urlsstring[]No0-5 reference images
input.resolutionstringNo720p, 1080p (default: 720p)
input.audio_settingstringNoauto (regenerate audio) or origin (keep source audio) (default: auto)
input.seednumberNo0-2147483647. Omit to auto-generate.

Input video constraints: mp4 or mov; 3-15 seconds; up to 100MB; longest side at most 2160px, shortest side at least 320px; aspect ratio between 1:2.5 and 2.5:1.

The output length matches the input video. Video edit is billed per second of (input + output) — see Pricing.

Example Request

curl -X POST https://vicsee.com/api/v1/generate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "happyhorse-video-edit",
    "input": {
      "prompt": "Replace the skateboarder with a friendly cartoon robot, keeping the original camera motion and lighting",
      "video_url": "https://example.com/clip.mp4",
      "resolution": "720p",
      "audio_setting": "auto"
    }
  }'

Response & Polling

All requests are asynchronous and return a taskId. Poll GET /api/v1/tasks/{id} until the task completes, then read the result URL. See Tasks for the full lifecycle and Errors for error codes.