Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
cloudai-x avatar

World Labs Multi Image

  • 10 installs
  • 3 repo stars
  • Updated January 22, 2026
  • cloudai-x/world-labs-skills

Generates a 3D world from multiple reference images using direction-control azimuth placement or overlap-based auto layout.

About

Explains multi-image input for World Labs, contrasting direction-control mode (up to 4 non-overlapping images placed by azimuth) with auto-layout mode (up to 8 overlapping images). A developer uses it when building a world from several reference views.

  • Direction control places up to 4 views by azimuth angle
  • Auto layout reconstructs existing spaces from up to 8 overlapping images

World Labs Multi Image by the numbers

  • 10 all-time installs (skills.sh)
  • Ranked #1,055 of 1,335 Generative Media skills by installs in the Skillselion catalog
  • Data as of Jul 29, 2026 (Skillselion catalog sync)
npx skills add https://github.com/cloudai-x/world-labs-skills --skill world-labs-multi-image

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs10
repo stars3
Last updatedJanuary 22, 2026
Repositorycloudai-x/world-labs-skills

What it does

Generates a 3D world from multiple reference images using direction-control azimuth placement or overlap-based auto layout.

Files

SKILL.mdMarkdownGitHub ↗

World Labs Multi-Image Input

Generate 3D worlds from multiple reference images with precise directional control or automatic layout.

Quick Reference

ModeImagesOverlapBest For
Direction ControlUp to 4Non-overlapping preferredCreative connections between views
Auto LayoutUp to 8RequiredReconstructing existing spaces

Credits

ModelCredits
Marble 0.1-plus1,600
Marble 0.1-mini250

Direction Control Mode

Use when you want explicit control over image placement. Non-overlapping images are preferred—the model creatively fills spaces between views.

Azimuth Angles

AzimuthDirectionDescription
0FrontPrimary view, camera facing forward
90RightView from right side
180BackOpposite of front view
270LeftView from left side

Any value 0-360 is supported for non-cardinal directions.

Visual Reference

              0° (Front)
                  ↑
                  |
    270° (Left) ←─┼─→ 90° (Right)
                  |
                  ↓
            180° (Back)

API Usage (Direction Control)

{
  "model": "Marble 0.1-plus",
  "world_prompt": {
    "type": "multi-image",
    "multi_image_prompt": [
      {
        "azimuth": 0,
        "content": {
          "source": "media_asset",
          "media_asset_id": "front_image_id"
        }
      },
      {
        "azimuth": 90,
        "content": {
          "source": "media_asset",
          "media_asset_id": "right_image_id"
        }
      },
      {
        "azimuth": 180,
        "content": {
          "source": "media_asset",
          "media_asset_id": "back_image_id"
        }
      },
      {
        "azimuth": 270,
        "content": {
          "source": "media_asset",
          "media_asset_id": "left_image_id"
        }
      }
    ],
    "text_prompt": "A grand Victorian mansion interior"
  }
}

Using Public URLs

{
  "model": "Marble 0.1-plus",
  "world_prompt": {
    "type": "multi-image",
    "multi_image_prompt": [
      {
        "azimuth": 0,
        "content": {
          "source": "uri",
          "uri": "https://example.com/front.jpg"
        }
      },
      {
        "azimuth": 180,
        "content": {
          "source": "uri",
          "uri": "https://example.com/back.jpg"
        }
      }
    ],
    "text_prompt": "A cozy living room"
  }
}

Best Practices for Direction Control

Non-overlapping images: Model creatively fills gaps between views ✅ Consistent style: All images should match aesthetically ✅ Same lighting: Consistent light direction across all images ✅ Complementary angles: Choose angles that tell a complete story

Auto Layout Mode

Use when you have multiple overlapping images from the same space. The model automatically positions images.

Requirements for Auto Layout

RequirementDetails
Aspect ratioAll images MUST have identical aspect ratio
ResolutionAll images MUST have identical resolution
LocationAll images from the same space
OverlapVisual overlap between images required
LightingConsistent lighting and color temperature

API Usage (Auto Layout)

Auto Layout is primarily a UI feature. In API, omit azimuth values:

{
  "model": "Marble 0.1-plus",
  "world_prompt": {
    "type": "multi-image",
    "multi_image_prompt": [
      {
        "content": {
          "source": "media_asset",
          "media_asset_id": "image_1_id"
        }
      },
      {
        "content": {
          "source": "media_asset",
          "media_asset_id": "image_2_id"
        }
      },
      {
        "content": {
          "source": "media_asset",
          "media_asset_id": "image_3_id"
        }
      }
    ],
    "text_prompt": "A mystical forest clearing"
  }
}

