Story

Overview

These APIs allow you to generate a story video either from a text idea or from existing images.

There are two ways to generate a story video:

Automatic Mode - A simple API that creates a video directly from your input.

  • POST /story/idea-2-video - Generate a complete video from a text idea
  • POST /story/images-2-video - Generate a video from your own images

Advanced Mode - Step-by-step control over the video generation process.

  • POST /story - Create a storyboard
  • POST /story/{story_id}/elements - Generate element images (optional)
  • POST /story/{story_id}/scenes - Generate scene images and narrations
  • POST /story/{story_id}/videos - Create videos from scenes
  • GET /story/{story_id} - Get story status and details

Generate video from idea - Automatic Mode

import requests

BASE_URL = 'https://api.vimmerse.net'
url = f"{BASE_URL}/story/idea-2-video"

headers = {
    'X-Api-Key': 'YOUR_API_KEY',
}

## Create a story
payload = {
    'idea': 'Create a promotional video where cute animals play musical instruments',
    'title': 'Example Story',
    'aspect_ratio': '9:16',
    'scene_count': 4,
    'audio_option': {
        'has_bg_music': True,
        'has_narration': True,
        'native_audio': False,
        'narrator': 'Rachel'
    },
    'webhook_url': 'https://your.domain.com/webhook_callback' ## Your webhook URL
}

try:
    response = requests.request("POST", url, headers=headers, data=payload, timeout=60)
    print(response.text)

    response_data = response.json()
    story_data = response_data['data']
    print(story_data)
except:
    print("Story creation failed. Please try again.")
    exit()

Generate video with idea and images - Automatic Mode

import requests
import time

BASE_URL = 'https://api.vimmerse.net'
url = f"{BASE_URL}/story/images-2-video"

headers = {
    'X-Api-Key': 'YOUR_API_KEY',
}

## Create a story
payload = {
    'idea': 'Create a promotional video where cute animals play musical instruments',
    'title': 'Example Story',
    'aspect_ratio': '9:16',
    'image_urls': [
        'https://dev-media.vimmerse.net/vimmerse-test-user/ai_images/26365fa2-c65d-43d8-9563-2c33982cbf8b/20250402_194114_rak4p71.png',
        'https://dev-media.vimmerse.net/vimmerse-test-user/ai_images/26365fa2-c65d-43d8-9563-2c33982cbf8b/20250402_194118_rak4p72.png',
        'https://dev-media.vimmerse.net/vimmerse-test-user/ai_images/26365fa2-c65d-43d8-9563-2c33982cbf8b/20250402_194119_rak4p73.png',
        'https://dev-media.vimmerse.net/vimmerse-test-user/ai_images/26365fa2-c65d-43d8-9563-2c33982cbf8b/20250402_194120_rak4p74.png'
    ],
    'audio_option': {
        'has_bg_music': True,
        'has_narration': True,
        'native_audio': False,
        'narrator': 'Rachel'
    },
    'webhook_url': 'https://your.domain.com/webhook_callback' ## Your webhook URL
}

try:
    response = requests.request("POST", url, headers=headers, data=payload, timeout=60)
    print(response.text)

    response_data = response.json()
    story_data = response_data['data']
    print(story_data)
except:
    print("Story creation failed. Please try again.")
    exit()

Wait until the story video has been generated, then download the resulting video file.

while story_data['status'] != 'success': ## Wait for story is finished
    time.sleep(30) ## Wait for 30 seconds

    ## Get story detail
    url = f"{BASE_URL}/story/{story_id}"

    try:
        response = requests.request("GET", url, headers=headers)
        print(response.text)

        response_data = response.json()

        story_data = response_data['data']

        if story_data['status'] == 'fail':
            print("Failed to generate video. Please submit again.")
            exit()
    except:
        print("Unable to retrieve story details. Please try again.")
        exit()

time.sleep(30) ## wait for videos are composed internally.
video_url = story_data['video_url']
print("Story Video URL: " + video_url)

## You can download the generated video from the provided URL.
response = requests.get(video_url, stream=True)
output_path = './story_video.mp4'
try:
    with open(output_path, 'wb') as file:
        file.write(response.content)
    print(f"File downloaded as {output_path}")
