Guides
Making videos
Text-to-video, photo-to-video, templates and camera moves.
All videos are made with POST /api/v1/studio/jobs. The mode field says what kind of video you want.
Text to video
Describe the scene. Be concrete: subject, place, light, camera.
curl -X POST https://qulture-webapi-staging-381114038302.us-central1.run.app/api/v1/studio/jobs \
-H "Authorization: Bearer $QULTURE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"mode": "text_to_video",
"prompt": "A neon-lit street market at night, slow camera push in",
"tier": "draft",
"duration": 5,
"aspect": "9:16"
}'Photo to video
Two steps: upload the photo, then create the job with the upload's key.
1. Upload
curl -X POST https://qulture-webapi-staging-381114038302.us-central1.run.app/api/v1/studio/uploads \
-H "Authorization: Bearer $QULTURE_API_KEY" \
-F "file=@photo.jpg"JPEG, PNG, WebP or HEIC, up to 10 MB. The response includes key and has_face.
2. Create the job
curl -X POST https://qulture-webapi-staging-381114038302.us-central1.run.app/api/v1/studio/jobs \
-H "Authorization: Bearer $QULTURE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"mode": "photo_to_video",
"image_keys": [
"UPLOAD_KEY"
],
"prompt": "She turns to the camera and smiles",
"preset_id": "dolly-in",
"tier": "draft",
"duration": 5,
"consent": true
}'Photos of people need consent
Ifhas_face is true, send "consent": true to confirm the people in the photo agreed. Without it you get 422 studio_consent_required.Templates
Templates are ready-made ideas (party intro, birthday hype…). List them with GET /api/v1/studio/templates. Each one lists the inputs it needs; send them in inputs by key.
curl https://qulture-webapi-staging-381114038302.us-central1.run.app/api/v1/studio/templates \
-H "Authorization: Bearer $QULTURE_API_KEY"curl -X POST https://qulture-webapi-staging-381114038302.us-central1.run.app/api/v1/studio/jobs \
-H "Authorization: Bearer $QULTURE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"mode": "template",
"template_id": "party-intro",
"inputs": {
"photo": "UPLOAD_KEY"
},
"tier": "draft",
"duration": 5,
"consent": true
}'Camera moves & effects
Over 100 presets — dolly in, orbit, whip pan, zooms, effects and styles. List them with GET /api/v1/studio/presets (filter with ?category= or ?mode=) and pass the id as preset_id. Each preset lists the modes it works with.
curl https://qulture-webapi-staging-381114038302.us-central1.run.app/api/v1/studio/presets?mode=text_to_video \
-H "Authorization: Bearer $QULTURE_API_KEY"Duration, aspect, tier, sound
| Field | Values | Notes |
|---|---|---|
duration | 5 or 10 | Seconds. Billed per second. |
aspect | 9:16, 1:1, 4:5, 16:9 | Default 9:16 (vertical). |
tier | draft, standard, pro | Draft is cheapest; every tier is available with an API key. See pricing. |
sound | true / false | Generated sound effects and ambience. |
preset_id | a preset id | Camera move or effect. |
Other modes
| mode | What it does | Inputs |
|---|---|---|
text_to_video | Video from a description | prompt |
photo_to_video | Animate one photo | image_keys: [key], prompt |
transition | Morph from a first to a last frame | image_keys: [first, last] |
reference | Use photos as style / subject references | image_keys (up to 9), prompt |
talking_photo | Make a photo speak | image_keys: [key], voice, speech_text |
template | Ready-made idea | template_id, inputs |
Safe retries
Network blips happen. Send a unique X-Qulture-Request-ID header with each create request; if you retry with the same value, Qulture returns the original job instead of making (and charging for) a second one.
X-Qulture-Request-ID: 7f1c2a90-order-1234