| name | world-labs-pano-video |
| description | Panorama and video input for world generation - maximum layout control |
| allowed-tools | ["Bash","WebFetch"] |
World Labs Panorama & Video Input
Panoramas and videos provide the most control over world layout by capturing complete scene coverage.
Quick Reference
Credits
| Input Type | Marble 0.1-plus | Marble 0.1-mini |
|---|
| Panorama | 1,500 | 150 |
| Video | 1,600 | 250 |
Panoramas skip the pano generation step, saving 80 credits compared to regular images.
Panorama Input
Requirements
| Requirement | Specification |
|---|
| Format | 360ยฐ equirectangular projection |
| Aspect ratio | 2:1 (width:height) exactly |
| Recommended | 2560 pixels wide |
| File size | Max 20 MB |
| Formats | PNG (recommended), JPG, WebP |
Equirectangular Format
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โ โ 360ยฐ horizontal field of view โ โ
โ โ
โ โ Left Center Right โ โ
โ โ
โ โ 180ยฐ vertical (zenith to nadir) โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Aspect ratio: 2:1
Creating Panoramas
From Phone:
- iPhone: Panorama mode (stitch 360ยฐ or use apps like Street View)
- Android: Photo Sphere, Google Camera
From Camera:
- Shoot overlapping photos, stitch with PTGui, Hugin, or Lightroom
From 360ยฐ Camera:
- Insta360, GoPro Max, Ricoh Theta
API Usage (Panorama)
Panoramas use the image type with the is_pano flag:
{
"model": "Marble 0.1-plus",
"world_prompt": {
"type": "image",
"image_prompt": {
"source": "media_asset",
"media_asset_id": "550e8400-e29b-41d4-a716-446655440000"
},
"is_pano": true,
"text_prompt": "Add dramatic sunset lighting"
}
}
Using Public URL (Panorama)
{
"model": "Marble 0.1-plus",
"world_prompt": {
"type": "image",
"image_prompt": {
"source": "uri",
"uri": "https://example.com/360-panorama.jpg"
},
"is_pano": true,
"text_prompt": "Transform into a mystical forest"
}
}
Best Practices for Panoramas
โ
Level horizon: Keep camera level during capture
โ
Consistent exposure: Use manual settings or HDR
โ
No moving objects: Static scenes work best
โ
Clean nadir: Bottom of image should be clean
โ
Full 360ยฐ: Complete coverage essential
โ
Exact 2:1 aspect ratio: Required for recognition
โ Tripod visible: Remove or patch the tripod
โ People in frame: Causes artifacts
โ Heavy stitching seams: Fix edges before uploading
โ Phone panoramas: Often lack full 180ยฐ vertical coverage
Video Input
Requirements
| Requirement | Specification |
|---|
| File size | Max 100 MB |
| Duration | Max 30 seconds |
| Rotation | Camera should cover 180-360ยฐ |
| Focal length | Fixed (no zoom during recording) |
| Exposure | Fixed (manual mode) |
| Movement | Slow, smooth rotation |
| Formats | mp4, mov, webm |
Recording Guidelines
Camera Movement:
Start
โ
โโโโโโโโโโโโโโโ
โ โ โ
โ Rotate โ
โ 180-360ยฐ โ
โ โ โ
โโโโโโโโโโโโโโโ
โ
End
DO:
- Rotate camera smoothly in one direction
- Keep camera height constant
- Use gimbal or tripod for stability
- Maintain consistent speed
- Cover at least 180ยฐ of the space
DON'T:
- Pan back and forth
- Change height during recording
- Zoom in/out
- Record moving objects
- Exceed 30 seconds
API Usage (Video)
{
"model": "Marble 0.1-plus",
"world_prompt": {
"type": "video",
"video_prompt": {
"source": "media_asset",
"media_asset_id": "550e8400-e29b-41d4-a716-446655440000"
},
"text_prompt": "Transform into a mystical nighttime scene"
}
}
Using Public URL (Video)
{
"model": "Marble 0.1-plus",
"world_prompt": {
"type": "video",
"video_prompt": {
"source": "uri",
"uri": "https://example.com/room-rotation.mp4"
},
"text_prompt": "A scenic mountain landscape"
}
}
Python Example
import requests
def generate_from_pano_or_video(
api_key: str,
file_path: str,
input_type: str,
prompt: str = None
):
base_url = "https://api.worldlabs.ai/marble/v1"
headers = {"WLT-Api-Key": api_key, "Content-Type": "application/json"}
ext = file_path.lower().split('.')[-1]
if ext == "jpeg":
ext = "jpg"
kind = "video" if input_type == "video" else "image"
prep = requests.post(
f"{base_url}/media-assets:prepare_upload",
headers=headers,
json={"file_name": file_path.split('/')[-1], "kind": kind, "extension": ext}
).json()
media_asset_id = prep["media_asset"]["media_asset_id"]
upload_url = prep["upload_info"]["upload_url"]
content_types = {
"jpg": "image/jpeg", "jpeg": "image/jpeg", "png": "image/png", "webp": ,
: , : , :
}
content_type = content_types.get(ext, )
(file_path, ) f:
requests.put(upload_url, headers={: content_type}, data=f.read())
input_type == :
world_prompt = {
: ,
: {
: ,
: media_asset_id
}
}
:
world_prompt = {
: ,
: {
: ,
: media_asset_id
},
:
}
prompt:
world_prompt[] = prompt
response = requests.post(
,
headers=headers,
json={: , : world_prompt}
)
response.json()[]
pano_op = generate_from_pano_or_video(
,
,
,
)
video_op = generate_from_pano_or_video(
,
,
,
)
Comparison: Panorama vs Video vs Images
| Feature | Panorama | Video | Multi-Image |
|---|
| Layout control | โ
โ
โ
โ
โ
| โ
โ
โ
โ
โ | โ
โ
โ
โโ |
| Ease of capture | โ
โ
โ
โโ | โ
โ
โ
โ
โ | โ
โ
โ
โ
โ
|
| Coverage | Full 360ยฐ | 180-360ยฐ | Selected angles |
| Equipment needed | 360ยฐ camera or stitching | Phone/camera | Any camera |
| Best for | Complete environments | Room capture | Specific views |
| Credits (plus) | 1,500 | 1,600 | 1,600 |
| Credits (mini) | 150 | 250 | 250 |
Troubleshooting
Panorama Issues
| Problem | Solution |
|---|
| Not recognized as panorama | Verify exactly 2:1 aspect ratio |
| Warped horizon | Re-level panorama in editing software |
| Stitching seams | Use better overlap or manual alignment |
| Tripod in nadir | Clone-stamp or use nadir patch |
| Overexposed sky | Use HDR or graduated filters |
Video Issues
| Problem | Solution |
|---|
| Shaky footage | Use gimbal or stabilize in post |
| Inconsistent exposure | Lock exposure in manual mode |
| Too fast rotation | Slow down, stay under 30 seconds |
| Insufficient coverage | Ensure at least 180ยฐ rotation |
Related Skills
world-labs-api - API integration details
world-labs-image-prompt - Single image input
world-labs-multi-image - Multi-image with direction control
world-labs-studio - Compose and animate generated worlds