except:
    print("Failed to download the video.")

Story Webhook

By providing a webhook endpoint, you’ll receive a notification when the request is complete, instead of polling for updates. You can set a webhook URL by including the webhook_url parameter when creating video.

You will receive a response containing customer_id, batch_id, and status:

{
    "customer_id": "YOUR_CUSTOMER_ID",
    "batch_id": "YOUR_STORY_ID",
    "status": "success"
}

Once you receive a request from the webhook, use the Get Story Detail API(GET /story/{story_id}) to retrieve story details.

[AUTO] Idea-to-Video

Creates a complete video automatically based on your idea prompt. Once the request is submitted, Vimmerse automatically:

  1. Generates a storyboard with characters, environments, and scenes
  2. Creates element images (characters, objects, environments) for consistency
  3. Generates scene images based on the storyboard
  4. Creates voice narrations for each scene
  5. Generates background music
  6. Animates the images into videos
  7. Composes all scene videos into a final video

The API returns a story object containing story_id and generation status. You can check progress using GET /story/{story_id} or receive a callback via webhook_url.

Parameters

  • idea (required): Text description of your story idea
  • scene_count (optional): Number of scenes to generate (default: 3, max: varies by plan)
  • aspect_ratio (optional): Video aspect ratio - '16:9', '4:3', '1:1', '3:4', '9:16' (default: '16:9')
  • option (optional): Image generation model - 'Seedream', 'FluxKontextPro', etc. (default: 'Seedream')
  • motion_type (optional): Animation method - 'Auto', 'KlingAI', 'VeoFast', etc. (default: 'Auto')
  • generate_elements (optional): Enable character consistency elements (default: True)
  • enhance_image (optional): Apply super-resolution enhancement (default: False)
  • audio_option (optional): Audio options - 'has_bg_music', 'has_narration', 'native_audio', 'narrator' (default: 'Rachel')
  • elements (optional): Initial elements (e.g. characters, environments, objects) to be included in story. This can be useful to set a hero character in a film or logo of a product.
  • language (optional): Narration language (default: 'English')
  • duration (optional): Duration per scene in seconds, 1-10 (default: 5)
  • webhook_url (optional): URL for completion callback

Example Code

import requests

url = "https://api.vimmerse.net/story/idea-2-video"

headers = {
    'X-Api-Key': 'YOUR_API_KEY',
}
payload = {
    'idea': 'Create a promotional video where cute animals play musical instruments.',
    'title': 'Example Story',
    'aspect_ratio': '9:16',
    'scene_count': 3,
    'audio_option': '{"has_bg_music": True, "has_narration": True, "native_audio": False, "narrator": "Rachel"}',
    'elements': '{"objects": [{"name": "logo","description": "logo of vimmerse","image_url": "https://www.vimmerse.net/Vimmerse-logo.png"}]}',
    'language': 'English'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)
SecurityAPIKeyHeader
Request
Request Body schema: application/x-www-form-urlencoded
idea
string (Idea)
Default: ""
scene_count
integer (Number of Scenes)
Default: 3

Number of scenes to generate. If omitted, scenes are generated automatically.

option
string (Image Generation Option)
Default: "Seedream"

Specifies the image generation model used for creating visuals from the story.

Enum: "Seedream" "FluxPro" "FluxTurbo" "NanoBananaPro" "NanoBanana" "FluxKontextPro" "FluxFinetuned" "QwenImage" "StableDiffusion3.5" "LeonardoImage" "GPTImage" "Auto"
generate_elements
boolean (Generate Elements)
Default: true

“Generates element images for maintaining character consistency. Supported only when the option parameter is one of FluxPro, FluxKontextPro, Seedream, NanoBananaPro, NanoBanana or GPTImage.

elements
string (Elements)

Initial elements (e.g. characters, environments, objects) to be included in story. This can be useful to set a hero character in a film or logo of a product.

aspect_ratio
string (Aspect Ratio)
Default: "16:9"
is_transition
boolean (Is Transition)
Default: false

