Media

APIs for creating and managing media (animated videos) with comprehensive control over generation parameters.

Key Features

  • Create videos from images or text prompts
  • Support for multiple motion types and styles
  • Automatic sound effects and audio options
  • Webhook-based completion notifications
  • Real-time processing status tracking
  • Flexible output customization

Common Use Cases

  • Product Videos: Animate product images for marketing
  • Social Media Content: Create engaging short videos
  • Animation: Bring static images to life
  • Creative Expression: Generate unique video content from imagination

Input Options

1. Single Image

Upload one image to generate an animated video with AI-generated motion.

2. Two Images

Upload two images (start and end frames) to create a transition video.

3. Text Prompt

Provide a text description to generate a video from scratch.

Create Media

Creates a new media object and initiates video generation from images or text prompts.

How It Works

Input Types

  1. Two Images: Creates a transition video between start and end frames
  2. Single Image: Generates animated video from the image
  3. No Image: Creates video from a text prompt alone

Parameters

Basic Information

  • title: Media title (optional)
  • description: Media description (optional)
  • visibility_status: Access control
    • "0": Private
    • "1": Unlisted
    • "2": Public

Input Files

  • image_files: Upload image files (array)
  • image_urls: Provide image URLs (array)

Video Generation Settings

  • prompt: Text description for video generation (optional if images provided)
  • motion_type: AI model for motion generation (optional)
    • Available: Auto, LumaAI, KlingAI, RunwayML, etc.
  • quantity: Number of videos to generate (1-4)
  • duration: Video length in seconds (1-10)
  • loop: Number of times to repeat motion (1-6)

Audio Settings

  • native_audio: Enable native sound effects and lip sync (True or False)
  • narration: Narration text (optional)
  • narrator: Voice for narration (optional)
  • bg_music_prompt: Description for background music (optional)

Advanced Settings

  • aspect_ratio: Video dimensions (e.g., "16:9", "9:16", "1:1")
  • webhook_url: URL for completion notifications (optional)

Example: Two Image Files (Transition Video)

import requests

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

payload = {
    'title': 'Morph Animation',
    'description': 'Transition between two scenes'
}

files=[
    ('image_files', ('start_frame.png', open('path/to/start_frame.png', 'rb'), 'image/png')),
    ('image_files', ('end_frame.png', open('path/to/end_frame.png', 'rb'), 'image/png'))
]

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

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

Example: Image URLs with Custom Motion

import requests

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

payload = {
    'title': 'Character Animation',
    'image_urls': [
        'https://example.com/character1.png',
        'https://example.com/character2.png'
    ],
    'motion_type': 'KlingAI',
    'quantity': 2,  # Generate 2 variations
    'duration': 8,  # 8 seconds long
    'native_audio': True
}

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

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

Example: Text Prompt Only

import requests

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

payload = {
    'title': 'AI Generated Video',
    'prompt': 'A cute bunny jumping through a magical forest with sparkling fairy dust',
    'native_audio': True,
    'bg_music_prompt': 'Gentle, magical background music with chimes',
    'duration': 5,
    'webhook_url': 'https://your-domain.com/webhook'
}

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

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"
image_files
Array of strings <binary> (Image Files)
Default: []

Images to upload. If you upload a single image, an auto motion video will be created from that image. If you upload two images, the second image will be treated as the final frame of the video, resulting in motion transitions between the two images. The most recently uploaded image will be considered the last frame.

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

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

media_items
string (Media Items)

You can add start and/or end input. Here is an example. [{"type":"image","url": "https://media.vimmerse.net/your/image/file.png", "position": "First"},{"type":"video","url": "https://media.vimmerse.net/your/video/file.mp4", "position": "Last"}]. Values from image_files or image_urls will be ignored if this value is set.

prompt
string (Text prompt)
Default: ""

Description to generate video.

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" "TryOnVideo"
camera_control
string (Camera Path)
Default: ""

Defines the camera path of the bullet video.

