用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/CloudAI-X/world-labs-skills --skill world-labs-multi-image命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
World Labs Marble API integration - authentication, endpoints, models, and media uploads
Chisel 3D blocking tool for world generation - geometry, walls, and reference models
World Labs export formats - Gaussian splats, meshes, images, and engine integrations
正在显示 SKILL.md
基于 SOC 职业分类
| name | world-labs-multi-image |
| description | Multi-image input with direction control and auto layout for world generation |
| allowed-tools | ["Bash","WebFetch"] |
Generate 3D worlds from multiple reference images with precise directional control or automatic layout.
| Mode | Images | Overlap | Best For |
|---|---|---|---|
| Direction Control | Up to 4 | Non-overlapping preferred | Creative connections between views |
| Auto Layout | Up to 8 | Required | Reconstructing existing spaces |
| Model | Credits |
|---|---|
| Marble 0.1-plus | 1,600 |
| Marble 0.1-mini | 250 |
Use when you want explicit control over image placement. Non-overlapping images are preferred—the model creatively fills spaces between views.
| Azimuth | Direction | Description |
|---|---|---|
0 | Front | Primary view, camera facing forward |
90 | Right | View from right side |
180 | Back | Opposite of front view |
270 | Left | View from left side |
Any value 0-360 is supported for non-cardinal directions.
0° (Front)
↑
|
270° (Left) ←─┼─→ 90° (Right)
|
↓
180° (Back)
{
"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,
{
"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"
}
✅ 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
Use when you have multiple overlapping images from the same space. The model automatically positions images.
| Requirement | Details |
|---|---|
| Aspect ratio | All images MUST have identical aspect ratio |
| Resolution | All images MUST have identical resolution |
| Location | All images from the same space |
| Overlap | Visual overlap between images required |
| Lighting | Consistent lighting and color temperature |
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"
}
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[], ) f:
requests.put(upload_url, headers={: content_types.get(ext, )}, data=f.read())
image_entry = {
: {
: ,
: media_asset_id
}
}
img:
image_entry[] = img[]
multi_image_prompt.append(image_entry)
world_prompt = {
: ,
: multi_image_prompt
}
prompt:
world_prompt[] = prompt
response = requests.post(
,
headers=headers,
json={: , : world_prompt}
)
response.json()[]
operation_id = generate_world_multi_image(
,
[
{: , : },
{: , : },
{: , : },
{: , : },
],
prompt=
)
operation_id = generate_world_multi_image(
,
[{: } i ()],
prompt=
)
{
"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":
{
"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" }
}
]
}
}
| Aspect | Direction Control | Auto Layout |
|---|---|---|
| Max images | 4 | 8 |
| Overlap | Non-overlapping preferred | Required |
| Aspect ratio | Can vary | Must be identical |
| Resolution | Can vary | Must be identical |
| Same space | Recommended | Required |
| Use case | Creative connections | Space reconstruction |
| Issue | Cause | Solution |
|---|---|---|
| Seams between views | Inconsistent lighting | Match exposure and white balance |
| Floating objects | Conflicting depth info | Use more consistent reference images |
| Distorted geometry | Images too different | Use more similar reference images |
| Auto layout fails | Different aspect ratios | Ensure all images have identical dimensions |
world-labs-api - API integration detailsworld-labs-image-prompt - Single image inputworld-labs-pano-video - Panorama and video input (most control)