If true, transition videos will be created between the given images.

title
string (Title)
Default: ""
description
string (Description)
Default: ""
visibility_status
string (Visibility)
Default: "1"

Visibility Status:

Value Status
"0" Private
"1" Unlisted
"2" Public
Enum: "0" "1" "2"
motion_type
string (Motion Type)
Default: "Auto"

Defines the motion style used for video animation.

Enum: "Auto" "AutoT3" "KlingAI" "KlingO" "LumaAI" "LumaRay2" "VeoFast" "Veo" "RunwayML" "MinimaxHailuo" "Seedance" "SeedanceFast" "Hunyuan" "Pixverse" "PicoMotion" "StaticMotion" "Wan" "Sora" "SoraPro"
duration
integer (Duration) [ 1 .. 10 ]
Default: 5

Specifies the duration of each scene. This value is ignored when narration is enabled.

loop
integer (Loop) [ 1 .. 6 ]
Default: 1

Number of times the same motion is repeated. The loop value is ignored when a narrator is used

enhance_image
boolean (Enhance Image)
Default: false

Enhances the image by applying 1× super-resolution during post-processing.

audio_option
string (Audio Option)

Audio configuration options for story generation.

Audio Parameters

Parameter Type Default Description
narrator string "Rachel" Voice for narration
Available voices: Rachel, Aria, Roger, Sarah, Laura, Charlie, George, Callum, River, Liam, Charlotte, Alice, Matilda, Will, Jessica, Eric, Chris, Brian, Daniel, Lily, Bill
has_narration boolean True Whether to include narration
has_bg_music boolean True Whether to include background music
native_audio boolean False Whether to include native sound effects and lip sync

Usage Examples

narrator
string (Narrator)
Default: "Rachel"

The voice used for the narration. Available voices are "Aria", "Roger", "Sarah", "Laura", "Charlie", "George", "Callum", "River", "Liam", "Charlotte", "Alice", "Matilda", "Will", "Jessica", "Eric", "Chris", "Brian", "Daniel", "Lily" and "Bill". The default narrator is Rachel. ⚠️ This field is deprecated; Set it using audio_option instead!

language
string (Language)
Default: "English"

Specifies the language used for narration.

has_narration
boolean (Narration Flag)
Default: true

⚠️ This field is deprecated; set it using audio_option instead!

has_bg_music
boolean (Background Music Flag)
Default: true

⚠️ This field is deprecated; set it using audio_option instead!

native_audio
boolean (Native Audio)
Default: false

Determines whether the generated video includes native sound effects and lip sync. ⚠️ This field is deprecated; set it using audio_option instead!

webhook_url
string (Webhook URL)

a 'POST' request will be made to your webhook URL after story is generated.

Responses
200

Story Object

400

Bad Request

402

Insufficient Credit

422

Validation Error

post/story/idea-2-video
Request samples
Response samples
application/json
{
  • "data": {
    }
}

[AUTO] Images-to-Video

Generates a story video using both your idea and a set of existing images. This mode is ideal when you want to maintain character consistency or use your own art style as a reference.

The workflow:

  1. Takes your provided images and idea
  2. Generates appropriate voice narrations for each scene
  3. Creates background music
  4. Animates each image into a video with motion
  5. Composes all scene videos into a final story video

Parameters

  • idea (required): Text description of your story idea
  • image_urls (required): Array of image URLs to animate (or use image_files for uploads)
  • image_files (optional): Upload image files directly
  • aspect_ratio (optional): Video aspect ratio (default: '16:9')
  • motion_type (optional): Animation method - 'Auto', 'KlingAI', 'VeoFast', etc. (default: 'Auto')
  • is_transition (optional): Create transition videos between scenes (default: False)
  • audio_option (optional): Audio options - 'has_bg_music', 'has_narration', 'native_audio', 'narrator' (default: 'Rachel')
  • language (optional): Narration language (default: 'English')
  • duration (optional): Duration per scene in seconds, 1-10 (default: 5)
  • loop (optional): Number of motion repetitions, 1-6 (default: 1)
  • webhook_url (optional): URL for completion callback

Example Code

import requests