Python Example

import requests

def generate_world_multi_image(
    api_key: str,
    images: list[dict],  # [{"path": "...", "azimuth": 0}, ...] or [{"path": "..."}]
    prompt: str = None
):
    base_url = "https://api.worldlabs.ai/marble/v1"
    headers = {"WLT-Api-Key": api_key, "Content-Type": "application/json"}

    multi_image_prompt = []

    for img in images:
        # Get extension
        ext = img["path"].lower().split('.')[-1]
        if ext == "jpeg":
            ext = "jpg"

        # Prepare upload
        prep = requests.post(
            f"{base_url}/media-assets:prepare_upload",
            headers=headers,
            json={"file_name": img["path"].split('/')[-1], "kind": "image", "extension": ext}
        ).json()

        media_asset_id = prep["media_asset"]["media_asset_id"]
        upload_url = prep["upload_info"]["upload_url"]

        # Upload file
        content_types = {"jpg": "image/jpeg", "png": "image/png", "webp": "image/webp"}
        with open(img["path"], 'rb') as f:
            requests.put(upload_url, headers={"Content-Type": content_types.get(ext, "image/jpeg")}, data=f.read())

        # Build image reference
        image_entry = {
            "content": {
                "source": "media_asset",
                "media_asset_id": media_asset_id
            }
        }
        if "azimuth" in img:
            image_entry["azimuth"] = img["azimuth"]

        multi_image_prompt.append(image_entry)

    # Build world_prompt
    world_prompt = {
        "type": "multi-image",
        "multi_image_prompt": multi_image_prompt
    }
    if prompt:
        world_prompt["text_prompt"] = prompt

    # Generate
    response = requests.post(
        f"{base_url}/worlds:generate",
        headers=headers,
        json={"model": "Marble 0.1-plus", "world_prompt": world_prompt}
    )

    return response.json()["operation_id"]

# Usage with direction control
operation_id = generate_world_multi_image(
    "your_api_key",
    [
        {"path": "front_view.jpg", "azimuth": 0},
        {"path": "right_view.jpg", "azimuth": 90},
        {"path": "back_view.jpg", "azimuth": 180},
        {"path": "left_view.jpg", "azimuth": 270},
    ],
    prompt="A cozy cabin interior"
)

# Usage with auto layout (no azimuth)
operation_id = generate_world_multi_image(
    "your_api_key",
    [{"path": f"ref_{i}.jpg"} for i in range(6)],
    prompt="An enchanted garden"
)

Common Use Cases

Interior Room (4 corners)

{
  "world_prompt": {
    "type": "multi-image",
    "multi_image_prompt": [
      {
        "azimuth": 45,
        "content": { "source": "media_asset", "media_asset_id": "corner_1" }
      },
      {
        "azimuth": 135,
        "content": { "source": "media_asset", "media_asset_id": "corner_2" }
      },
      {
        "azimuth": 225,
        "content": { "source": "media_asset", "media_asset_id": "corner_3" }
      },
      {
        "azimuth": 315,
        "content": { "source": "media_asset", "media_asset_id": "corner_4" }
      }
    ]
  }
}

Street Scene (looking both ways)

{
  "world_prompt": {
    "type": "multi-image",
    "multi_image_prompt": [
      {
        "azimuth": 0,
        "content": { "source": "media_asset", "media_asset_id": "street_north" }
      },
      {
        "azimuth": 180,
        "content": { "source": "media_asset", "media_asset_id": "street_south" }
      }
    ]
  }
}

Comparison: Direction Control vs Auto Layout

AspectDirection ControlAuto Layout
Max images48
OverlapNon-overlapping preferredRequired
Aspect ratioCan varyMust be identical
ResolutionCan varyMust be identical
Same spaceRecommendedRequired
Use caseCreative connectionsSpace reconstruction

Troubleshooting

IssueCauseSolution
Seams between viewsInconsistent lightingMatch exposure and white balance
Floating objectsConflicting depth infoUse more consistent reference images
Distorted geometryImages too differentUse more similar reference images
Auto layout failsDifferent aspect ratiosEnsure all images have identical dimensions

Related Skills

  • world-labs-api - API integration details
  • world-labs-image-prompt - Single image input
  • world-labs-pano-video - Panorama and video input (most control)

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.