Enum: "" "Static" "Crane up" "Crane down" "Tilt up" "Tilt down" "Pan right" "Pan left" "Roll right" "Roll left" "Orbit right" "Orbit left" "Rotate 360" "Dolly zoom" "Zoom in" "Zoom out" "Aerial"
quantity
integer (Quantity) [ 1 .. 4 ]
Default: 1
duration
integer (Duration of video) [ 1 .. 10 ]
Default: 5
loop
integer (Number of times the same motion is repeated. This setting is ignored if a narrator is used.) [ 1 .. 6 ]
Default: 1
motion_range
integer (The amount of motion, ranging from 1 to 10. Default value is 5.) [ 1 .. 10 ]
Default: 5
audio_option
string (Audio Option)

Audio configuration options for media generation.

⚠️ Note: These options are ignored if media_items contains audio files.

Audio Parameters

Parameter Type Default Description
narrator string None 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
narration string None Narration text to be spoken
narration_url string None URL to pre-recorded narration
⚠️ If provided, narrator and narration are ignored
bg_music_prompt string None Description for AI-generated background music
bg_music_url string None URL to background music file

Usage Examples

Text-to-Speech Narration

audio_options = {
    'narrator': 'Sarah',
    'narration': 'Welcome to our product showcase. This amazing device will revolutionize how you work.'
}

Pre-recorded Audio

audio_options = {
    'narration_url': 'https://example.com/my-voiceover.mp3'
}

AI-Generated Background Music

audio_options = {
    'bg_music_prompt': 'Upbeat electronic music with energetic beats, perfect for product launch'
}

External Music File

audio_options = {
    'bg_music_url': 'https://example.com/background-music.mp3'
}

Best Practices

  • Use text narration for dynamic, customizable content
  • Use narration_url for professional voiceovers
  • Combine narration with background music for engaging videos
  • Keep narration text concise (under 200 words for best results)
character_animate
boolean (Character Animate)
Default: false

Defines if the uploaded video will be animated as character animate.

model
string (Model)

Defines how a video will be animated. Available values are: 'SeedreamTryOn', 'NanoBananaProTryOn', 'FashnTryOn', 'ViduTryOn', or 'KlingTryOn' for TryOnVideo

aspect_ratio
string (Aspect ratio)

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

webhook_url
string (Webhook URL)

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

Responses
200

New Media

402

Insufficient Credit

404

Not Found

422

Validation Error

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

Get Media Processing Status

Retrieves the current processing status and progress percentage of a media object.

Response Fields

  • progress_percentage: Processing progress (0-100)
  • processing_status: Current state
    • "queue_bullet": Queued for processing
    • "processing": Currently generating
    • "success": Completed
    • "fail": Failed

Example

import requests
import time

def check_media_status(media_id):
    url = f"https://api.vimmerse.net/media/{media_id}/processing-status"
    headers = {'X-Api-Key': 'YOUR_API_KEY'}

    while True:
        response = requests.request("GET", url, headers=headers)
        status = response.json()['data']

        print(f"Progress: {status['progress_percentage']}%")
        print(f"Status: {status['processing_status']}")

        if status['processing_status'] in ['success', 'fail']:
            break

        time.sleep(10)  # Check every 10 seconds

check_media_status('MEDIA_ID')

Status Codes

Status Meaning Action
queue_bullet Waiting in queue Keep polling
processing Video generation in progress Keep polling
success Video ready Download or retrieve results
fail Processing failed Check error logs or retry
Responses
200

Media progress percentage

404

Not Found

422

Validation Error

get/media/{media_id}/processing-status
Request samples
Response samples
application/json
{
  • "data": {
    }
}

Get Media

Retrieves detailed information about a specific media object.

Response Fields

  • id: Unique media identifier
  • title: Media title
  • processing_status: Current processing state
    • "queue_bullet": Waiting in queue
    • "processing": Currently being processed
    • "success": Completed successfully
    • "fail": Failed to process
  • progress_percentage: Processing progress (0-100)
  • result: Array of generated video URLs
  • video_history: Processing history and details