url = "https://api.vimmerse.net/story/images-2-video"

headers = {
    'X-Api-Key': 'YOUR_API_KEY',
}
payload = {
    'idea': 'Create a promotional video showcasing these beautiful landscapes with a cinematic style.',
    'title': 'Landscape Video',
    'aspect_ratio': '16:9',
    'image_urls': [
        'https://example.com/landscape1.png',
        'https://example.com/landscape2.png',
        'https://example.com/landscape3.png',
        'https://example.com/landscape4.png'
    ],
    'motion_type': 'KlingAI',
    'audio_option': {
        'has_bg_music': True,
        'has_narration': True,
        'native_audio': False,
        'narrator': 'Rachel'
    }
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)
SecurityAPIKeyHeader
Request
Request Body schema: multipart/form-data
title
string (Title)
Default: ""
description
string (Description)
Default: ""
visibility_status
string (Visibility Status)
Default: "1"

Visibility Status:

Value Status
"0" Private
"1" Unlisted
"2" Public
Enum: "0" "1" "2"
idea
string (Idea)
Default: "Make a stunning video showcasing these images with nice story line"
image_files
Array of strings <binary> (Image Files)
Default: []

Images to upload.

image_urls
Array of strings (Image URLs)
Default: []

If you upload image files, this field will be ignored.

aspect_ratio
string (Aspect Ratio)
Default: "16:9"
is_transition
boolean (Is Transition)
Default: false

If true, transition videos will be created between the given images.

motion_type
string (Motion Type)
Default: "Auto"

Defines the motion style used for video animation.

Enum: "Auto" "AutoT3" "KlingAI" "KlingO" "LumaAI" "LumaRay2" "VeoFast" "Veo" "RunwayML" "MinimaxHailuo" "Seedance" "SeedanceFast" "Hunyuan" "Pixverse" "PicoMotion" "StaticMotion" "Wan" "Sora" "SoraPro"
duration
integer (Duration) [ 1 .. 10 ]
Default: 5

Specifies the duration of each scene. This value is ignored when narration is enabled.

loop
integer (Loop) [ 1 .. 6 ]
Default: 1

The number of repetitions of the same motion. The loop value is ignored when a narrator is used.

audio_option
string (Audio Option)

Audio configuration options for story generation.

Audio Parameters

Parameter Type Default Description
narrator string "Rachel" Voice for narration
Available voices: Rachel, Aria, Roger, Sarah, Laura, Charlie, George, Callum, River, Liam, Charlotte, Alice, Matilda, Will, Jessica, Eric, Chris, Brian, Daniel, Lily, Bill
has_narration boolean True Whether to include narration
has_bg_music boolean True Whether to include background music
native_audio boolean False Whether to include native sound effects and lip sync

Usage Examples

narrator
string (Narrator)
Default: "Rachel"

The voice used for the narration. Available voices are "Aria", "Roger", "Sarah", "Laura", "Charlie", "George", "Callum", "River", "Liam", "Charlotte", "Alice", "Matilda", "Will", "Jessica", "Eric", "Chris", "Brian", "Daniel", "Lily" and "Bill". The default narrator is Rachel. ⚠️ This field is deprecated; set it using audio_option instead!

language
string (Language)
Default: "English"

Specifies the language used for narration.

has_narration
boolean (Narration Flag)
Default: true

⚠️ This field is deprecated; set it using audio_option instead!

has_bg_music
boolean (Background Music Flag)
Default: true

⚠️ This field is deprecated; set it using audio_option instead!

native_audio
boolean (Native Audio)
Default: false

Determines whether the generated video includes native sound effects and lip sync. ⚠️ This field is deprecated; set it using audio_option instead!

webhook_url
string (Webhook URL)

a 'POST' request will be made to your webhook URL after story is generated.

Responses
200

Story Object

400

Bad Request

402

Insufficient Credit

422

Validation Error

post/story/images-2-video
Request samples
Response samples
application/json
{}

[ADVANCED] Step 1 - Create Storyboard

This API creates a new storyboard (Step 1 of Advanced Mode) based on your idea and/or images.

What it does:

  • Generates a complete storyboard with characters, environments, objects, and scenes
  • Creates narrations for each scene
  • Defines camera movements and lighting for each scene
  • Sets up the story structure for subsequent steps

Next steps:

  1. POST /story/{story_id}/elements (Optional) - Generate element images for consistency
  2. POST /story/{story_id}/scenes - Generate scene images and narrations
  3. POST /story/{story_id}/videos - Create videos from the scenes

Generate Story with Idea

import requests

url = "https://api.vimmerse.net/story"

headers = {
    'X-Api-Key': 'YOUR_API_KEY',
}
payload = {
    'idea': 'Create a promotional video where cute animals play musical instruments.',
    'scene_count': 3,
    'title': 'Example Story',
    'language': 'English',
    'audio_option': {
        'has_bg_music': True,
        'has_narration': True,
        'native_audio': False,
        'narrator': 'Rachel'
    }
}

response = requests.request("POST", url, headers=headers, data=payload)

story_data = response.json()
print(story_data)

Parameters:

  • idea (required): Your story concept
  • scene_count (optional): Number of scenes, default 3
  • language (optional): Language for storyboard generation
  • audio_option (optional): Audio options - 'has_bg_music', 'has_narration', 'native_audio', 'narrator' (default: 'Rachel')

Generate Story with Idea and Images

import requests

url = "https://api.vimmerse.net/story"

headers = {
    'X-Api-Key': 'YOUR_API_KEY',
}
payload = {
    'idea': 'Create a promotional video where cute animals play musical instruments.',
    'title': 'Example Story',
    'image_urls': [
        'https://example.com/image1.png',
        'https://example.com/image2.png',
        'https://example.com/image3.png',
        'https://example.com/image4.png'
    ],
}

response = requests.request("POST", url, headers=headers, data=payload)

story_data = response.json()
print(story_data)

Note: When providing images, the scene_count will automatically match the number of images provided.

SecurityAPIKeyHeader
Request
Request Body schema: multipart/form-data
story_id
string (Story ID)

Story ID to continue from.

idea
string (Idea)
Default: ""
scene_count
integer (Number of Scenes)
Default: 3

Number of scenes to generate. If omitted, scenes are generated automatically.

language
string (Language)
Default: "English"

Specifies the language used for narration.

audio_option
string (Audio Option)

Audio configuration options for story generation.

Audio Parameters

Parameter Type Default Description
narrator string "Rachel" Voice for narration
Available voices: Rachel, Aria, Roger, Sarah, Laura, Charlie, George, Callum, River, Liam, Charlotte, Alice, Matilda, Will, Jessica, Eric, Chris, Brian, Daniel, Lily, Bill
has_narration boolean True Whether to include narration
has_bg_music boolean True Whether to include background music
native_audio boolean False Whether to include native sound effects and lip sync

Usage Examples

elements
string (Elements)

Initial elements (e.g. characters, environments, objects) to be included in story. This can be useful to set a hero character in a film or logo of a product.

image_files
Array of strings <binary> (Image Files)
Default: []

Images to upload.

image_urls
Array of strings (Image URLs)
Default: []

If you upload image files, this field will be ignored.

Responses
200

Story Object

400

Bad Request

402

Insufficient Credit

422

Validation Error

post/story
Request samples
Response samples
application/json
{
  • "data": {
    }
}

[ADVANCED] Step 1.5 - Create Element Images(Optional)

This API generates images of your characters, objects, environments, and background music based on your storyboard.

Send a POST request with or without storyboard to generate element images from your storyboard. If you already have images for your characters, objects, or environments, include the image URLs in the same level as the name and description fields of each scene. if you already have background music, you can just add music_url under music object under storyboard.

If you are generating story with idea and images, you will not need to call this API.

Example Code

import requests

url = "https://api.vimmerse.net/story/{STORY_ID}/elements"

payload = {
    'aspect_ratio': '16:9',
    'option': 'Seedream'
    'seed': 4669,
}
headers = {
    'X-Api-Key': 'YOUR_API_KEY'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)