Example

import requests

url = "https://api.vimmerse.net/media/{MEDIA_ID}"

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

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

# Access the result videos
if media_data['data']['processing_status'] == 'success':
    videos = media_data['data']['result']
    print(f"Generated {len(videos)} video(s)")
    for video in videos:
        print(f"Video URL: {video['url']}")

Use Cases

  • Check if video generation is complete
  • Retrieve download URLs
  • Inspect processing history
  • Debug generation issues
SecurityAPIKeyHeader
Responses
200

Media Object

404

Media Not Found

422

Validation Error

get/media/{media_id}
Request samples
Response samples
application/json
{
  • "data": {
    }
}

Update Media

Updates media metadata and optionally regenerates the video.

Important Notes

⚠️ Credit Usage: Updating certain fields triggers video regeneration and consumes credits.

  • Regeneration triggers: prompt, motion_type, quantity, duration, loop, aspect_ratio, native_audio
  • No credit cost: Title, description, rating, visibility_status

Example: Update Metadata (No Regeneration)

import requests

url = "https://api.vimmerse.net/media/{MEDIA_ID}/edit"

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

payload = {
    'title': 'Updated Product Video',
    'description': 'New description text',
    'rating': '5',
    'visibility_status': '2'  # Make public
}

response = requests.request("PUT", url, headers=headers, data=payload)
print(response.text)

Example: Regenerate Video (Uses Credits)

import requests

url = "https://api.vimmerse.net/media/{MEDIA_ID}/edit"

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

payload = {
    'title': 'Updated Video',
    'motion_type': 'RunwayML',  # Triggers regeneration
    'duration': 9,               # Triggers regeneration
    'native_audio': True       # Triggers regeneration
}

response = requests.request("PUT", url, headers=headers, data=payload)
print(response.text)
SecurityAPIKeyHeader
Request
Request Body schema: application/x-www-form-urlencoded
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"
rating
string (Rating)
media_items
string (Media Items)

You can add start and/or end input. Here is an example. [{"type":"image","url": "https://media.vimmerse.net/your/image/file.png", "position": "First"},{"type":"video","url": "https://media.vimmerse.net/your/video/file.mp4", "position": "Last"}]. Values from image_files or image_urls will be ignored if this value is set.

prompt
string (Text prompt)
Default: ""

Description to generate video.

motion_type
string (Motion Type)

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" "TryOnVideo"
camera_control
string (Camera Path)
Default: ""

Defines the camera path of the bullet video.Available values are [{'label': 'Auto', 'prompt': '', 'value': ''}, {'label': 'Static', 'prompt': 'Camera static and steady', 'value': 'Static'}, {'label': 'Crane up', 'prompt': 'Camera crane up', 'value': 'Crane up'}, {'label': 'Crane down', 'prompt': 'Camera crane down', 'value': 'Crane down'}, {'label': 'Tilt up', 'prompt': 'Camera tilt up', 'value': 'Tilt up'}, {'label': 'Tilt down', 'prompt': 'Camera tilt down', 'value': 'Tilt down'}, {'label': 'Pan right', 'prompt': 'Camera pan right', 'value': 'Pan right'}, {'label': 'Pan left', 'prompt': 'Camera pan left', 'value': 'Pan left'}, {'label': 'Roll right', 'prompt': 'Camera roll right', 'value': 'Roll right'}, {'label': 'Roll left', 'prompt': 'Camera roll left', 'value': 'Roll left'}, {'label': 'Orbit right', 'prompt': 'Camera orbit right', 'value': 'Orbit right'}, {'label': 'Orbit left', 'prompt': 'Camera orbit left', 'value': 'Orbit left'}, {'label': 'Rotate 360', 'prompt': 'Camera move in 360-degree rotation around', 'value': 'Rotate 360'}, {'label': 'Dolly zoom', 'prompt': 'Camera dolly zoom', 'value': 'Dolly zoom'}, {'label': 'Zoom in', 'prompt': 'Camera zoom in', 'value': 'Zoom in'}, {'label': 'Zoom out', 'prompt': 'Camera zoom out', 'value': 'Zoom out'}, {'label': 'Aerial', 'prompt': 'Camera aerial as FPV drone shot', 'value': 'Aerial'}]