SecurityAPIKeyHeader
Request
Request Body schema: application/x-www-form-urlencoded
option
string (Image Generation Option)
Default: "Seedream"

Specifies the image generation model used for creating visuals from the story.

Enum: "Seedream" "FluxPro" "FluxTurbo" "NanoBananaPro" "NanoBanana" "FluxKontextPro" "FluxFinetuned" "QwenImage" "StableDiffusion3.5" "LeonardoImage" "GPTImage" "Auto"
aspect_ratio
string (Aspect Ratio)
Default: "9:16"

Available values are '16:9', '4:3', '1:1', '3:4' and '9:16'

storyboard
string (Storyboard)

JSON dump string of Storyboard object that contains 'characters', 'environments', 'objects' and 'scenes'.

enhance_image
boolean (Enhance Image)
Default: false

Enhances the image by applying 1× super-resolution during post-processing.

has_bg_music
boolean (Background Music Flag)
Default: true

⚠️ This field is deprecated. Set it using audio_option in Step 1 of story creation.

Responses
200

Story Object with element images generated

400

Bad Request

402

Insufficient Credit

404

Not Found

422

Validation Error

post/story/{story_id}/elements
Request samples
Response samples
application/json
{
  • "data": {
    }
}

[ADVANCED] Step 2 - Create Scenes

This API crafts missing images and narrations of scenes, background music in storyboard.

Send a POST request to generate scene images(if needed), narrations and background music from storyboard.

Example Code

Generate scene images without updating the storyboard.

import requests

url = "https://api.vimmerse.net/story/{STORY_ID}/scenes"