quantity
integer (Quantity) [ 1 .. 4 ]
duration
integer (Duration of video) [ 1 .. 10 ]
loop
integer (Number of times the same motion is repeated. This setting is ignored if a narrator is used.) [ 1 .. 6 ]
motion_range
integer (The amount of motion, ranging from 1 to 10. Default value is 5.) [ 1 .. 10 ]
audio_option
string (Audio Option)

Audio configuration options for media generation.

⚠️ Note: These options are ignored if media_items contains audio files.

Audio Parameters

Parameter Type Default Description
narrator string None 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
narration string None Narration text to be spoken
narration_url string None URL to pre-recorded narration
⚠️ If provided, narrator and narration are ignored
bg_music_prompt string None Description for AI-generated background music
bg_music_url string None URL to background music file

Usage Examples

Text-to-Speech Narration

audio_options = {
    'narrator': 'Sarah',
    'narration': 'Welcome to our product showcase. This amazing device will revolutionize how you work.'
}

Pre-recorded Audio

audio_options = {
    'narration_url': 'https://example.com/my-voiceover.mp3'
}

AI-Generated Background Music

audio_options = {
    'bg_music_prompt': 'Upbeat electronic music with energetic beats, perfect for product launch'
}

External Music File

audio_options = {
    'bg_music_url': 'https://example.com/background-music.mp3'
}

Best Practices

  • Use text narration for dynamic, customizable content
  • Use narration_url for professional voiceovers
  • Combine narration with background music for engaging videos
  • Keep narration text concise (under 200 words for best results)
model
string (Model)

Defines how a video will be animated. Available values are: 'SeedreamTryOn', 'NanoBananaProTryOn', 'FashnTryOn', 'ViduTryOn', or 'KlingTryOn' for TryOnVideo

aspect_ratio
string (Aspect ratio)

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

webhook_url
string (Webhook URL)

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

Responses
200

Media Object

400

Bad Request

402

Insufficient Credit

404

Not Found

422

Validation Error

put/media/{media_id}/edit
Request samples
Response samples
application/json
{
  • "data": {
    }
}

Download File

Downloads file from media.

Example Code

This code shows an example of how to download Bullet Video from Auto motion.

import requests

url = "https://api.vimmerse.net/media/{MEDIA_ID}/download?object_type=bullet_video_mp4&motion_type=Auto"

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

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

print(response.text)

This code shows an example of how to download Bullet Video with custom settings

import requests

url = "https://api.vimmerse.net/media/{MEDIA_ID}/download?object_type=bullet_video_mp4&motion_type=Auto&width=1080&file_size=4"

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

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

print(response.text)
SecurityAPIKeyHeader
Responses
200

Return bullet video, gif or source files.

400

Bad Request

422

Validation Error

get/media/{media_id}/download
Request samples
Response samples
null

Process Media

Resubmits a media object for video generation.

Use Cases

  • Retry failed generation
  • Regenerate with updated parameters
  • Restart interrupted processing

⚠️ Note: This consumes credits each time it's called.

Example

import requests

url = "https://api.vimmerse.net/media/{MEDIA_ID}/process"

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

# Send POST request with empty body
response = requests.request("POST", url, headers=headers)
print(response.text)
SecurityAPIKeyHeader
Request
Request Body schema: application/json
required
property name*
additional property
any
Responses
200

Media Object

400

Bad Request

402

Insufficient Credit

404

Not Found

422

Validation Error

post/media/{media_id}/process
Request samples
Response samples
application/json
{
  • "data": { }
}