payload = {
    'aspect_ratio': '16:9',
    'option': 'Seedream'
    'seed': '4669',
}
headers = {
    'X-Api-Key': 'YOUR_API_KEY'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Generate scene images with updating storyboard.

import requests

url = "https://api.vimmerse.net/story/{STORY_ID}/scenes"

payload = {
    'aspect_ratio': '16:9',
    'seed': '4669',
    'option': 'Seedream'
    'storyboard': json.dumps({...storyboard})
}
headers = {
    'X-Api-Key': 'YOUR_API_KEY'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)
SecurityAPIKeyHeader
Request
Request Body schema: application/x-www-form-urlencoded
option
string (Image Generation Option)
Default: "Seedream"

Specifies the image generation model used for creating visuals from the story.

Enum: "Seedream" "FluxPro" "FluxTurbo" "NanoBananaPro" "NanoBanana" "FluxKontextPro" "FluxFinetuned" "QwenImage" "StableDiffusion3.5" "LeonardoImage" "GPTImage" "Auto"
aspect_ratio
string (Aspect Ratio)
Default: "16:9"

Available values are '16:9', '4:3', '1:1', '3:4' and '9:16'

storyboard
string (Storyboard)

JSON dump string of Storyboard object that contains 'characters', 'environments', 'objects' and 'scenes'.

enhance_image
boolean (Enhance Image)
Default: false

Enhances the image by applying 1× super-resolution during post-processing.

generate_elements
boolean (Generate Elements)
Default: true

“Generates element images for maintaining character consistency. Supported only when the option parameter is one of FluxPro, Seedream, NanoBananaPro, NanoBanana, FluxKontextPro, or GPTImage.

narrator
string (Narrator)
Default: "Rachel"

The voice used for the narration. Available voices are "Aria", "Roger", "Sarah", "Laura", "Charlie", "George", "Callum", "River", "Liam", "Charlotte", "Alice", "Matilda", "Will", "Jessica", "Eric", "Chris", "Brian", "Daniel", "Lily" and "Bill". The default narrator is Rachel. ⚠️ This field is deprecated; set it using audio_option in Step 1 of story creation.

has_narration
boolean (Narration Flag)
Default: true

*⚠️ This field is deprecated. Set it using audio_option in Step 1 of story creation.

has_bg_music
boolean (Background Music Flag)
Default: true

*⚠️ This field is deprecated. Set it using audio_option in Step 1 of story creation.

Responses
200

Story Object with scene images and narrations generated

400

Bad Request

402

Insufficient Credit

404

Not Found

422

Validation Error

post/story/{story_id}/scenes
Request samples
Response samples
application/json
{
  • "data": {
    }
}

[ADVANCED] Step 3 - Create Videos

This API creates videos from your storyboard and scenes.

You can view the generated media in the response. Once all media are processed, your final story video will be available at the video_url field in the response.

Example Code

Create story video without updating scenes.

import requests

url = "https://api.vimmerse.net/story/{STORY_ID}/videos"

payload = {
    "title": "Example story from vimmerse",
    "motion_type": "KlingAI",
}

headers = {
    'X-Api-Key': 'YOUR_API_KEY'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Create story video with updating storyboard and scenes.

import requests

url = "https://api.vimmerse.net/story/{STORY_ID}/videos"

payload = {
    "title": "Example story video from vimmerse",
    "storyboard": {...storyboard},
    "scenes": {...scenes}
}

headers = {
    'X-Api-Key': 'YOUR_API_KEY'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)
SecurityAPIKeyHeader
Request
Request Body schema: application/x-www-form-urlencoded
title
string (Title)
Default: ""
storyboard
string (Storyboard)

JSON dump string of Storyboard object that contains 'characters', 'environments', 'objects' and 'scenes'.

is_transition
boolean (Is Transition)
Default: false

If true, transition videos will be created between the given images.

motion_type
string (Motion Type)
Default: "Auto"

Defines the motion style used for video animation.

Enum: "Auto" "AutoT3" "KlingAI" "KlingO" "LumaAI" "LumaRay2" "VeoFast" "Veo" "RunwayML" "MinimaxHailuo" "Seedance" "SeedanceFast" "Hunyuan" "Pixverse" "PicoMotion" "StaticMotion" "Wan" "Sora" "SoraPro"
duration
integer (Duration) [ 1 .. 10 ]
Default: 5

Specifies the duration of each scene. This value is ignored when narration is enabled.

loop
integer (Number of times the same motion is repeated. This setting is ignored if a narrator is used.) [ 1 .. 6 ]
Default: 1
native_audio
boolean (Native Audio)
Default: false

Determines whether the generated video includes native sound effects and lip sync. ⚠️ This field is deprecated; set it using audio_option in Step 1 of story creation.

webhook_url
string (Webhook URL)

a 'POST' request will be made to your webhook URL after story is generated.

Responses
200

Story Object

400

Bad Request

402

Insufficient Credit

422

Validation Error

post/story/{story_id}/videos
Request samples
Response samples
application/json
{}

Get Story Detail

This API retrieves a Story object.

status field shows current progressing status of this Story.

if Story is finished, you can get composed video from video_url. Send a GET request to get your story video.

Example Code

Get a new Story example

import requests

url = "http://api.vimmerse.net/story/{STORY_ID}"

headers = {
    'X-Api-Key': 'YOUR_API_KEY'
}

response = requests.request("GET", url, headers=headers)

print(response.text)
SecurityAPIKeyHeader
Responses
200

Story Object

400

Bad Request

404

Not Found

422

Validation Error

get/story/{story_id}
Request samples
Response samples
application/json
{}

Delete Story

Delete story

SecurityAPIKeyHeader
Responses
200

Deleted Story Object

400

Bad Request

404

Not Found

422

Validation Error

delete/story/{story_id}
Request samples
Response samples
application/json
{ }

Concat Story

This API composes all generated scene videos into a single story video. You can get composed video from video_url after videos are composed.

Send a POST request with empty body.

Example Code

Compose all video from media. Simple submit without data.

import requests

url = "http://api.vimmerse.net/story/{STORY_ID}/concat"

headers = {
    'X-Api-Key': 'YOUR_API_KEY',
}

response = requests.request("POST", url, headers=headers)

print(response.text)
SecurityAPIKeyHeader
Request
Request Body schema: application/x-www-form-urlencoded
concat_video_urls
Array of strings (Composing Video URLs)
audio_urls
Array of strings (Background Audio URLs)
Responses
200

Story Object

400

Bad Request

402

Insufficient Credit

404

Not Found

422

Validation Error

post/story/{story_id}/concat
Request samples
Response samples
application/json
{ }