Compare commits

..
Author SHA1 Message Date
Brandon Thomas 932431147f client fixes 2025-12-22 00:35:24 -05:00
Brandon Thomas 49f6913391 clients 2025-12-21 23:54:24 -05:00
Brandon Thomas 71645335d6 veo 3 client 2025-12-21 23:44:35 -05:00
Brandon Thomas 36e5a319f5 sora 2 pro 2025-12-21 23:33:04 -05:00
Brandon Thomas 9130bd1ddd sora2 2025-12-21 23:23:50 -05:00
Brandon Thomas d286f73d7f wip 2025-12-21 23:06:03 -05:00
Brandon Thomas 03c0f6b640 veo 3.1 fast 2025-12-21 22:49:00 -05:00
Brandon Thomas fd141a5c36 veo3.1 2025-12-21 22:38:43 -05:00
Brandon Thomas de105e1cc4 kling 2.6 handler 2025-12-21 20:38:54 -05:00
Brandon Thomas 330184838e fix kling handler 2025-12-21 20:20:40 -05:00
Brandon Thomas bf758cb10d kling 2.5 turbo handler 2025-12-21 20:14:17 -05:00
Brandon Thomas f512f3cb7d sora2 (non-pro) 2025-12-21 20:14:17 -05:00
Brandon Thomas b80872647d sora 2 pro 2025-12-21 20:14:16 -05:00
Brandon Thomas 6a692b9d2c veo3.1 fast 2025-12-21 20:14:15 -05:00
Brandon Thomas 10f0895f2a defs for veo 3.1 2025-12-21 20:14:14 -05:00
Brandon Thomas 476a26181f kling 2.6 2025-12-21 20:14:13 -05:00
Brandon Thomas bf0a563efb kling 2.5 defs 2025-12-21 20:14:12 -05:00
Brandon Thomas e7dc0abb36 fix required rust never type behavior (#939) 2025-12-21 20:09:59 -05:00
bflatastic a36fe72832 lightbox 3d world button, nano banana name mappings with icon and fixed column width 2025-12-21 19:26:40 +07:00
bflatastic 4eeb915bef duplicated topbar on miniapps index page fix 2025-12-21 18:51:09 +07:00
bflatastic 19079ab7ec worldlabs icon and mapping 2025-12-21 18:38:34 +07:00
BFlat 9ffcfe83c2 bug fix: ImageTo3DWorldStore to use GaussianGenerationEvent (#938) 2025-12-21 18:28:16 +07:00
Brandon Thomas 3404935720 tauri hooks for gpt-image-1.5 and seedream4/4.5 (#937) 2025-12-20 16:06:25 -05:00
Brandon Thomas b490b92833 more models (again) - partial impl of gpt-image-1.5, seedream4/.5 (#936) 2025-12-20 14:12:24 -05:00
Brandon Thomas f151837c2b website links 2025-12-19 17:07:20 -05:00
Brandon Thomas 86a6d16441 refresh access token (#935) 2025-12-19 06:47:22 -05:00
Brandon Thomas b9397fb809 worldlabs improvements - login modal, refresh, etc. (#934) 2025-12-19 06:41:24 -05:00
Brandon Thomas 5688d8cef7 worldlabs tauri (#933)
not finished: need refresh tokens and thumbnails
2025-12-18 22:50:36 -05:00
BFlat 6815040cb1 3d world page and separate store (#932) 2025-12-18 00:29:25 +07:00
Brandon Thomas 754a4da019 worldlabs client library (#931) 2025-12-17 00:21:56 -05:00
bflatastic 3a600fcb9f remove background ui styling center update 2025-12-16 23:15:27 +07:00
Tanish Manku 510589b758 Splat persistence and preview support (#930)
Branch name is misleading as it was originally meant to upload splats to
the endpoint. It results in HTTP400 as of now.
2025-12-15 23:46:48 -08:00
BFlat 7ee5a6aa9a Feature/remove bg mini app (#929)
- remove background mini app
- button in lightbox to remove background leads to mini app as well
2025-12-16 05:45:35 +07:00
Tanish Manku f5cd65be9c Temporarily give splats meshes a name (#928) 2025-12-10 22:29:01 -08:00
Tanish Manku fba1a65e95 Fix bone controls not appearing since 3JS update (#927) 2025-12-10 22:14:26 -08:00
325 changed files with 15913 additions and 540 deletions
Generated
+47
View File
@@ -698,6 +698,7 @@ dependencies = [
"url_utils",
"web_base64",
"workspace-build-acceleration",
"world_labs_client",
]
[[package]]
@@ -5151,6 +5152,14 @@ dependencies = [
"tokio-util",
]
[[package]]
name = "http_headers"
version = "0.0.1"
dependencies = [
"errors",
"workspace-build-acceleration",
]
[[package]]
name = "http_server_common"
version = "0.0.1"
@@ -14165,6 +14174,44 @@ dependencies = [
"zstd-sys",
]
[[package]]
name = "world_labs_client"
version = "0.0.1"
dependencies = [
"anyhow",
"base64 0.22.1",
"bstr",
"byteorder",
"chrono",
"cloudflare_errors",
"cloudflare_mitigation",
"cookie_store 0.0.1",
"env",
"env_logger",
"errors",
"filesys",
"futures 0.3.31",
"http_headers",
"indexmap 2.9.0",
"jwt_light",
"log",
"log4rs",
"once_cell",
"regex",
"scraper 0.24.0",
"serde",
"serde_json",
"sha2 0.11.0-rc.2",
"test_data",
"testing",
"tokio",
"url",
"uuid 1.18.1",
"workspace-build-acceleration",
"wreq",
"wreq-util",
]
[[package]]
name = "wreq"
version = "6.0.0-rc.20"
+4
View File
@@ -18,6 +18,7 @@ members = [
"crates/api_clients/openart_client",
"crates/api_clients/runwayml_client",
"crates/api_clients/thumbnail_generator",
"crates/api_clients/world_labs_client",
# CLI tools for operations, etc.
"crates/cli/devenv/dev-database-seed",
@@ -67,6 +68,7 @@ members = [
"crates/lib/files/media",
"crates/lib/files/mimetypes",
"crates/lib/files/videos",
"crates/lib/http_headers",
"crates/lib/idempotency",
"crates/lib/image_algorithms",
"crates/lib/jobs_common",
@@ -199,6 +201,7 @@ fal_client = { path = "crates/api_clients/fal_client" }
file_to_base64_url = { path = "crates/lib/files/file_to_base64_url" }
filesys = { path = "crates/lib/files/filesys" }
grok_client = { path = "crates/api_clients/grok_client" }
http_headers = { path = "crates/lib/http_headers" }
idempotency = { path = "crates/lib/idempotency" }
images = { path = "crates/lib/files/images" }
jwt_light = { path = "crates/lib/jwt_light" }
@@ -217,6 +220,7 @@ testing = { path = "crates/lib/testing" }
tokens = { path = "crates/schema/public/tokens" }
url_utils = { path = "crates/lib/url_utils" }
web_base64 = { path = "crates/lib/data/web_base64" }
world_labs_client = { path = "crates/api_clients/world_labs_client" }
# External libs
# Centrally pinned versions so that we can uniformly upgrade/downgrade versions across the workspace
@@ -1,6 +1,6 @@
pub mod flux_pro_kontext_max_edit_image;
pub mod gpt_image_1_edit_image;
pub mod gemini_25_flash_edit_image;
pub mod gpt_image_1_edit_image;
pub mod qwen_edit_image;
pub mod seededit_3_edit_image;
@@ -0,0 +1,69 @@
use serde_derive::{Deserialize, Serialize};
use tokens::tokens::generic_inference_jobs::InferenceJobToken;
use tokens::tokens::media_files::MediaFileToken;
use utoipa::ToSchema;
pub const BYTEDANCE_SEEDREAM_V4_MULTI_FUNCTION_IMAGE_GEN_PATH: &str = "/v1/generate/image/multi_function/bytedance_seedream_4";
#[derive(Serialize, Deserialize, ToSchema)]
pub struct BytedanceSeedreamV4MultiFunctionImageGenRequest {
/// Idempotency token to prevent duplicate requests.
pub uuid_idempotency_token: String,
/// Text prompt to generate the image from.
pub prompt: Option<String>,
/// Image media tokens to include in the editing context.
/// If present, we're doing image editing (image-to-image / image-editing)
/// If absent, we're doing image generation (text-to-image)
pub image_media_tokens: Option<Vec<MediaFileToken>>,
/// Number of images to generate. Default is one.
pub num_images: Option<BytedanceSeedreamV4MultiFunctionImageGenNumImages>,
pub max_images: Option<BytedanceSeedreamV4MultiFunctionImageGenMaxImages>,
pub image_size: Option<BytedanceSeedreamV4MultiFunctionImageGenImageSize>,
}
#[derive(Copy, Clone, Debug, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum BytedanceSeedreamV4MultiFunctionImageGenNumImages {
One, // Default
Two,
Three,
Four,
}
#[derive(Copy, Clone, Debug, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum BytedanceSeedreamV4MultiFunctionImageGenMaxImages {
One, // Default
Two,
Three,
Four,
}
#[derive(Copy, Clone, Debug, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum BytedanceSeedreamV4MultiFunctionImageGenImageSize {
// Square
Square,
SquareHd,
// Tall
PortraitFourThree,
PortraitSixteenNine,
// Wide
LandscapeFourThree,
LandscapeSixteenNine,
// Auto
Auto,
Auto2k,
Auto4k,
}
#[derive(Serialize, Deserialize, ToSchema)]
pub struct BytedanceSeedreamV4MultiFunctionImageGenResponse {
pub success: bool,
pub inference_job_token: InferenceJobToken,
}
@@ -0,0 +1,68 @@
use serde_derive::{Deserialize, Serialize};
use tokens::tokens::generic_inference_jobs::InferenceJobToken;
use tokens::tokens::media_files::MediaFileToken;
use utoipa::ToSchema;
pub const BYTEDANCE_SEEDREAM_V4P5_MULTI_FUNCTION_IMAGE_GEN_PATH: &str = "/v1/generate/image/multi_function/bytedance_seedream_4p5";
#[derive(Serialize, Deserialize, ToSchema)]
pub struct BytedanceSeedreamV4p5MultiFunctionImageGenRequest {
/// Idempotency token to prevent duplicate requests.
pub uuid_idempotency_token: String,
/// Text prompt to generate the image from.
pub prompt: Option<String>,
/// Image media tokens to include in the editing context.
/// If present, we're doing image editing (image-to-image / image-editing)
/// If absent, we're doing image generation (text-to-image)
pub image_media_tokens: Option<Vec<MediaFileToken>>,
/// Number of images to generate. Default is one.
pub num_images: Option<BytedanceSeedreamV4p5MultiFunctionImageGenNumImages>,
pub max_images: Option<BytedanceSeedreamV4p5MultiFunctionImageGenMaxImages>,
pub image_size: Option<BytedanceSeedreamV4p5MultiFunctionImageGenImageSize>,
}
#[derive(Copy, Clone, Debug, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum BytedanceSeedreamV4p5MultiFunctionImageGenNumImages {
One, // Default
Two,
Three,
Four,
}
#[derive(Copy, Clone, Debug, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum BytedanceSeedreamV4p5MultiFunctionImageGenMaxImages {
One, // Default
Two,
Three,
Four,
}
#[derive(Copy, Clone, Debug, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum BytedanceSeedreamV4p5MultiFunctionImageGenImageSize {
// Square
Square,
SquareHd,
// Tall
PortraitFourThree,
PortraitSixteenNine,
// Wide
LandscapeFourThree,
LandscapeSixteenNine,
// Auto
Auto2k,
Auto4k,
}
#[derive(Serialize, Deserialize, ToSchema)]
pub struct BytedanceSeedreamV4p5MultiFunctionImageGenResponse {
pub success: bool,
pub inference_job_token: InferenceJobToken,
}
@@ -0,0 +1,95 @@
use serde_derive::{Deserialize, Serialize};
use tokens::tokens::generic_inference_jobs::InferenceJobToken;
use tokens::tokens::media_files::MediaFileToken;
use utoipa::ToSchema;
pub const GPT_IMAGE_1P5_MULTI_FUNCTION_IMAGE_GEN_PATH: &str = "/v1/generate/image/multi_function/gpt_image_1p5";
#[derive(Serialize, Deserialize, ToSchema)]
pub struct GptImage1p5MultiFunctionImageGenRequest {
/// Idempotency token to prevent duplicate requests.
pub uuid_idempotency_token: String,
/// Text prompt to generate the image from.
pub prompt: Option<String>,
/// Image media tokens to include in the editing context (**OR INPAINTING CONTEXT!**).
/// If present, we're doing image editing (image-to-image / image-editing / image-inpainting)
/// If absent, we're doing image generation (text-to-image)
pub image_media_tokens: Option<Vec<MediaFileToken>>,
/// Only for image editing, which turns this into an inpainting task.
/// Text to image should not set this.
pub mask_image_token: Option<MediaFileToken>,
/// Number of images to generate. Default is one.
pub num_images: Option<GptImage1p5MultiFunctionImageGenNumImages>,
pub image_size: Option<GptImage1p5MultiFunctionImageGenSize>,
pub background: Option<GptImage1p5MultiFunctionImageGenBackground>,
pub quality: Option<GptImage1p5MultiFunctionImageGenQuality>,
/// Only for image editing.
pub input_fidelity: Option<GptImage1p5MultiFunctionImageGenInputFidelity>,
pub output_format: Option<GptImage1p5MultiFunctionImageGenOutputFormat>,
}
#[derive(Copy, Clone, Debug, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum GptImage1p5MultiFunctionImageGenNumImages {
One, // Default
Two,
Three,
Four,
}
#[derive(Copy, Clone, Debug, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum GptImage1p5MultiFunctionImageGenSize {
/// 1024x1024
Square,
/// 1536x1024
Wide,
/// 1024x1536
Tall,
}
#[derive(Copy, Clone, Debug, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum GptImage1p5MultiFunctionImageGenBackground {
Auto,
Transparent,
Opaque,
}
#[derive(Copy, Clone, Debug, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum GptImage1p5MultiFunctionImageGenQuality {
Low,
Medium,
High,
}
#[derive(Copy, Clone, Debug, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum GptImage1p5MultiFunctionImageGenInputFidelity {
Low,
High,
}
#[derive(Copy, Clone, Debug, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum GptImage1p5MultiFunctionImageGenOutputFormat {
Jpeg,
Png,
Webp,
}
#[derive(Serialize, Deserialize, ToSchema)]
pub struct GptImage1p5MultiFunctionImageGenResponse {
pub success: bool,
pub inference_job_token: InferenceJobToken,
}
@@ -1 +1,4 @@
pub mod bytedance_seedream_v4_multi_function_image_gen;
pub mod bytedance_seedream_v4p5_multi_function_image_gen;
pub mod gpt_image_1p5_multi_function_image_gen;
pub mod nano_banana_pro_multi_function_image_gen;
@@ -5,4 +5,5 @@ pub mod generate_seedance_1_0_lite_image_to_video;
pub mod generate_seedance_1_0_pro_image_to_video;
pub mod generate_veo_2_image_to_video;
pub mod generate_veo_3_fast_image_to_video;
pub mod generate_veo_3_image_to_video;
pub mod generate_veo_3_image_to_video;
pub mod multi_function;
@@ -0,0 +1,64 @@
use serde::{Deserialize, Serialize};
use tokens::tokens::generic_inference_jobs::InferenceJobToken;
use tokens::tokens::media_files::MediaFileToken;
use utoipa::ToSchema;
pub const KLING_2P5_TURBO_PRO_MULTI_FUNCTION_VIDEO_VIDEO_PATH: &str = "/v1/generate/video/multi_function/kling_2p5_turbo_pro";
/// Both text-to-video and image-to-video in one request.
#[derive(Serialize, Deserialize, ToSchema)]
pub struct Kling2p5TurboProMultiFunctionVideoGenRequest {
/// Idempotency token to prevent duplicate requests.
pub uuid_idempotency_token: String,
/// "Required".
/// Required downstream, but we'll coerce null to empty string.
/// Text prompt.
pub prompt: Option<String>,
/// Optional.
/// Only for text-to-video.
pub negative_prompt: Option<String>,
/// Optional.
/// Only for image-to-video
/// Source of the starting frame
/// If present, we're doing image-to-video
/// If absent, we're doing text-to-video
pub start_frame_image_media_token: Option<MediaFileToken>,
/// Optional.
/// Only for image-to-video
/// Source of the ending frame (if desired)
pub end_frame_image_media_token: Option<MediaFileToken>,
/// Optional
/// Duration of the video
pub duration: Option<Kling2p5TurboProMultiFunctionVideoGenDuration>,
/// Optional.
/// Only for text-to-video
pub aspect_ratio: Option<Kling2p5TurboProMultiFunctionVideoGenAspectRatio>,
}
#[derive(Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum Kling2p5TurboProMultiFunctionVideoGenDuration {
FiveSeconds,
TenSeconds,
}
#[derive(Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum Kling2p5TurboProMultiFunctionVideoGenAspectRatio {
Square,
SixteenByNine,
NineBySixteen,
}
#[derive(Serialize, Deserialize, ToSchema)]
pub struct Kling2p5TurboProMultiFunctionVideoGenResponse {
pub success: bool,
pub inference_job_token: InferenceJobToken,
}
@@ -0,0 +1,68 @@
use serde::{Deserialize, Serialize};
use tokens::tokens::generic_inference_jobs::InferenceJobToken;
use tokens::tokens::media_files::MediaFileToken;
use utoipa::ToSchema;
pub const KLING_2P6_PRO_MULTI_FUNCTION_VIDEO_VIDEO_PATH: &str = "/v1/generate/video/multi_function/kling_2p6_pro";
/// Both text-to-video and image-to-video in one request.
#[derive(Serialize, Deserialize, ToSchema)]
pub struct Kling2p6ProMultiFunctionVideoGenRequest {
/// Idempotency token to prevent duplicate requests.
pub uuid_idempotency_token: String,
/// "Required".
/// Required downstream, but we'll coerce null to empty string.
/// Text prompt.
pub prompt: Option<String>,
/// Optional.
/// Only for text-to-video.
pub negative_prompt: Option<String>,
/// Optional.
/// Only for image-to-video
/// Source of the starting frame
/// If present, we're doing image-to-video
/// If absent, we're doing text-to-video
pub start_frame_image_media_token: Option<MediaFileToken>,
// /// Optional.
// /// Only for image-to-video
// /// Source of the ending frame (if desired)
// pub end_frame_image_media_token: Option<MediaFileToken>,
/// Optional
/// Duration of the video
pub duration: Option<Kling2p6ProMultiFunctionVideoGenDuration>,
/// Optional
/// Whether to generate audio.
pub generate_audio: Option<bool>,
/// Optional.
/// Only for text-to-video
pub aspect_ratio: Option<Kling2p6ProMultiFunctionVideoGenAspectRatio>,
}
#[derive(Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum Kling2p6ProMultiFunctionVideoGenDuration {
FiveSeconds,
TenSeconds,
}
#[derive(Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum Kling2p6ProMultiFunctionVideoGenAspectRatio {
Square,
SixteenByNine,
NineBySixteen,
}
#[derive(Serialize, Deserialize, ToSchema)]
pub struct Kling2p6ProMultiFunctionVideoGenResponse {
pub success: bool,
pub inference_job_token: InferenceJobToken,
}
@@ -0,0 +1,6 @@
pub mod kling_2_5_turbo_multi_function_video_gen;
pub mod kling_2_6_multi_function_video_gen;
pub mod sora_2_multi_function_video_gen;
pub mod sora_2_pro_multi_function_video_gen;
pub mod veo_3p1_fast_multi_function_video_gen;
pub mod veo_3p1_multi_function_video_gen;
@@ -0,0 +1,66 @@
use serde::{Deserialize, Serialize};
use tokens::tokens::generic_inference_jobs::InferenceJobToken;
use tokens::tokens::media_files::MediaFileToken;
use utoipa::ToSchema;
pub const SORA_2_MULTI_FUNCTION_VIDEO_VIDEO_PATH: &str = "/v1/generate/video/multi_function/sora_2";
/// Both text-to-video and image-to-video in one request.
#[derive(Serialize, Deserialize, ToSchema)]
pub struct Sora2MultiFunctionVideoGenRequest {
/// Idempotency token to prevent duplicate requests.
pub uuid_idempotency_token: String,
/// "Required".
/// Required downstream, but we'll coerce null to empty string.
/// Text prompt.
pub prompt: Option<String>,
/// Optional.
/// Only for image-to-video
/// Source of the starting frame
/// If present, we're doing image-to-video
/// If absent, we're doing text-to-video
pub image_media_token: Option<MediaFileToken>,
/// Optional.
pub resolution: Option<Sora2MultiFunctionVideoGenResolution>,
/// Optional
/// Duration of the video
/// (this is uniform against all modes)
pub duration: Option<Sora2MultiFunctionVideoGenDuration>,
/// Optional.
pub aspect_ratio: Option<Sora2MultiFunctionVideoGenAspectRatio>,
}
#[derive(Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum Sora2MultiFunctionVideoGenResolution {
Auto,
SevenTwentyP,
}
#[derive(Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum Sora2MultiFunctionVideoGenDuration {
FourSeconds,
EightSeconds,
TwelveSeconds,
}
#[derive(Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum Sora2MultiFunctionVideoGenAspectRatio {
Auto,
NineBySixteen,
SixteenByNine,
}
#[derive(Serialize, Deserialize, ToSchema)]
pub struct Sora2MultiFunctionVideoGenResponse {
pub success: bool,
pub inference_job_token: InferenceJobToken,
}
@@ -0,0 +1,67 @@
use serde::{Deserialize, Serialize};
use tokens::tokens::generic_inference_jobs::InferenceJobToken;
use tokens::tokens::media_files::MediaFileToken;
use utoipa::ToSchema;
pub const SORA_2_PRO_MULTI_FUNCTION_VIDEO_VIDEO_PATH: &str = "/v1/generate/video/multi_function/sora_2_pro";
/// Both text-to-video and image-to-video in one request.
#[derive(Serialize, Deserialize, ToSchema)]
pub struct Sora2ProMultiFunctionVideoGenRequest {
/// Idempotency token to prevent duplicate requests.
pub uuid_idempotency_token: String,
/// "Required".
/// Required downstream, but we'll coerce null to empty string.
/// Text prompt.
pub prompt: Option<String>,
/// Optional.
/// Only for image-to-video
/// Source of the starting frame
/// If present, we're doing image-to-video
/// If absent, we're doing text-to-video
pub image_media_token: Option<MediaFileToken>,
/// Optional.
pub resolution: Option<Sora2ProMultiFunctionVideoGenResolution>,
/// Optional
/// Duration of the video
/// (this is uniform against all modes)
pub duration: Option<Sora2ProMultiFunctionVideoGenDuration>,
/// Optional.
pub aspect_ratio: Option<Sora2ProMultiFunctionVideoGenAspectRatio>,
}
#[derive(Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum Sora2ProMultiFunctionVideoGenResolution {
Auto,
SevenTwentyP,
TenEightyP,
}
#[derive(Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum Sora2ProMultiFunctionVideoGenDuration {
FourSeconds,
EightSeconds,
TwelveSeconds,
}
#[derive(Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum Sora2ProMultiFunctionVideoGenAspectRatio {
Auto,
NineBySixteen,
SixteenByNine,
}
#[derive(Serialize, Deserialize, ToSchema)]
pub struct Sora2ProMultiFunctionVideoGenResponse {
pub success: bool,
pub inference_job_token: InferenceJobToken,
}
@@ -0,0 +1,90 @@
use serde::{Deserialize, Serialize};
use tokens::tokens::generic_inference_jobs::InferenceJobToken;
use tokens::tokens::media_files::MediaFileToken;
use utoipa::ToSchema;
pub const VEO_3P1_FAST_MULTI_FUNCTION_VIDEO_VIDEO_PATH: &str = "/v1/generate/video/multi_function/veo_3p1_fast";
/// Both text-to-video and image-to-video in one request.
#[derive(Serialize, Deserialize, ToSchema)]
pub struct Veo3p1FastMultiFunctionVideoGenRequest {
/// Idempotency token to prevent duplicate requests.
pub uuid_idempotency_token: String,
/// "Required".
/// Required downstream, but we'll coerce null to empty string.
/// Text prompt.
pub prompt: Option<String>,
/// Optional.
/// Only for text-to-video.
pub negative_prompt: Option<String>,
/// Optional.
/// Only for image-to-video
/// Source of the starting frame
/// If present, we're doing image-to-video
/// If absent, we're doing text-to-video
pub start_frame_image_media_token: Option<MediaFileToken>,
/// Optional.
/// Only for image-to-video
/// Source of the ending frame (if desired)
pub end_frame_image_media_token: Option<MediaFileToken>,
/// Optional
/// Duration of the video
/// (this is uniform against all modes)
pub duration: Option<Veo3p1FastMultiFunctionVideoGenDuration>,
/// Optional.
pub aspect_ratio: Option<Veo3p1FastMultiFunctionVideoGenAspectRatio>,
/// Optional.
pub resolution: Option<Veo3p1FastMultiFunctionVideoGenResolution>,
/// Optional
/// Whether to generate audio.
pub generate_audio: Option<bool>,
/// Optional
/// Only for text-to-video
pub enhance_prompt: Option<bool>,
/// Optional
/// Only for text-to-video
pub seed: Option<i64>,
/// Optional
/// Only for text-to-video
pub auto_fix: Option<bool>,
}
#[derive(Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum Veo3p1FastMultiFunctionVideoGenDuration {
FourSeconds,
SixSeconds,
EightSeconds,
}
#[derive(Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum Veo3p1FastMultiFunctionVideoGenAspectRatio {
Auto,
SixteenByNine,
NineBySixteen,
}
#[derive(Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum Veo3p1FastMultiFunctionVideoGenResolution {
SevenTwentyP,
TenEightyP,
}
#[derive(Serialize, Deserialize, ToSchema)]
pub struct Veo3p1FastMultiFunctionVideoGenResponse {
pub success: bool,
pub inference_job_token: InferenceJobToken,
}
@@ -0,0 +1,90 @@
use serde::{Deserialize, Serialize};
use tokens::tokens::generic_inference_jobs::InferenceJobToken;
use tokens::tokens::media_files::MediaFileToken;
use utoipa::ToSchema;
pub const VEO_3P1_MULTI_FUNCTION_VIDEO_VIDEO_PATH: &str = "/v1/generate/video/multi_function/veo_3p1";
/// Both text-to-video and image-to-video in one request.
#[derive(Serialize, Deserialize, ToSchema)]
pub struct Veo3p1MultiFunctionVideoGenRequest {
/// Idempotency token to prevent duplicate requests.
pub uuid_idempotency_token: String,
/// "Required".
/// Required downstream, but we'll coerce null to empty string.
/// Text prompt.
pub prompt: Option<String>,
/// Optional.
/// Only for text-to-video.
pub negative_prompt: Option<String>,
/// Optional.
/// Only for image-to-video
/// Source of the starting frame
/// If present, we're doing image-to-video
/// If absent, we're doing text-to-video
pub start_frame_image_media_token: Option<MediaFileToken>,
/// Optional.
/// Only for image-to-video
/// Source of the ending frame (if desired)
pub end_frame_image_media_token: Option<MediaFileToken>,
/// Optional
/// Duration of the video
/// (this is uniform against all modes)
pub duration: Option<Veo3p1MultiFunctionVideoGenDuration>,
/// Optional.
pub aspect_ratio: Option<Veo3p1MultiFunctionVideoGenAspectRatio>,
/// Optional.
pub resolution: Option<Veo3p1MultiFunctionVideoGenResolution>,
/// Optional
/// Whether to generate audio.
pub generate_audio: Option<bool>,
/// Optional
/// Only for text-to-video
pub enhance_prompt: Option<bool>,
/// Optional
/// Only for text-to-video
pub seed: Option<i64>,
/// Optional
/// Only for text-to-video
pub auto_fix: Option<bool>,
}
#[derive(Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum Veo3p1MultiFunctionVideoGenDuration {
FourSeconds,
SixSeconds,
EightSeconds,
}
#[derive(Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum Veo3p1MultiFunctionVideoGenAspectRatio {
Auto,
SixteenByNine,
NineBySixteen,
}
#[derive(Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum Veo3p1MultiFunctionVideoGenResolution {
SevenTwentyP,
TenEightyP,
}
#[derive(Serialize, Deserialize, ToSchema)]
pub struct Veo3p1MultiFunctionVideoGenResponse {
pub success: bool,
pub inference_job_token: InferenceJobToken,
}
@@ -0,0 +1,18 @@
use crate::credentials::storyteller_credential_set::StorytellerCredentialSet;
use crate::error::storyteller_error::StorytellerError;
use crate::utils::api_host::ApiHost;
use crate::utils::basic_json_post_request::basic_json_post_request;
use artcraft_api_defs::generate::image::multi_function::bytedance_seedream_v4_multi_function_image_gen::{BytedanceSeedreamV4MultiFunctionImageGenRequest, BytedanceSeedreamV4MultiFunctionImageGenResponse, BYTEDANCE_SEEDREAM_V4_MULTI_FUNCTION_IMAGE_GEN_PATH};
pub async fn bytedance_seedream_v4_multi_function_image_gen(
api_host: &ApiHost,
maybe_creds: Option<&StorytellerCredentialSet>,
request: BytedanceSeedreamV4MultiFunctionImageGenRequest,
) -> Result<BytedanceSeedreamV4MultiFunctionImageGenResponse, StorytellerError> {
Ok(basic_json_post_request(
api_host,
BYTEDANCE_SEEDREAM_V4_MULTI_FUNCTION_IMAGE_GEN_PATH,
maybe_creds,
request,
).await?)
}
@@ -0,0 +1,18 @@
use crate::credentials::storyteller_credential_set::StorytellerCredentialSet;
use crate::error::storyteller_error::StorytellerError;
use crate::utils::api_host::ApiHost;
use crate::utils::basic_json_post_request::basic_json_post_request;
use artcraft_api_defs::generate::image::multi_function::bytedance_seedream_v4p5_multi_function_image_gen::{BytedanceSeedreamV4p5MultiFunctionImageGenRequest, BytedanceSeedreamV4p5MultiFunctionImageGenResponse, BYTEDANCE_SEEDREAM_V4P5_MULTI_FUNCTION_IMAGE_GEN_PATH};
pub async fn bytedance_seedream_v4p5_multi_function_image_gen(
api_host: &ApiHost,
maybe_creds: Option<&StorytellerCredentialSet>,
request: BytedanceSeedreamV4p5MultiFunctionImageGenRequest,
) -> Result<BytedanceSeedreamV4p5MultiFunctionImageGenResponse, StorytellerError> {
Ok(basic_json_post_request(
api_host,
BYTEDANCE_SEEDREAM_V4P5_MULTI_FUNCTION_IMAGE_GEN_PATH,
maybe_creds,
request,
).await?)
}
@@ -0,0 +1,18 @@
use crate::credentials::storyteller_credential_set::StorytellerCredentialSet;
use crate::error::storyteller_error::StorytellerError;
use crate::utils::api_host::ApiHost;
use crate::utils::basic_json_post_request::basic_json_post_request;
use artcraft_api_defs::generate::image::multi_function::gpt_image_1p5_multi_function_image_gen::{GptImage1p5MultiFunctionImageGenRequest, GptImage1p5MultiFunctionImageGenResponse, GPT_IMAGE_1P5_MULTI_FUNCTION_IMAGE_GEN_PATH};
pub async fn gpt_image_1p5_multi_function_image_gen(
api_host: &ApiHost,
maybe_creds: Option<&StorytellerCredentialSet>,
request: GptImage1p5MultiFunctionImageGenRequest,
) -> Result<GptImage1p5MultiFunctionImageGenResponse, StorytellerError> {
Ok(basic_json_post_request(
api_host,
GPT_IMAGE_1P5_MULTI_FUNCTION_IMAGE_GEN_PATH,
maybe_creds,
request,
).await?)
}
@@ -1 +1,4 @@
pub mod bytedance_seedream_v4_multi_function_image_gen_image;
pub mod bytedance_seedream_v4p5_multi_function_image_gen_image;
pub mod gpt_image_1p5_multi_function_image_gen_image;
pub mod nano_banana_pro_multi_function_image_gen_image;
@@ -5,3 +5,4 @@ pub mod generate_seedance_1_0_lite_image_to_video;
pub mod generate_veo_2_image_to_video;
pub mod generate_veo_3_fast_image_to_video;
pub mod generate_veo_3_image_to_video;
pub mod multi_function;
@@ -0,0 +1,18 @@
use crate::credentials::storyteller_credential_set::StorytellerCredentialSet;
use crate::error::storyteller_error::StorytellerError;
use crate::utils::api_host::ApiHost;
use crate::utils::basic_json_post_request::basic_json_post_request;
use artcraft_api_defs::generate::video::multi_function::kling_2_5_turbo_multi_function_video_gen::{Kling2p5TurboProMultiFunctionVideoGenRequest, Kling2p5TurboProMultiFunctionVideoGenResponse, KLING_2P5_TURBO_PRO_MULTI_FUNCTION_VIDEO_VIDEO_PATH};
pub async fn kling_2p5_turbo_pro_multi_function_image_gen(
api_host: &ApiHost,
maybe_creds: Option<&StorytellerCredentialSet>,
request: Kling2p5TurboProMultiFunctionVideoGenRequest,
) -> Result<Kling2p5TurboProMultiFunctionVideoGenResponse, StorytellerError> {
Ok(basic_json_post_request(
api_host,
KLING_2P5_TURBO_PRO_MULTI_FUNCTION_VIDEO_VIDEO_PATH,
maybe_creds,
request,
).await?)
}
@@ -0,0 +1,18 @@
use crate::credentials::storyteller_credential_set::StorytellerCredentialSet;
use crate::error::storyteller_error::StorytellerError;
use crate::utils::api_host::ApiHost;
use crate::utils::basic_json_post_request::basic_json_post_request;
use artcraft_api_defs::generate::video::multi_function::kling_2_6_multi_function_video_gen::{Kling2p6ProMultiFunctionVideoGenRequest, Kling2p6ProMultiFunctionVideoGenResponse, KLING_2P6_PRO_MULTI_FUNCTION_VIDEO_VIDEO_PATH};
pub async fn kling_2p6_pro_multi_function_image_gen(
api_host: &ApiHost,
maybe_creds: Option<&StorytellerCredentialSet>,
request: Kling2p6ProMultiFunctionVideoGenRequest,
) -> Result<Kling2p6ProMultiFunctionVideoGenResponse, StorytellerError> {
Ok(basic_json_post_request(
api_host,
KLING_2P6_PRO_MULTI_FUNCTION_VIDEO_VIDEO_PATH,
maybe_creds,
request,
).await?)
}
@@ -0,0 +1,6 @@
pub mod kling_2p5_turbo_pro_multi_function_video_gen;
pub mod kling_2p6_pro_multi_function_video_gen;
pub mod sora_2_multi_function_video_gen;
pub mod sora_2_pro_multi_function_video_gen;
pub mod veo_3p1_fast_multi_function_video_gen;
pub mod veo_3p1_multi_function_video_gen;
@@ -0,0 +1,18 @@
use crate::credentials::storyteller_credential_set::StorytellerCredentialSet;
use crate::error::storyteller_error::StorytellerError;
use crate::utils::api_host::ApiHost;
use crate::utils::basic_json_post_request::basic_json_post_request;
use artcraft_api_defs::generate::video::multi_function::sora_2_multi_function_video_gen::{Sora2MultiFunctionVideoGenRequest, Sora2MultiFunctionVideoGenResponse, SORA_2_MULTI_FUNCTION_VIDEO_VIDEO_PATH};
pub async fn sora_2_multi_function_image_gen(
api_host: &ApiHost,
maybe_creds: Option<&StorytellerCredentialSet>,
request: Sora2MultiFunctionVideoGenRequest,
) -> Result<Sora2MultiFunctionVideoGenResponse, StorytellerError> {
Ok(basic_json_post_request(
api_host,
SORA_2_MULTI_FUNCTION_VIDEO_VIDEO_PATH,
maybe_creds,
request,
).await?)
}
@@ -0,0 +1,18 @@
use crate::credentials::storyteller_credential_set::StorytellerCredentialSet;
use crate::error::storyteller_error::StorytellerError;
use crate::utils::api_host::ApiHost;
use crate::utils::basic_json_post_request::basic_json_post_request;
use artcraft_api_defs::generate::video::multi_function::sora_2_pro_multi_function_video_gen::{Sora2ProMultiFunctionVideoGenRequest, Sora2ProMultiFunctionVideoGenResponse, SORA_2_PRO_MULTI_FUNCTION_VIDEO_VIDEO_PATH};
pub async fn sora_2_fast_multi_function_image_gen(
api_host: &ApiHost,
maybe_creds: Option<&StorytellerCredentialSet>,
request: Sora2ProMultiFunctionVideoGenRequest,
) -> Result<Sora2ProMultiFunctionVideoGenResponse, StorytellerError> {
Ok(basic_json_post_request(
api_host,
SORA_2_PRO_MULTI_FUNCTION_VIDEO_VIDEO_PATH,
maybe_creds,
request,
).await?)
}
@@ -0,0 +1,18 @@
use crate::credentials::storyteller_credential_set::StorytellerCredentialSet;
use crate::error::storyteller_error::StorytellerError;
use crate::utils::api_host::ApiHost;
use crate::utils::basic_json_post_request::basic_json_post_request;
use artcraft_api_defs::generate::video::multi_function::veo_3p1_fast_multi_function_video_gen::{Veo3p1FastMultiFunctionVideoGenRequest, Veo3p1FastMultiFunctionVideoGenResponse, VEO_3P1_FAST_MULTI_FUNCTION_VIDEO_VIDEO_PATH};
pub async fn veo_3p1_fast_multi_function_image_gen(
api_host: &ApiHost,
maybe_creds: Option<&StorytellerCredentialSet>,
request: Veo3p1FastMultiFunctionVideoGenRequest,
) -> Result<Veo3p1FastMultiFunctionVideoGenResponse, StorytellerError> {
Ok(basic_json_post_request(
api_host,
VEO_3P1_FAST_MULTI_FUNCTION_VIDEO_VIDEO_PATH,
maybe_creds,
request,
).await?)
}
@@ -0,0 +1,18 @@
use crate::credentials::storyteller_credential_set::StorytellerCredentialSet;
use crate::error::storyteller_error::StorytellerError;
use crate::utils::api_host::ApiHost;
use crate::utils::basic_json_post_request::basic_json_post_request;
use artcraft_api_defs::generate::video::multi_function::veo_3p1_multi_function_video_gen::{Veo3p1MultiFunctionVideoGenRequest, Veo3p1MultiFunctionVideoGenResponse, VEO_3P1_MULTI_FUNCTION_VIDEO_VIDEO_PATH};
pub async fn veo_3p1_multi_function_image_gen(
api_host: &ApiHost,
maybe_creds: Option<&StorytellerCredentialSet>,
request: Veo3p1MultiFunctionVideoGenRequest,
) -> Result<Veo3p1MultiFunctionVideoGenResponse, StorytellerError> {
Ok(basic_json_post_request(
api_host,
VEO_3P1_MULTI_FUNCTION_VIDEO_VIDEO_PATH,
maybe_creds,
request,
).await?)
}
@@ -0,0 +1,143 @@
use crate::credentials::storyteller_credential_set::StorytellerCredentialSet;
use crate::error::api_error::ApiError;
use crate::error::client_error::ClientError;
use crate::error::storyteller_error::StorytellerError;
use crate::utils::api_host::ApiHost;
use crate::utils::constants::{APPLICATION_JSON, USER_AGENT};
use crate::utils::filter_bad_response::filter_bad_response;
use crate::utils::http_get_anonymous::http_get_anonymous;
use chrono::{DateTime, Utc};
use enums::by_table::media_files::media_file_animation_type::MediaFileAnimationType;
use enums::by_table::media_files::media_file_class::MediaFileClass;
use enums::by_table::media_files::media_file_engine_category::MediaFileEngineCategory;
use enums::by_table::media_files::media_file_type::MediaFileType;
use enums::by_table::model_weights::weights_category::WeightsCategory;
use enums::common::generation_provider::GenerationProvider;
use enums::common::visibility::Visibility;
use enums::no_table::style_transfer::style_transfer_name::StyleTransferName;
use enums_public::by_table::model_weights::public_weights_types::PublicWeightsType;
use idempotency::uuid::generate_random_uuid;
use log::debug;
use reqwest::multipart::Form;
use reqwest::Client;
use serde_derive::{Deserialize, Serialize};
use std::fs::File;
use std::io::Read;
use std::path::Path;
use tokens::tokens::batch_generations::BatchGenerationToken;
use tokens::tokens::media_files::MediaFileToken;
use tokens::tokens::model_weights::ModelWeightToken;
use tokens::tokens::prompts::PromptToken;
use uuid::uuid;
pub struct LegacyUploadMediaFileFromFileArgs<'a, P: AsRef<Path>> {
pub api_host: &'a ApiHost,
pub maybe_creds: Option<&'a StorytellerCredentialSet>,
// NB: Path needs to be owned for the request.
pub path: P,
// /// If true, we should hide the image from the user's gallery.
// pub is_intermediate_system_file: bool,
// /// If provided, this is the prompt that this image is associated with.
// /// NOTE: Cannot set `is_intermediate_system_file = true` if this is set.
// pub maybe_prompt_token: Option<&'a PromptToken>,
// /// If provided, this is the service provider that created the image.
// /// NOTE: Cannot set `is_intermediate_system_file = true` if this is set.
// pub maybe_generation_provider: Option<GenerationProvider>,
// /// If provided, this groups the file into a batch
// /// TODO: This shouldn't be set clientside without the backend generating the token
// /// and cryptographically securing it. But we need to go fast here.
// pub maybe_batch_token: Option<&'a BatchGenerationToken>,
}
/// Upload using the legacy endpoint (spz, etc.)
pub async fn legacy_upload_media_file_from_file<P: AsRef<Path>>(
args: LegacyUploadMediaFileFromFileArgs<'_, P>,
) -> Result<UploadImageMediaFileSuccessResponse, StorytellerError> {
validate_args(&args)?;
let url = get_route(args.api_host);
debug!("Requesting {:?}", &url);
//let mut file = File::open(path)?;
let client = Client::builder()
.gzip(true)
.build()
.map_err(|err| StorytellerError::Client(ClientError::from(err)))?;
let mut form = Form::new()
.text("uuid_idempotency_token", generate_random_uuid())
.file("file", args.path)
.await
.map_err(|err| StorytellerError::Client(ClientError::from(err)))?;
//if args.is_intermediate_system_file {
// form = form.text("is_intermediate_system_file", "true");
//}
//if let Some(prompt_token) = &args.maybe_prompt_token {
// form = form.text("maybe_prompt_token", prompt_token.to_string());
//}
//if let Some(batch_token) = &args.maybe_batch_token {
// form = form.text("maybe_batch_token", batch_token.to_string());
//}
let mut request_builder = client.post(url)
.header("User-Agent", USER_AGENT)
.header("Accept", APPLICATION_JSON);
if let Some(creds) = args.maybe_creds {
if let Some(header) = &creds.maybe_as_cookie_header() {
request_builder = request_builder.header("Cookie", header);
}
}
let response = request_builder
.multipart(form)
.send()
.await
.map_err(|err| StorytellerError::Api(ApiError::from(err)))?;
let response = filter_bad_response(response).await?;
let response_body = &response.text().await
.map_err(|err| StorytellerError::Api(ApiError::from(err)))?;
let media_file = serde_json::from_str(&response_body)
.map_err(|err| StorytellerError::Api(ApiError::from(err)))?;
Ok(media_file)
}
fn get_route(api_host: &ApiHost) -> String {
let api_hostname_and_scheme = api_host.to_api_hostname_and_scheme();
format!("{}/v1/media_files/upload", api_hostname_and_scheme)
}
// TODO(bt,2025-04-22): Share API definitions between client and server in common crate.
#[derive(Deserialize, Debug)]
pub struct UploadImageMediaFileSuccessResponse {
pub success: bool,
pub media_file_token: MediaFileToken,
}
fn validate_args<P: AsRef<Path>>(
args: &LegacyUploadMediaFileFromFileArgs<'_, P>,
) -> Result<(), StorytellerError> {
// if args.is_intermediate_system_file && args.maybe_prompt_token.is_some() {
// return Err(StorytellerError::Client(ClientError::InvalidPreflightRequest(
// "Cannot set `is_intermediate_system_file` to true if `maybe_prompt_token` is provided."
// .to_string())));
// }
Ok(())
}
@@ -5,3 +5,4 @@ pub mod upload_image_media_file_from_bytes;
pub mod upload_image_media_file_from_file;
pub mod upload_new_engine_asset_from_file;
pub mod upload_video_media_file_from_file;
pub mod legacy_upload_media_file_from_file;
@@ -0,0 +1,182 @@
use crate::creds::fal_api_key::FalApiKey;
use crate::error::classify_fal_error::classify_fal_error;
use crate::error::fal_error_plus::FalErrorPlus;
use fal::endpoints::fal_ai::gpt_image::gpt_image_1p5_image_edit::{gpt_image_1p5_image_edit, GptImage1p5ImageEditInput};
use fal::webhook::WebhookResponse;
use reqwest::IntoUrl;
pub struct EnqueueGptImage1p5EditImageArgs<'a, R: IntoUrl> {
// Request required
pub prompt: &'a str,
pub image_urls: Vec<String>,
pub num_images: EnqueueGptImage1p5EditImageNumImages,
// Optional args
pub mask_image_url: Option<String>,
pub image_size: Option<EnqueueGptImage1p5EditImageSize>,
pub background: Option<EnqueueGptImage1p5EditImageBackground>,
pub quality: Option<EnqueueGptImage1p5EditImageQuality>,
pub input_fidelity: Option<EnqueueGptImage1p5EditImageInputFidelity>,
pub output_format: Option<EnqueueGptImage1p5EditImageOutputFormat>,
// Fulfillment
pub webhook_url: R,
pub api_key: &'a FalApiKey,
}
#[derive(Copy, Clone, Debug)]
pub enum EnqueueGptImage1p5EditImageNumImages {
One,
Two,
Three,
Four,
}
#[derive(Copy, Clone, Debug)]
pub enum EnqueueGptImage1p5EditImageSize {
/// 1024x1024
Square,
/// 1536x1024
Wide,
/// 1024x1536
Tall,
}
#[derive(Copy, Clone, Debug)]
pub enum EnqueueGptImage1p5EditImageBackground {
Auto,
Transparent,
Opaque,
}
#[derive(Copy, Clone, Debug)]
pub enum EnqueueGptImage1p5EditImageQuality {
Low,
Medium,
High,
}
#[derive(Copy, Clone, Debug)]
pub enum EnqueueGptImage1p5EditImageInputFidelity {
Low,
High,
}
#[derive(Copy, Clone, Debug)]
pub enum EnqueueGptImage1p5EditImageOutputFormat {
Jpeg,
Png,
Webp,
}
pub async fn enqueue_gpt_image_1p5_image_edit_webhook<R: IntoUrl>(
args: EnqueueGptImage1p5EditImageArgs<'_, R>
) -> Result<WebhookResponse, FalErrorPlus> {
let num_images = match args.num_images {
EnqueueGptImage1p5EditImageNumImages::One => 1,
EnqueueGptImage1p5EditImageNumImages::Two => 2,
EnqueueGptImage1p5EditImageNumImages::Three => 3,
EnqueueGptImage1p5EditImageNumImages::Four => 4,
};
let image_size = args.image_size
.map(|s| match s {
EnqueueGptImage1p5EditImageSize::Square => "1024x1024",
EnqueueGptImage1p5EditImageSize::Wide => "1536x1024",
EnqueueGptImage1p5EditImageSize::Tall => "1024x1536",
})
.map(|resolution| resolution.to_string());
let background = args.background
.map(|s| match s {
EnqueueGptImage1p5EditImageBackground::Auto => "auto",
EnqueueGptImage1p5EditImageBackground::Transparent => "transparent",
EnqueueGptImage1p5EditImageBackground::Opaque => "opaque",
})
.map(|aspect_ratio| aspect_ratio.to_string());
let quality = args.quality
.map(|s| match s {
EnqueueGptImage1p5EditImageQuality::Low => "low",
EnqueueGptImage1p5EditImageQuality::Medium => "medium",
EnqueueGptImage1p5EditImageQuality::High => "high",
})
.map(|aspect_ratio| aspect_ratio.to_string());
let input_fidelity = args.input_fidelity
.map(|s| match s {
EnqueueGptImage1p5EditImageInputFidelity::Low => "low",
EnqueueGptImage1p5EditImageInputFidelity::High => "high",
})
.map(|aspect_ratio| aspect_ratio.to_string());
let output_format = args.output_format
.map(|s| match s {
EnqueueGptImage1p5EditImageOutputFormat::Jpeg => "jpeg",
EnqueueGptImage1p5EditImageOutputFormat::Png => "png",
EnqueueGptImage1p5EditImageOutputFormat::Webp => "webp",
})
.map(|aspect_ratio| aspect_ratio.to_string())
.unwrap_or_else(|| "png".to_string());
let request = GptImage1p5ImageEditInput {
prompt: args.prompt.to_string(),
image_urls: args.image_urls,
num_images: Some(num_images),
output_format: Some(output_format),
// Optionals
mask_image_url: args.mask_image_url,
image_size,
background,
quality,
input_fidelity,
};
let result = gpt_image_1p5_image_edit(request)
.with_api_key(&args.api_key.0)
.queue_webhook(args.webhook_url)
.await;
result.map_err(|err| classify_fal_error(err))
}
#[cfg(test)]
mod tests {
use crate::creds::fal_api_key::FalApiKey;
use crate::requests::webhook::image::edit::enqueue_gpt_image_1p5_edit_image_webhook::{enqueue_gpt_image_1p5_image_edit_webhook, EnqueueGptImage1p5EditImageArgs, EnqueueGptImage1p5EditImageNumImages};
use errors::AnyhowResult;
use std::fs::read_to_string;
use test_data::web::image_urls::{ERNEST_SCARED_STUPID_IMAGE_URL, GHOST_IMAGE_URL, TREX_SKELETON_IMAGE_URL};
#[tokio::test]
#[ignore]
async fn test() -> AnyhowResult<()> {
// XXX: Don't commit secrets!
let secret = read_to_string("/Users/bt/Artcraft/credentials/fal_api_key.txt")?;
let api_key = FalApiKey::from_str(&secret);
let args = EnqueueGptImage1p5EditImageArgs {
image_urls: vec![
GHOST_IMAGE_URL.to_string(),
TREX_SKELETON_IMAGE_URL.to_string(),
ERNEST_SCARED_STUPID_IMAGE_URL.to_string(),
],
prompt: "add the ghost and scared man to the image of the t-rex skeleton, make it look spooky but friendly",
num_images: EnqueueGptImage1p5EditImageNumImages::Two,
mask_image_url: None,
image_size: None,
background: None,
quality: None,
input_fidelity: None,
api_key: &api_key,
webhook_url: "https://example.com/webhook",
output_format: None,
};
let result = enqueue_gpt_image_1p5_image_edit_webhook(args).await?;
Ok(())
}
}
@@ -3,6 +3,7 @@ pub mod enqueue_bytedance_seedream_v4p5_edit_image_webhook;
pub mod enqueue_flux_pro_kontext_max_edit_webhook;
pub mod enqueue_gemini_25_flash_edit_webhook;
pub mod enqueue_gpt_image_1_edit_image_webhook;
pub mod enqueue_gpt_image_1p5_edit_image_webhook;
pub mod enqueue_nano_banana_pro_edit_image_webhook;
pub mod enqueue_qwen_image_edit_webhook;
pub mod enqueue_seededit_v3_edit_webhook;
@@ -0,0 +1,164 @@
use crate::creds::fal_api_key::FalApiKey;
use crate::error::classify_fal_error::classify_fal_error;
use crate::error::fal_error_plus::FalErrorPlus;
use fal::endpoints::fal_ai::gpt_image::gpt_image_1p5_text_to_image::{gpt_image_1p5_text_to_image, GptImage1p5TextToImageInput};
use fal::webhook::WebhookResponse;
use reqwest::IntoUrl;
pub struct EnqueueGptImage1p5TextToImageArgs<'a, R: IntoUrl> {
// Request required
pub prompt: &'a str,
pub num_images: EnqueueGptImage1p5TextToImageNumImages,
// Optional args
pub image_size: Option<EnqueueGptImage1p5TextToImageSize>,
pub background: Option<EnqueueGptImage1p5TextToImageBackground>,
pub quality: Option<EnqueueGptImage1p5TextToImageQuality>,
pub output_format: Option<EnqueueGptImage1p5TextToImageOutputFormat>,
// Fulfillment
pub webhook_url: R,
pub api_key: &'a FalApiKey,
}
#[derive(Copy, Clone, Debug)]
pub enum EnqueueGptImage1p5TextToImageNumImages {
One,
Two,
Three,
Four,
}
#[derive(Copy, Clone, Debug)]
pub enum EnqueueGptImage1p5TextToImageSize {
/// 1024x1024
Square,
/// 1536x1024
Wide,
/// 1024x1536
Tall,
}
#[derive(Copy, Clone, Debug)]
pub enum EnqueueGptImage1p5TextToImageBackground {
Auto,
Transparent,
Opaque,
}
#[derive(Copy, Clone, Debug)]
pub enum EnqueueGptImage1p5TextToImageQuality {
Low,
Medium,
High,
}
#[derive(Copy, Clone, Debug)]
pub enum EnqueueGptImage1p5TextToImageOutputFormat {
Jpeg,
Png,
Webp,
}
pub async fn enqueue_gpt_image_1p5_text_to_image_webhook<R: IntoUrl>(
args: EnqueueGptImage1p5TextToImageArgs<'_, R>
) -> Result<WebhookResponse, FalErrorPlus> {
let num_images = match args.num_images {
EnqueueGptImage1p5TextToImageNumImages::One => 1,
EnqueueGptImage1p5TextToImageNumImages::Two => 2,
EnqueueGptImage1p5TextToImageNumImages::Three => 3,
EnqueueGptImage1p5TextToImageNumImages::Four => 4,
};
let image_size = args.image_size
.map(|s| match s {
EnqueueGptImage1p5TextToImageSize::Square => "1024x1024",
EnqueueGptImage1p5TextToImageSize::Wide => "1536x1024",
EnqueueGptImage1p5TextToImageSize::Tall => "1024x1536",
})
.map(|resolution| resolution.to_string());
let background = args.background
.map(|s| match s {
EnqueueGptImage1p5TextToImageBackground::Auto => "auto",
EnqueueGptImage1p5TextToImageBackground::Transparent => "transparent",
EnqueueGptImage1p5TextToImageBackground::Opaque => "opaque",
})
.map(|aspect_ratio| aspect_ratio.to_string());
let quality = args.quality
.map(|s| match s {
EnqueueGptImage1p5TextToImageQuality::Low => "low",
EnqueueGptImage1p5TextToImageQuality::Medium => "medium",
EnqueueGptImage1p5TextToImageQuality::High => "high",
})
.map(|aspect_ratio| aspect_ratio.to_string());
let output_format = args.output_format
.map(|s| match s {
EnqueueGptImage1p5TextToImageOutputFormat::Jpeg => "jpeg",
EnqueueGptImage1p5TextToImageOutputFormat::Png => "png",
EnqueueGptImage1p5TextToImageOutputFormat::Webp => "webp",
})
.map(|aspect_ratio| aspect_ratio.to_string())
.unwrap_or_else(|| "png".to_string());
let num_images = match args.num_images {
EnqueueGptImage1p5TextToImageNumImages::One => 1,
EnqueueGptImage1p5TextToImageNumImages::Two => 2,
EnqueueGptImage1p5TextToImageNumImages::Three => 3,
EnqueueGptImage1p5TextToImageNumImages::Four => 4,
};
let request = GptImage1p5TextToImageInput {
prompt: args.prompt.to_string(),
num_images: Some(num_images),
output_format: Some(output_format),
// Optionals
image_size,
background,
quality,
};
let result = gpt_image_1p5_text_to_image(request)
.with_api_key(&args.api_key.0)
.queue_webhook(args.webhook_url)
.await;
result.map_err(|err| classify_fal_error(err))
}
#[cfg(test)]
mod tests {
use crate::creds::fal_api_key::FalApiKey;
use crate::requests::webhook::image::text::enqueue_gpt_image_1p5_text_to_image_webhook::{enqueue_gpt_image_1p5_text_to_image_webhook, EnqueueGptImage1p5TextToImageArgs, EnqueueGptImage1p5TextToImageNumImages};
use errors::AnyhowResult;
use std::fs::read_to_string;
#[tokio::test]
#[ignore]
async fn test() -> AnyhowResult<()> {
// XXX: Don't commit secrets!
let secret = read_to_string("/Users/bt/Artcraft/credentials/fal_api_key.txt")?;
let api_key = FalApiKey::from_str(&secret);
let args = EnqueueGptImage1p5TextToImageArgs {
prompt: "an anime girl riding on the back of a t-rex",
num_images: EnqueueGptImage1p5TextToImageNumImages::Two,
image_size: None,
background: None,
quality: None,
api_key: &api_key,
webhook_url: "https://example.com/webhook",
output_format: None,
};
let result = enqueue_gpt_image_1p5_text_to_image_webhook(args).await?;
Ok(())
}
}
@@ -1,3 +1,4 @@
pub mod enqueue_bytedance_seedream_v4_text_to_image_webhook;
pub mod enqueue_bytedance_seedream_v4p5_text_to_image_webhook;
pub mod enqueue_nano_banana_pro_text_to_image_webhook;
pub mod enqueue_nano_banana_pro_text_to_image_webhook;
pub mod enqueue_gpt_image_1p5_text_to_image_webhook;
@@ -36,7 +36,6 @@ pub enum EnqueueVeo3p1FastFirstLastFrameImageToVideoDurationSeconds {
#[derive(Copy, Clone, Debug)]
pub enum EnqueueVeo3p1FastFirstLastFrameImageToVideoAspectRatio {
Auto,
Square,
SixteenByNine,
NineBySixteen,
}
@@ -62,7 +61,6 @@ pub async fn enqueue_veo_3p1_fast_first_last_frame_image_to_video_webhook<R: Int
let aspect_ratio = args.aspect_ratio
.map(|aspect_ratio| match aspect_ratio {
EnqueueVeo3p1FastFirstLastFrameImageToVideoAspectRatio::Auto => "auto",
EnqueueVeo3p1FastFirstLastFrameImageToVideoAspectRatio::Square => "1:1",
EnqueueVeo3p1FastFirstLastFrameImageToVideoAspectRatio::SixteenByNine => "16:9",
EnqueueVeo3p1FastFirstLastFrameImageToVideoAspectRatio::NineBySixteen => "9:16",
})
@@ -33,7 +33,6 @@ pub enum EnqueueVeo3p1FastImageToVideoDurationSeconds {
#[derive(Copy, Clone, Debug)]
pub enum EnqueueVeo3p1FastImageToVideoAspectRatio {
Auto,
Square,
SixteenByNine,
NineBySixteen,
}
@@ -59,7 +58,6 @@ pub async fn enqueue_veo_3p1_fast_image_to_video_webhook<R: IntoUrl>(
let aspect_ratio = args.aspect_ratio
.map(|aspect_ratio| match aspect_ratio {
EnqueueVeo3p1FastImageToVideoAspectRatio::Auto => "auto",
EnqueueVeo3p1FastImageToVideoAspectRatio::Square => "1:1",
EnqueueVeo3p1FastImageToVideoAspectRatio::SixteenByNine => "16:9",
EnqueueVeo3p1FastImageToVideoAspectRatio::NineBySixteen => "9:16",
})
@@ -36,7 +36,6 @@ pub enum EnqueueVeo3p1FirstLastFrameImageToVideoDurationSeconds {
#[derive(Copy, Clone, Debug)]
pub enum EnqueueVeo3p1FirstLastFrameImageToVideoAspectRatio {
Auto,
Square,
SixteenByNine,
NineBySixteen,
}
@@ -62,7 +61,6 @@ pub async fn enqueue_veo_3p1_first_last_frame_image_to_video_webhook<R: IntoUrl>
let aspect_ratio = args.aspect_ratio
.map(|aspect_ratio| match aspect_ratio {
EnqueueVeo3p1FirstLastFrameImageToVideoAspectRatio::Auto => "auto",
EnqueueVeo3p1FirstLastFrameImageToVideoAspectRatio::Square => "1:1",
EnqueueVeo3p1FirstLastFrameImageToVideoAspectRatio::SixteenByNine => "16:9",
EnqueueVeo3p1FirstLastFrameImageToVideoAspectRatio::NineBySixteen => "9:16",
})
@@ -33,7 +33,6 @@ pub enum EnqueueVeo3p1ImageToVideoDurationSeconds {
#[derive(Copy, Clone, Debug)]
pub enum EnqueueVeo3p1ImageToVideoAspectRatio {
Auto,
Square,
SixteenByNine,
NineBySixteen,
}
@@ -59,7 +58,6 @@ pub async fn enqueue_veo_3p1_image_to_video_webhook<R: IntoUrl>(
let aspect_ratio = args.aspect_ratio
.map(|aspect_ratio| match aspect_ratio {
EnqueueVeo3p1ImageToVideoAspectRatio::Auto => "auto",
EnqueueVeo3p1ImageToVideoAspectRatio::Square => "1:1",
EnqueueVeo3p1ImageToVideoAspectRatio::SixteenByNine => "16:9",
EnqueueVeo3p1ImageToVideoAspectRatio::NineBySixteen => "9:16",
})
@@ -34,7 +34,6 @@ pub enum EnqueueVeo3p1FastTextToVideoDurationSeconds {
#[derive(Copy, Clone, Debug)]
pub enum EnqueueVeo3p1FastTextToVideoAspectRatio {
Auto,
Square,
SixteenByNine,
NineBySixteen,
}
@@ -60,7 +59,6 @@ pub async fn enqueue_veo_3p1_fast_text_to_video_webhook<R: IntoUrl>(
let aspect_ratio = args.aspect_ratio
.map(|aspect_ratio| match aspect_ratio {
EnqueueVeo3p1FastTextToVideoAspectRatio::Auto => "auto",
EnqueueVeo3p1FastTextToVideoAspectRatio::Square => "1:1",
EnqueueVeo3p1FastTextToVideoAspectRatio::SixteenByNine => "16:9",
EnqueueVeo3p1FastTextToVideoAspectRatio::NineBySixteen => "9:16",
})
@@ -34,7 +34,6 @@ pub enum EnqueueVeo3p1TextToVideoDurationSeconds {
#[derive(Copy, Clone, Debug)]
pub enum EnqueueVeo3p1TextToVideoAspectRatio {
Auto,
Square,
SixteenByNine,
NineBySixteen,
}
@@ -60,7 +59,6 @@ pub async fn enqueue_veo_3p1_text_to_video_webhook<R: IntoUrl>(
let aspect_ratio = args.aspect_ratio
.map(|aspect_ratio| match aspect_ratio {
EnqueueVeo3p1TextToVideoAspectRatio::Auto => "auto",
EnqueueVeo3p1TextToVideoAspectRatio::Square => "1:1",
EnqueueVeo3p1TextToVideoAspectRatio::SixteenByNine => "16:9",
EnqueueVeo3p1TextToVideoAspectRatio::NineBySixteen => "9:16",
})
@@ -0,0 +1,55 @@
[package]
name = "world_labs_client"
edition = "2024"
version = "0.0.1"
publish = false
[package.metadata.cargo-udeps.ignore]
normal = ["workspace-build-acceleration"]
[lib]
name = "world_labs_client"
path = "src/lib.rs"
[dependencies]
# Workspace hack (faster compile times)
workspace-build-acceleration.workspace = true
# Internal
cloudflare_errors.workspace = true
cloudflare_mitigation.workspace = true
cookie_store.workspace = true
errors.workspace = true
filesys.workspace = true
http_headers.workspace = true
jwt_light.workspace = true
# External
anyhow.workspace = true
base64.workspace = true
bstr.workspace = true
byteorder = "1.5.0"
chrono.workspace = true
futures.workspace = true
indexmap.workspace = true
log.workspace = true
once_cell.workspace = true
regex.workspace = true
scraper = "0.24.0"
serde.workspace = true
serde_json.workspace = true
sha2.workspace = true
tokio = { version = "1", features = ["full"] }
url.workspace = true
uuid.workspace = true
wreq-util.workspace = true
wreq.workspace = true
[dev-dependencies]
filesys.workspace = true
test_data.workspace = true
testing.workspace = true
log4rs = "1.4.0"
env_logger.workspace = true
env.workspace = true
chrono.workspace = true
@@ -0,0 +1,26 @@
use uuid::Uuid;
/// Type for Image Input Object Ids
/// These are used to refer to worlds
/// These appear to be bare UUIDs.
#[derive(Clone, Debug)]
pub struct ImageInputObjectId(pub String);
impl ImageInputObjectId {
pub fn generate_new() -> Self {
let uuid = Uuid::new_v4().to_string();
Self(uuid)
}
pub fn from_str(s: &str) -> Self {
Self(s.to_string())
}
pub fn as_str(&self) -> &str {
&self.0
}
pub fn to_string(&self) -> String {
self.0.clone()
}
}
@@ -0,0 +1,26 @@
use uuid::Uuid;
/// Type for "meta" World IDs (not sure what to term this).
/// These are in the first run patch request
/// These appear to be bare UUIDs.
#[derive(Clone, Debug)]
pub struct MetaWorldObjectId(pub String);
impl MetaWorldObjectId {
pub fn generate_new() -> Self {
let uuid = Uuid::new_v4().to_string();
Self(uuid)
}
pub fn from_str(s: &str) -> Self {
Self(s.to_string())
}
pub fn as_str(&self) -> &str {
&self.0
}
pub fn to_string(&self) -> String {
self.0.clone()
}
}
@@ -0,0 +1,8 @@
pub mod image_input_object_id;
pub mod meta_world_object_id;
pub mod pano_object_id;
pub mod run_object;
pub mod run_object_id;
pub mod upload_mime_type;
pub mod upload_object_id;
pub mod world_id;
@@ -0,0 +1,26 @@
use uuid::Uuid;
/// Type for Pano Object Ids
/// These are used to refer to worlds
/// These appear to be bare UUIDs.
#[derive(Clone, Debug)]
pub struct PanoObjectId(pub String);
impl PanoObjectId {
pub fn generate_new() -> Self {
let uuid = Uuid::new_v4().to_string();
Self(uuid)
}
pub fn from_str(s: &str) -> Self {
Self(s.to_string())
}
pub fn as_str(&self) -> &str {
&self.0
}
pub fn to_string(&self) -> String {
self.0.clone()
}
}
@@ -0,0 +1,79 @@
use std::collections::HashMap;
use chrono::Utc;
use serde::{Deserialize, Serialize};
use serde_json::Value;
const RUN_MIME_TYPE: &str = "application/run+json";
const RUN_VERSION : &str = "0.0.1";
/// World Labs' API is very frontend driven
/// They send whole objects back to the frontend that the frontend is in charge of mutatingbjects or PATCH them back to the server (yuck):
/// - request #1 - create run
/// - request #6 - patch run after image upload
/// Gotta go fast?
#[derive(Serialize, Deserialize, Clone)]
pub struct RunObject {
/// The primary ID of the run.
/// This won't exist until we post it to the server.
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
pub metadata: RunObjectMetadata,
pub mime_type: String,
}
#[derive(Serialize, Deserialize, Clone)]
pub struct RunObjectMetadata {
pub version: String,
#[serde(rename = "createdAt")]
pub created_at: u64,
#[serde(rename = "updatedAt")]
pub updated_at: u64,
#[serde(rename = "usesAdvancedEditing")]
pub uses_advanced_editing: bool,
#[serde(rename = "draftMode")]
pub draft_mode: bool,
/// Polymorphic set of ID-to-object mappings.
pub nodes: HashMap<String, Value>,
}
impl Default for RunObject {
fn default() -> Self {
let now = Utc::now();
let now = now.timestamp().unsigned_abs() * 1000; // Millisecond resolution
Self {
id: None,
metadata: RunObjectMetadata{
version: RUN_VERSION.to_string(),
created_at: now,
updated_at: now,
uses_advanced_editing: false,
draft_mode: false,
nodes: HashMap::new(),
},
mime_type: RUN_MIME_TYPE.to_string(),
}
}
}
#[cfg(test)]
mod tests {
use crate::api::api_types::run_object::RunObject;
#[test]
fn default_runobject() {
let object = RunObject::default();
assert!(object.id.is_none());
assert_eq!(&object.metadata.version, "0.0.1");
assert!(object.metadata.created_at > 1705433415549);
assert!(object.metadata.updated_at > 1705433415549);
assert_eq!(&object.mime_type, "application/run+json");
}
}
@@ -0,0 +1,15 @@
/// Type for Object IDs.
/// These are used to create inference runs and refer to the result
/// These appear to be bare UUIDs.
#[derive(Clone, Debug)]
pub struct RunObjectId(pub String);
impl RunObjectId {
pub fn from_str(s: &str) -> Self {
Self(s.to_string())
}
pub fn to_string(&self) -> String {
self.0.clone()
}
}
@@ -0,0 +1,21 @@
use serde::Serialize;
#[derive(Clone, Copy, Debug, Serialize)]
pub enum UploadMimeType {
#[serde(rename = "image/jpeg")]
ImageJpeg,
}
impl UploadMimeType {
pub fn content_type(&self) -> &'static str {
match self {
Self::ImageJpeg => "image/jpeg",
}
}
pub fn extension_without_period(&self) -> &'static str {
match self {
Self::ImageJpeg => "jpeg",
}
}
}
@@ -0,0 +1,15 @@
/// Type for Upload IDs.
/// These are used to upload images.
/// These appear to be bare UUIDs.
#[derive(Clone, Debug)]
pub struct UploadObjectId(pub String);
impl UploadObjectId {
pub fn as_str(&self) -> &str {
&self.0
}
pub fn to_string(&self) -> String {
self.0.clone()
}
}
@@ -0,0 +1,26 @@
use uuid::Uuid;
/// Type for World IDs.
/// These are used to refer to worlds
/// These appear to be bare UUIDs.
#[derive(Clone, Debug)]
pub struct WorldObjectId(pub String);
impl WorldObjectId {
pub fn new() -> Self {
let uuid = Uuid::new_v4().to_string();
Self(uuid)
}
pub fn from_str(s: &str) -> Self {
Self(s.to_string())
}
pub fn as_str(&self) -> &str {
&self.0
}
pub fn to_string(&self) -> String {
self.0.clone()
}
}
@@ -0,0 +1,6 @@
/// Referer header value
pub(crate) const REFERER_VALUE: &str = "https://marble.worldlabs.ai/";
/// Origin header value
pub(crate) const ORIGIN_VALUE: &str = "https://marble.worldlabs.ai/";
@@ -0,0 +1 @@
pub (crate) mod common_header_values;
@@ -0,0 +1,5 @@
pub mod api_types;
pub mod requests;
pub (crate) mod common;
pub mod utils;
@@ -0,0 +1,10 @@
Free accounts start with 7,000 credits
This supports "up to 4 world generations" according to the pricing page.
After one gen, credits are at 5,420. (Used 1580 credits.)
request_flow_4 - chromium on linux, private browsing
@@ -0,0 +1,20 @@
curl 'https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects' \
-H 'accept: */*' \
-H 'accept-language: en-US,en;q=0.9' \
-H 'authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk1MTg5MTkxMTA3NjA1NDM0NGUxNWUyNTY0MjViYjQyNWVlYjNhNWMiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiVmljdG9yIFZvaWNlIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0t3MGFhWEtZU3F5LVhra242OXlkSUpGR25KQTM3UzEzWHZqTlk0ZDl4Q3pVektVdz1zOTYtYyIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS93bHQtdHJhaW5pbmctZ3NjIiwiYXVkIjoid2x0LXRyYWluaW5nLWdzYyIsImF1dGhfdGltZSI6MTc2NTMyMDg0MiwidXNlcl9pZCI6InNWZ0FRRHlIM0JmWU9CZkY2ZXBXVGpMSHlnWDIiLCJzdWIiOiJzVmdBUUR5SDNCZllPQmZGNmVwV1RqTEh5Z1gyIiwiaWF0IjoxNzY1MzIwODQyLCJleHAiOjE3NjUzMjQ0NDIsImVtYWlsIjoidmljdG9ydm9pY2U4OUBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJnb29nbGUuY29tIjpbIjExNjQ1OTMwMDE5ODYxOTg4ODgzNiJdLCJlbWFpbCI6WyJ2aWN0b3J2b2ljZTg5QGdtYWlsLmNvbSJdfSwic2lnbl9pbl9wcm92aWRlciI6Imdvb2dsZS5jb20ifX0.SHy8_FpsekZ3LvRdwfDMqW1BDdBHVfJO78x0xtJuIhsKKrUCD88eb256MsAKFb_ak6mujk7GjzajUtkcV-JiZhxElzQ_lu1kQiOoSWcnmuXe8Pm1trx-NN1DUGLbVj2CopdmsRmX2Fs_hFgXd4KhGmcaiqKxEVKZGoq2vB4Bs2kvIjA7u3bqAdS75BsJ5kaxvvIrqY7WjmpVb2LWr6uZIaSZa2BFZi_CAs8rGFV7cO9zg3xGD8MKwG6DmJbopYrtHHECxHbYCe1f-HS5eXCN_tJFIq7CHV9RSyv3KkT5Da9yOIeDP8YBATxTLNWqdkq3h-mXmkFvgL7-n49-aqcIgA' \
-H 'baggage: sentry-environment=prod,sentry-release=rel-4c2ae3c,sentry-public_key=3779934420ee57f00d05e5fb1e57f79d,sentry-trace_id=f6a6fcf2cd474d488082c00a8f915ab6,sentry-org_id=4509005975388160,sentry-transaction=%2F(main)%2F_explore%2F,sentry-sampled=true,sentry-sample_rand=0.8715408597022593,sentry-sample_rate=1' \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-H 'origin: https://marble.worldlabs.ai' \
-H 'pragma: no-cache' \
-H 'priority: u=1, i' \
-H 'referer: https://marble.worldlabs.ai/' \
-H 'sec-ch-ua: "Not_A Brand";v="99", "Chromium";v="142"' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'sec-ch-ua-platform: "Linux"' \
-H 'sec-fetch-dest: empty' \
-H 'sec-fetch-mode: cors' \
-H 'sec-fetch-site: cross-site' \
-H 'sentry-trace: f6a6fcf2cd474d488082c00a8f915ab6-811b3fc3ecdaaff5-1' \
-H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36' \
--data-raw '{"metadata":{"version":"0.0.1","createdAt":1765323283075,"updatedAt":1765323283075,"useAdvancedEditing":false,"draftMode":false,"nodes":{}},"mime_type":"application/run+json"}'
@@ -0,0 +1,19 @@
{
"context": null,
"id": "10ad82a1-5f61-447f-b162-e3da0ef3e5b5",
"display_name": null,
"owner_id": "sVgAQDyH3BfYOBfF6epWTjLHygX2",
"status": "CREATED",
"created_at": 1765323283,
"updated_at": 1765323283,
"object_uri": null,
"mime_type": "application/run+json",
"metadata": {
"version": "0.0.1",
"createdAt": 1765323283075,
"updatedAt": 1765323283075,
"useAdvancedEditing": false,
"draftMode": false,
"nodes": {}
}
}
@@ -0,0 +1,20 @@
curl 'https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects' \
-H 'accept: */*' \
-H 'accept-language: en-US,en;q=0.9' \
-H 'authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk1MTg5MTkxMTA3NjA1NDM0NGUxNWUyNTY0MjViYjQyNWVlYjNhNWMiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiVmljdG9yIFZvaWNlIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0t3MGFhWEtZU3F5LVhra242OXlkSUpGR25KQTM3UzEzWHZqTlk0ZDl4Q3pVektVdz1zOTYtYyIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS93bHQtdHJhaW5pbmctZ3NjIiwiYXVkIjoid2x0LXRyYWluaW5nLWdzYyIsImF1dGhfdGltZSI6MTc2NTMyMDg0MiwidXNlcl9pZCI6InNWZ0FRRHlIM0JmWU9CZkY2ZXBXVGpMSHlnWDIiLCJzdWIiOiJzVmdBUUR5SDNCZllPQmZGNmVwV1RqTEh5Z1gyIiwiaWF0IjoxNzY1MzIwODQyLCJleHAiOjE3NjUzMjQ0NDIsImVtYWlsIjoidmljdG9ydm9pY2U4OUBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJnb29nbGUuY29tIjpbIjExNjQ1OTMwMDE5ODYxOTg4ODgzNiJdLCJlbWFpbCI6WyJ2aWN0b3J2b2ljZTg5QGdtYWlsLmNvbSJdfSwic2lnbl9pbl9wcm92aWRlciI6Imdvb2dsZS5jb20ifX0.SHy8_FpsekZ3LvRdwfDMqW1BDdBHVfJO78x0xtJuIhsKKrUCD88eb256MsAKFb_ak6mujk7GjzajUtkcV-JiZhxElzQ_lu1kQiOoSWcnmuXe8Pm1trx-NN1DUGLbVj2CopdmsRmX2Fs_hFgXd4KhGmcaiqKxEVKZGoq2vB4Bs2kvIjA7u3bqAdS75BsJ5kaxvvIrqY7WjmpVb2LWr6uZIaSZa2BFZi_CAs8rGFV7cO9zg3xGD8MKwG6DmJbopYrtHHECxHbYCe1f-HS5eXCN_tJFIq7CHV9RSyv3KkT5Da9yOIeDP8YBATxTLNWqdkq3h-mXmkFvgL7-n49-aqcIgA' \
-H 'baggage: sentry-environment=prod,sentry-release=rel-4c2ae3c,sentry-public_key=3779934420ee57f00d05e5fb1e57f79d,sentry-trace_id=f6a6fcf2cd474d488082c00a8f915ab6,sentry-org_id=4509005975388160,sentry-transaction=%2F(main)%2F_explore%2F,sentry-sampled=true,sentry-sample_rand=0.8715408597022593,sentry-sample_rate=1' \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-H 'origin: https://marble.worldlabs.ai' \
-H 'pragma: no-cache' \
-H 'priority: u=1, i' \
-H 'referer: https://marble.worldlabs.ai/' \
-H 'sec-ch-ua: "Not_A Brand";v="99", "Chromium";v="142"' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'sec-ch-ua-platform: "Linux"' \
-H 'sec-fetch-dest: empty' \
-H 'sec-fetch-mode: cors' \
-H 'sec-fetch-site: cross-site' \
-H 'sentry-trace: f6a6fcf2cd474d488082c00a8f915ab6-b9e78b9b380dd719-1' \
-H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36' \
--data-raw '{"display_name":"uploaded_image_1ed9f547-5527-48d3-b5df-aab476532317.jpeg","mime_type":"image/jpeg"}'
@@ -0,0 +1,12 @@
{
"context": null,
"id": "25ddd6ab-931c-480b-a817-cfbb562da980",
"display_name": "uploaded_image_1ed9f547-5527-48d3-b5df-aab476532317.jpeg",
"owner_id": "sVgAQDyH3BfYOBfF6epWTjLHygX2",
"status": "CREATED",
"created_at": 1765323283,
"updated_at": 1765323283,
"object_uri": null,
"mime_type": "image/jpeg",
"metadata": null
}
@@ -0,0 +1,20 @@
curl 'https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/recaption2' \
-H 'accept: */*' \
-H 'accept-language: en-US,en;q=0.9' \
-H 'authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk1MTg5MTkxMTA3NjA1NDM0NGUxNWUyNTY0MjViYjQyNWVlYjNhNWMiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiVmljdG9yIFZvaWNlIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0t3MGFhWEtZU3F5LVhra242OXlkSUpGR25KQTM3UzEzWHZqTlk0ZDl4Q3pVektVdz1zOTYtYyIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS93bHQtdHJhaW5pbmctZ3NjIiwiYXVkIjoid2x0LXRyYWluaW5nLWdzYyIsImF1dGhfdGltZSI6MTc2NTMyMDg0MiwidXNlcl9pZCI6InNWZ0FRRHlIM0JmWU9CZkY2ZXBXVGpMSHlnWDIiLCJzdWIiOiJzVmdBUUR5SDNCZllPQmZGNmVwV1RqTEh5Z1gyIiwiaWF0IjoxNzY1MzIwODQyLCJleHAiOjE3NjUzMjQ0NDIsImVtYWlsIjoidmljdG9ydm9pY2U4OUBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJnb29nbGUuY29tIjpbIjExNjQ1OTMwMDE5ODYxOTg4ODgzNiJdLCJlbWFpbCI6WyJ2aWN0b3J2b2ljZTg5QGdtYWlsLmNvbSJdfSwic2lnbl9pbl9wcm92aWRlciI6Imdvb2dsZS5jb20ifX0.SHy8_FpsekZ3LvRdwfDMqW1BDdBHVfJO78x0xtJuIhsKKrUCD88eb256MsAKFb_ak6mujk7GjzajUtkcV-JiZhxElzQ_lu1kQiOoSWcnmuXe8Pm1trx-NN1DUGLbVj2CopdmsRmX2Fs_hFgXd4KhGmcaiqKxEVKZGoq2vB4Bs2kvIjA7u3bqAdS75BsJ5kaxvvIrqY7WjmpVb2LWr6uZIaSZa2BFZi_CAs8rGFV7cO9zg3xGD8MKwG6DmJbopYrtHHECxHbYCe1f-HS5eXCN_tJFIq7CHV9RSyv3KkT5Da9yOIeDP8YBATxTLNWqdkq3h-mXmkFvgL7-n49-aqcIgA' \
-H 'baggage: sentry-environment=prod,sentry-release=rel-4c2ae3c,sentry-public_key=3779934420ee57f00d05e5fb1e57f79d,sentry-trace_id=f6a6fcf2cd474d488082c00a8f915ab6,sentry-org_id=4509005975388160,sentry-transaction=%2F(main)%2F_explore%2F,sentry-sampled=true,sentry-sample_rand=0.8715408597022593,sentry-sample_rate=1' \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-H 'origin: https://marble.worldlabs.ai' \
-H 'pragma: no-cache' \
-H 'priority: u=1, i' \
-H 'referer: https://marble.worldlabs.ai/' \
-H 'sec-ch-ua: "Not_A Brand";v="99", "Chromium";v="142"' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'sec-ch-ua-platform: "Linux"' \
-H 'sec-fetch-dest: empty' \
-H 'sec-fetch-mode: cors' \
-H 'sec-fetch-site: cross-site' \
-H 'sentry-trace: f6a6fcf2cd474d488082c00a8f915ab6-a84e4b29068074a0-1' \
-H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36' \
--data-raw '{"world_prompt":{"type":"image","image_prompt":{"uri":"https://cdn.marble.worldlabs.ai/object/25ddd6ab-931c-480b-a817-cfbb562da980/asset.jpg"},"text_prompt":""},"user_caption":"","context":{"run_id":"10ad82a1-5f61-447f-b162-e3da0ef3e5b5"}}'
@@ -0,0 +1,4 @@
{
"caption": "The scene is a somber and gothic graveyard at night, captured in a realistic, almost cinematic style, evoking a mood of quiet contemplation and melancholy. Numerous headstones and crypts of varying sizes and designs emerge from the overgrown grass, their weathered surfaces suggesting a long history. Tall, dark trees with skeletal branches stand against the cloudy night sky, their leaves barely visible, enhancing the scene's desolate atmosphere. A full, luminous moon hangs high in the sky, casting soft, ethereal light over the entire graveyard, illuminating the intricate carvings on some of the older monuments and the subtle textures of the ground. The ground itself is a mix of patchy grass and fallen leaves, indicating a neglected or aged burial ground, with small, indistinct flora growing in scattered clusters. Pathways, possibly made of worn earth or gravel, wind between the graves, though they are largely obscured by the low light and foliage. A low, stone wall or barrier might enclose the graveyard on one side, separating it from an unseen, silent world beyond. The moon remains a singular, dominant light source, creating long, soft shadows that stretch across the uneven terrain of the cemetery. ",
"title": "Moonlit Graveyard Vigil"
}
@@ -0,0 +1,20 @@
curl 'https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/worlds' \
-H 'accept: */*' \
-H 'accept-language: en-US,en;q=0.9' \
-H 'authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk1MTg5MTkxMTA3NjA1NDM0NGUxNWUyNTY0MjViYjQyNWVlYjNhNWMiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiVmljdG9yIFZvaWNlIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0t3MGFhWEtZU3F5LVhra242OXlkSUpGR25KQTM3UzEzWHZqTlk0ZDl4Q3pVektVdz1zOTYtYyIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS93bHQtdHJhaW5pbmctZ3NjIiwiYXVkIjoid2x0LXRyYWluaW5nLWdzYyIsImF1dGhfdGltZSI6MTc2NTMyMDg0MiwidXNlcl9pZCI6InNWZ0FRRHlIM0JmWU9CZkY2ZXBXVGpMSHlnWDIiLCJzdWIiOiJzVmdBUUR5SDNCZllPQmZGNmVwV1RqTEh5Z1gyIiwiaWF0IjoxNzY1MzIwODQyLCJleHAiOjE3NjUzMjQ0NDIsImVtYWlsIjoidmljdG9ydm9pY2U4OUBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJnb29nbGUuY29tIjpbIjExNjQ1OTMwMDE5ODYxOTg4ODgzNiJdLCJlbWFpbCI6WyJ2aWN0b3J2b2ljZTg5QGdtYWlsLmNvbSJdfSwic2lnbl9pbl9wcm92aWRlciI6Imdvb2dsZS5jb20ifX0.SHy8_FpsekZ3LvRdwfDMqW1BDdBHVfJO78x0xtJuIhsKKrUCD88eb256MsAKFb_ak6mujk7GjzajUtkcV-JiZhxElzQ_lu1kQiOoSWcnmuXe8Pm1trx-NN1DUGLbVj2CopdmsRmX2Fs_hFgXd4KhGmcaiqKxEVKZGoq2vB4Bs2kvIjA7u3bqAdS75BsJ5kaxvvIrqY7WjmpVb2LWr6uZIaSZa2BFZi_CAs8rGFV7cO9zg3xGD8MKwG6DmJbopYrtHHECxHbYCe1f-HS5eXCN_tJFIq7CHV9RSyv3KkT5Da9yOIeDP8YBATxTLNWqdkq3h-mXmkFvgL7-n49-aqcIgA' \
-H 'baggage: sentry-environment=prod,sentry-release=rel-4c2ae3c,sentry-public_key=3779934420ee57f00d05e5fb1e57f79d,sentry-trace_id=f6a6fcf2cd474d488082c00a8f915ab6,sentry-org_id=4509005975388160,sentry-transaction=%2F(main)%2F_explore%2F,sentry-sampled=true,sentry-sample_rand=0.8715408597022593,sentry-sample_rate=1' \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-H 'origin: https://marble.worldlabs.ai' \
-H 'pragma: no-cache' \
-H 'priority: u=1, i' \
-H 'referer: https://marble.worldlabs.ai/' \
-H 'sec-ch-ua: "Not_A Brand";v="99", "Chromium";v="142"' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'sec-ch-ua-platform: "Linux"' \
-H 'sec-fetch-dest: empty' \
-H 'sec-fetch-mode: cors' \
-H 'sec-fetch-site: cross-site' \
-H 'sentry-trace: f6a6fcf2cd474d488082c00a8f915ab6-aae165f4896b6b44-1' \
-H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36' \
--data-raw $'{"permission":{"public":true},"generation_input":{"model":"Marble 0.1-plus","prompt":{"type":"image","image_prompt":{"uri":"https://cdn.marble.worldlabs.ai/object/25ddd6ab-931c-480b-a817-cfbb562da980/asset.jpg"},"text_prompt":"The scene is a somber and gothic graveyard at night, captured in a realistic, almost cinematic style, evoking a mood of quiet contemplation and melancholy. Numerous headstones and crypts of varying sizes and designs emerge from the overgrown grass, their weathered surfaces suggesting a long history. Tall, dark trees with skeletal branches stand against the cloudy night sky, their leaves barely visible, enhancing the scene\'s desolate atmosphere. A full, luminous moon hangs high in the sky, casting soft, ethereal light over the entire graveyard, illuminating the intricate carvings on some of the older monuments and the subtle textures of the ground. The ground itself is a mix of patchy grass and fallen leaves, indicating a neglected or aged burial ground, with small, indistinct flora growing in scattered clusters. Pathways, possibly made of worn earth or gravel, wind between the graves, though they are largely obscured by the low light and foliage. A low, stone wall or barrier might enclose the graveyard on one side, separating it from an unseen, silent world beyond. The moon remains a singular, dominant light source, creating long, soft shadows that stretch across the uneven terrain of the cemetery. "}},"context":{"run_id":"10ad82a1-5f61-447f-b162-e3da0ef3e5b5"}}'
@@ -0,0 +1,37 @@
{
"context": {
"run_id": "10ad82a1-5f61-447f-b162-e3da0ef3e5b5",
"project_id": null
},
"id": "323bfcc0-086a-4822-acc5-b38b4ddc624d",
"display_name": null,
"status": "INITIALIZING",
"error": null,
"owner_id": "sVgAQDyH3BfYOBfF6epWTjLHygX2",
"created_at": 1765323290,
"updated_at": 1765323290,
"permission": {
"public": true,
"allowed_readers": [],
"allowed_writers": []
},
"stats": null,
"application_data": null,
"generation_input": {
"model": "Marble 0.1-plus",
"seed": null,
"prompt": {
"type": "image",
"text_prompt": "The scene is a somber and gothic graveyard at night, captured in a realistic, almost cinematic style, evoking a mood of quiet contemplation and melancholy. Numerous headstones and crypts of varying sizes and designs emerge from the overgrown grass, their weathered surfaces suggesting a long history. Tall, dark trees with skeletal branches stand against the cloudy night sky, their leaves barely visible, enhancing the scene's desolate atmosphere. A full, luminous moon hangs high in the sky, casting soft, ethereal light over the entire graveyard, illuminating the intricate carvings on some of the older monuments and the subtle textures of the ground. The ground itself is a mix of patchy grass and fallen leaves, indicating a neglected or aged burial ground, with small, indistinct flora growing in scattered clusters. Pathways, possibly made of worn earth or gravel, wind between the graves, though they are largely obscured by the low light and foliage. A low, stone wall or barrier might enclose the graveyard on one side, separating it from an unseen, silent world beyond. The moon remains a singular, dominant light source, creating long, soft shadows that stretch across the uneven terrain of the cemetery. ",
"image_prompt": {
"uri": "https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/307390d3_image_prompt_sanitized.png",
"data_base64": null,
"extension": "png"
},
"is_pano": null
}
},
"tags": null,
"hq_mesh_export_op_id": null,
"generation_output": null
}
@@ -0,0 +1,18 @@
curl 'https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/worlds/323bfcc0-086a-4822-acc5-b38b4ddc624d' \
-H 'accept: */*' \
-H 'accept-language: en-US,en;q=0.9' \
-H 'authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk1MTg5MTkxMTA3NjA1NDM0NGUxNWUyNTY0MjViYjQyNWVlYjNhNWMiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiVmljdG9yIFZvaWNlIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0t3MGFhWEtZU3F5LVhra242OXlkSUpGR25KQTM3UzEzWHZqTlk0ZDl4Q3pVektVdz1zOTYtYyIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS93bHQtdHJhaW5pbmctZ3NjIiwiYXVkIjoid2x0LXRyYWluaW5nLWdzYyIsImF1dGhfdGltZSI6MTc2NTMyMDg0MiwidXNlcl9pZCI6InNWZ0FRRHlIM0JmWU9CZkY2ZXBXVGpMSHlnWDIiLCJzdWIiOiJzVmdBUUR5SDNCZllPQmZGNmVwV1RqTEh5Z1gyIiwiaWF0IjoxNzY1MzIwODQyLCJleHAiOjE3NjUzMjQ0NDIsImVtYWlsIjoidmljdG9ydm9pY2U4OUBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJnb29nbGUuY29tIjpbIjExNjQ1OTMwMDE5ODYxOTg4ODgzNiJdLCJlbWFpbCI6WyJ2aWN0b3J2b2ljZTg5QGdtYWlsLmNvbSJdfSwic2lnbl9pbl9wcm92aWRlciI6Imdvb2dsZS5jb20ifX0.SHy8_FpsekZ3LvRdwfDMqW1BDdBHVfJO78x0xtJuIhsKKrUCD88eb256MsAKFb_ak6mujk7GjzajUtkcV-JiZhxElzQ_lu1kQiOoSWcnmuXe8Pm1trx-NN1DUGLbVj2CopdmsRmX2Fs_hFgXd4KhGmcaiqKxEVKZGoq2vB4Bs2kvIjA7u3bqAdS75BsJ5kaxvvIrqY7WjmpVb2LWr6uZIaSZa2BFZi_CAs8rGFV7cO9zg3xGD8MKwG6DmJbopYrtHHECxHbYCe1f-HS5eXCN_tJFIq7CHV9RSyv3KkT5Da9yOIeDP8YBATxTLNWqdkq3h-mXmkFvgL7-n49-aqcIgA' \
-H 'baggage: sentry-environment=prod,sentry-release=rel-4c2ae3c,sentry-public_key=3779934420ee57f00d05e5fb1e57f79d,sentry-trace_id=f6a6fcf2cd474d488082c00a8f915ab6,sentry-org_id=4509005975388160,sentry-transaction=%2F(main)%2F_explore%2F,sentry-sampled=true,sentry-sample_rand=0.8715408597022593,sentry-sample_rate=1' \
-H 'cache-control: no-cache' \
-H 'origin: https://marble.worldlabs.ai' \
-H 'pragma: no-cache' \
-H 'priority: u=1, i' \
-H 'referer: https://marble.worldlabs.ai/' \
-H 'sec-ch-ua: "Not_A Brand";v="99", "Chromium";v="142"' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'sec-ch-ua-platform: "Linux"' \
-H 'sec-fetch-dest: empty' \
-H 'sec-fetch-mode: cors' \
-H 'sec-fetch-site: cross-site' \
-H 'sentry-trace: f6a6fcf2cd474d488082c00a8f915ab6-89ca6b5ba7e2d026-1' \
-H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36'
@@ -0,0 +1,39 @@
{
"context": null,
"id": "323bfcc0-086a-4822-acc5-b38b4ddc624d",
"display_name": null,
"status": "INITIALIZING",
"error": null,
"owner_id": "sVgAQDyH3BfYOBfF6epWTjLHygX2",
"created_at": 1765323290,
"updated_at": 1765323290,
"permission": {
"public": true,
"allowed_readers": [],
"allowed_writers": []
},
"stats": null,
"application_data": {
"owner_username": "victorv",
"owner_display_name": "Victor Voice",
"reactions": null,
"pinned": false
},
"generation_input": {
"model": "Marble 0.1-plus",
"seed": null,
"prompt": {
"type": "image",
"text_prompt": "The scene is a somber and gothic graveyard at night, captured in a realistic, almost cinematic style, evoking a mood of quiet contemplation and melancholy. Numerous headstones and crypts of varying sizes and designs emerge from the overgrown grass, their weathered surfaces suggesting a long history. Tall, dark trees with skeletal branches stand against the cloudy night sky, their leaves barely visible, enhancing the scene's desolate atmosphere. A full, luminous moon hangs high in the sky, casting soft, ethereal light over the entire graveyard, illuminating the intricate carvings on some of the older monuments and the subtle textures of the ground. The ground itself is a mix of patchy grass and fallen leaves, indicating a neglected or aged burial ground, with small, indistinct flora growing in scattered clusters. Pathways, possibly made of worn earth or gravel, wind between the graves, though they are largely obscured by the low light and foliage. A low, stone wall or barrier might enclose the graveyard on one side, separating it from an unseen, silent world beyond. The moon remains a singular, dominant light source, creating long, soft shadows that stretch across the uneven terrain of the cemetery. ",
"image_prompt": {
"uri": "https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/307390d3_image_prompt_sanitized.png",
"data_base64": null,
"extension": null
},
"is_pano": false
}
},
"tags": null,
"hq_mesh_export_op_id": null,
"generation_output": null
}
@@ -0,0 +1,18 @@
curl 'https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/worlds/323bfcc0-086a-4822-acc5-b38b4ddc624d' \
-H 'accept: */*' \
-H 'accept-language: en-US,en;q=0.9' \
-H 'authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk1MTg5MTkxMTA3NjA1NDM0NGUxNWUyNTY0MjViYjQyNWVlYjNhNWMiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiVmljdG9yIFZvaWNlIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0t3MGFhWEtZU3F5LVhra242OXlkSUpGR25KQTM3UzEzWHZqTlk0ZDl4Q3pVektVdz1zOTYtYyIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS93bHQtdHJhaW5pbmctZ3NjIiwiYXVkIjoid2x0LXRyYWluaW5nLWdzYyIsImF1dGhfdGltZSI6MTc2NTMyMDg0MiwidXNlcl9pZCI6InNWZ0FRRHlIM0JmWU9CZkY2ZXBXVGpMSHlnWDIiLCJzdWIiOiJzVmdBUUR5SDNCZllPQmZGNmVwV1RqTEh5Z1gyIiwiaWF0IjoxNzY1MzIwODQyLCJleHAiOjE3NjUzMjQ0NDIsImVtYWlsIjoidmljdG9ydm9pY2U4OUBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJnb29nbGUuY29tIjpbIjExNjQ1OTMwMDE5ODYxOTg4ODgzNiJdLCJlbWFpbCI6WyJ2aWN0b3J2b2ljZTg5QGdtYWlsLmNvbSJdfSwic2lnbl9pbl9wcm92aWRlciI6Imdvb2dsZS5jb20ifX0.SHy8_FpsekZ3LvRdwfDMqW1BDdBHVfJO78x0xtJuIhsKKrUCD88eb256MsAKFb_ak6mujk7GjzajUtkcV-JiZhxElzQ_lu1kQiOoSWcnmuXe8Pm1trx-NN1DUGLbVj2CopdmsRmX2Fs_hFgXd4KhGmcaiqKxEVKZGoq2vB4Bs2kvIjA7u3bqAdS75BsJ5kaxvvIrqY7WjmpVb2LWr6uZIaSZa2BFZi_CAs8rGFV7cO9zg3xGD8MKwG6DmJbopYrtHHECxHbYCe1f-HS5eXCN_tJFIq7CHV9RSyv3KkT5Da9yOIeDP8YBATxTLNWqdkq3h-mXmkFvgL7-n49-aqcIgA' \
-H 'baggage: sentry-environment=prod,sentry-release=rel-4c2ae3c,sentry-public_key=3779934420ee57f00d05e5fb1e57f79d,sentry-trace_id=f6a6fcf2cd474d488082c00a8f915ab6,sentry-org_id=4509005975388160,sentry-transaction=%2F(main)%2F_explore%2F,sentry-sampled=true,sentry-sample_rand=0.8715408597022593,sentry-sample_rate=1' \
-H 'cache-control: no-cache' \
-H 'origin: https://marble.worldlabs.ai' \
-H 'pragma: no-cache' \
-H 'priority: u=1, i' \
-H 'referer: https://marble.worldlabs.ai/' \
-H 'sec-ch-ua: "Not_A Brand";v="99", "Chromium";v="142"' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'sec-ch-ua-platform: "Linux"' \
-H 'sec-fetch-dest: empty' \
-H 'sec-fetch-mode: cors' \
-H 'sec-fetch-site: cross-site' \
-H 'sentry-trace: f6a6fcf2cd474d488082c00a8f915ab6-85cd442793fc9124-1' \
-H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36'
@@ -0,0 +1,59 @@
{
"context": null,
"id": "323bfcc0-086a-4822-acc5-b38b4ddc624d",
"display_name": null,
"status": "SUCCEEDED",
"error": null,
"owner_id": "sVgAQDyH3BfYOBfF6epWTjLHygX2",
"created_at": 1765323290,
"updated_at": 1765323554,
"permission": {
"public": true,
"allowed_readers": [],
"allowed_writers": []
},
"stats": null,
"application_data": {
"owner_username": "victorv",
"owner_display_name": "Victor Voice",
"reactions": null,
"pinned": false
},
"generation_input": {
"model": "Marble 0.1-plus",
"seed": null,
"prompt": {
"type": "image",
"text_prompt": "The scene is a somber and gothic graveyard at night, captured in a realistic, almost cinematic style, evoking a mood of quiet contemplation and melancholy. Numerous headstones and crypts of varying sizes and designs emerge from the overgrown grass, their weathered surfaces suggesting a long history. Tall, dark trees with skeletal branches stand against the cloudy night sky, their leaves barely visible, enhancing the scene's desolate atmosphere. A full, luminous moon hangs high in the sky, casting soft, ethereal light over the entire graveyard, illuminating the intricate carvings on some of the older monuments and the subtle textures of the ground. The ground itself is a mix of patchy grass and fallen leaves, indicating a neglected or aged burial ground, with small, indistinct flora growing in scattered clusters. Pathways, possibly made of worn earth or gravel, wind between the graves, though they are largely obscured by the low light and foliage. A low, stone wall or barrier might enclose the graveyard on one side, separating it from an unseen, silent world beyond. The moon remains a singular, dominant light source, creating long, soft shadows that stretch across the uneven terrain of the cemetery. ",
"image_prompt": {
"uri": "https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/307390d3_image_prompt_sanitized.png",
"data_base64": null,
"extension": null
},
"is_pano": false
}
},
"tags": null,
"hq_mesh_export_op_id": null,
"generation_output": {
"ply_url": null,
"wlg_url": null,
"cond_image_url": "https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/307390d3_image_prompt_sanitized.png",
"mpi_url": "https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/17b7b9f7-1448-4e03-a244-ac51b87bc1a2_dust_mpi",
"minimap_url": "https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/4e373e4c-b7c2-4122-aa7f-a27cf6377f8d_minimap.png",
"minimap_metadata": "[0.0, 1.486802339553833, 13.666599082946778]",
"spz_urls": {
"500k": "https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/514bcf69-1f9e-4fa1-ba82-5e3eacd3aa0e_ceramic_500k.spz",
"full_res": "https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/7a169623-8993-448d-b0c4-a9780287d0ce_ceramic.spz",
"100k": "https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/044f6002-c5d9-4064-a690-1ff1a6bb40e2_dust_100k.spz"
},
"skypano_url": null,
"posed_cond_image": "https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/d42c648a-37a0-4b50-aa53-15210783dd23_cond_image",
"collider_mesh_url": "https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/bab46ac0.glb",
"hq_mesh_url": null,
"full_res_mesh_url": null,
"posed_cubemaps_url": "https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/84fb4783-e74f-4676-b825-84834a349437_cubemaps",
"posed_panos_url": "https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/d51d9ddd-bf33-4ce6-a1e0-b35bacde335b_panos",
"panos_metadata": null
}
}
@@ -0,0 +1,21 @@
curl 'https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects/10ad82a1-5f61-447f-b162-e3da0ef3e5b5' \
-X 'PATCH' \
-H 'accept: */*' \
-H 'accept-language: en-US,en;q=0.9' \
-H 'authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk1MTg5MTkxMTA3NjA1NDM0NGUxNWUyNTY0MjViYjQyNWVlYjNhNWMiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiVmljdG9yIFZvaWNlIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0t3MGFhWEtZU3F5LVhra242OXlkSUpGR25KQTM3UzEzWHZqTlk0ZDl4Q3pVektVdz1zOTYtYyIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS93bHQtdHJhaW5pbmctZ3NjIiwiYXVkIjoid2x0LXRyYWluaW5nLWdzYyIsImF1dGhfdGltZSI6MTc2NTMyMDg0MiwidXNlcl9pZCI6InNWZ0FRRHlIM0JmWU9CZkY2ZXBXVGpMSHlnWDIiLCJzdWIiOiJzVmdBUUR5SDNCZllPQmZGNmVwV1RqTEh5Z1gyIiwiaWF0IjoxNzY1MzIwODQyLCJleHAiOjE3NjUzMjQ0NDIsImVtYWlsIjoidmljdG9ydm9pY2U4OUBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJnb29nbGUuY29tIjpbIjExNjQ1OTMwMDE5ODYxOTg4ODgzNiJdLCJlbWFpbCI6WyJ2aWN0b3J2b2ljZTg5QGdtYWlsLmNvbSJdfSwic2lnbl9pbl9wcm92aWRlciI6Imdvb2dsZS5jb20ifX0.SHy8_FpsekZ3LvRdwfDMqW1BDdBHVfJO78x0xtJuIhsKKrUCD88eb256MsAKFb_ak6mujk7GjzajUtkcV-JiZhxElzQ_lu1kQiOoSWcnmuXe8Pm1trx-NN1DUGLbVj2CopdmsRmX2Fs_hFgXd4KhGmcaiqKxEVKZGoq2vB4Bs2kvIjA7u3bqAdS75BsJ5kaxvvIrqY7WjmpVb2LWr6uZIaSZa2BFZi_CAs8rGFV7cO9zg3xGD8MKwG6DmJbopYrtHHECxHbYCe1f-HS5eXCN_tJFIq7CHV9RSyv3KkT5Da9yOIeDP8YBATxTLNWqdkq3h-mXmkFvgL7-n49-aqcIgA' \
-H 'baggage: sentry-environment=prod,sentry-release=rel-4c2ae3c,sentry-public_key=3779934420ee57f00d05e5fb1e57f79d,sentry-trace_id=f6a6fcf2cd474d488082c00a8f915ab6,sentry-org_id=4509005975388160,sentry-transaction=%2F(main)%2F_explore%2F,sentry-sampled=true,sentry-sample_rand=0.8715408597022593,sentry-sample_rate=1' \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-H 'origin: https://marble.worldlabs.ai' \
-H 'pragma: no-cache' \
-H 'priority: u=1, i' \
-H 'referer: https://marble.worldlabs.ai/' \
-H 'sec-ch-ua: "Not_A Brand";v="99", "Chromium";v="142"' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'sec-ch-ua-platform: "Linux"' \
-H 'sec-fetch-dest: empty' \
-H 'sec-fetch-mode: cors' \
-H 'sec-fetch-site: cross-site' \
-H 'sentry-trace: f6a6fcf2cd474d488082c00a8f915ab6-b96d44935a8cf5a1-1' \
-H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36' \
--data-raw $'{"object":{"metadata":{"version":"0.0.1","name":"Moonlit Graveyard Vigil","createdAt":1765323283075,"updatedAt":1765323555619,"useAdvancedEditing":false,"draftMode":false,"nodes":{"5046e0da-ce2c-428f-a5d8-3b99143d4ce3":{"id":"5046e0da-ce2c-428f-a5d8-3b99143d4ce3","type":"input","parentId":null,"source":{"type":"image","image_url":"https://cdn.marble.worldlabs.ai/object/25ddd6ab-931c-480b-a817-cfbb562da980/asset.jpg"},"createdAt":1765323289174,"title":"Moonlit Graveyard Vigil","caption":"The scene is a somber and gothic graveyard at night, captured in a realistic, almost cinematic style, evoking a mood of quiet contemplation and melancholy. Numerous headstones and crypts of varying sizes and designs emerge from the overgrown grass, their weathered surfaces suggesting a long history. Tall, dark trees with skeletal branches stand against the cloudy night sky, their leaves barely visible, enhancing the scene\'s desolate atmosphere. A full, luminous moon hangs high in the sky, casting soft, ethereal light over the entire graveyard, illuminating the intricate carvings on some of the older monuments and the subtle textures of the ground. The ground itself is a mix of patchy grass and fallen leaves, indicating a neglected or aged burial ground, with small, indistinct flora growing in scattered clusters. Pathways, possibly made of worn earth or gravel, wind between the graves, though they are largely obscured by the low light and foliage. A low, stone wall or barrier might enclose the graveyard on one side, separating it from an unseen, silent world beyond. The moon remains a singular, dominant light source, creating long, soft shadows that stretch across the uneven terrain of the cemetery. "},"e132bc85-ecf1-4126-b466-f8c281ebaabf":{"id":"e132bc85-ecf1-4126-b466-f8c281ebaabf","type":"pano","parentId":"5046e0da-ce2c-428f-a5d8-3b99143d4ce3","source":{"type":"generate_world","url":"https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/d51d9ddd-bf33-4ce6-a1e0-b35bacde335b_panos/rgb_0.png","world_id":"323bfcc0-086a-4822-acc5-b38b4ddc624d","status":"complete"},"createdAt":1765323290361},"5d90764a-7356-4c0c-b819-8c6fbdfa4300":{"id":"5d90764a-7356-4c0c-b819-8c6fbdfa4300","type":"world","parentId":"e132bc85-ecf1-4126-b466-f8c281ebaabf","source":{"type":"generate_world","world_id":"323bfcc0-086a-4822-acc5-b38b4ddc624d","spz_urls":{"500k":"https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/514bcf69-1f9e-4fa1-ba82-5e3eacd3aa0e_ceramic_500k.spz","full_res":"https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/7a169623-8993-448d-b0c4-a9780287d0ce_ceramic.spz","100k":"https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/044f6002-c5d9-4064-a690-1ff1a6bb40e2_dust_100k.spz"},"posed_cubemaps_url":"https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/84fb4783-e74f-4676-b825-84834a349437_cubemaps","minimap_url":"https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/4e373e4c-b7c2-4122-aa7f-a27cf6377f8d_minimap.png","minimap_metadata":"[0.0, 1.486802339553833, 13.666599082946778]","status":"complete","mpi_url":"https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/17b7b9f7-1448-4e03-a244-ac51b87bc1a2_dust_mpi","cond_image_url":"https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/307390d3_image_prompt_sanitized.png"},"createdAt":1765323290361}}}},"update_mask":["metadata"]}'
@@ -0,0 +1,66 @@
{
"context": null,
"id": "10ad82a1-5f61-447f-b162-e3da0ef3e5b5",
"display_name": null,
"owner_id": "sVgAQDyH3BfYOBfF6epWTjLHygX2",
"status": "CREATED",
"created_at": 1765323283,
"updated_at": 1765323555,
"object_uri": null,
"mime_type": "application/run+json",
"metadata": {
"version": "0.0.1",
"name": "Moonlit Graveyard Vigil",
"createdAt": 1765323283075,
"updatedAt": 1765323555619,
"useAdvancedEditing": false,
"draftMode": false,
"nodes": {
"5046e0da-ce2c-428f-a5d8-3b99143d4ce3": {
"id": "5046e0da-ce2c-428f-a5d8-3b99143d4ce3",
"type": "input",
"parentId": null,
"source": {
"type": "image",
"image_url": "https://cdn.marble.worldlabs.ai/object/25ddd6ab-931c-480b-a817-cfbb562da980/asset.jpg"
},
"createdAt": 1765323289174,
"title": "Moonlit Graveyard Vigil",
"caption": "The scene is a somber and gothic graveyard at night, captured in a realistic, almost cinematic style, evoking a mood of quiet contemplation and melancholy. Numerous headstones and crypts of varying sizes and designs emerge from the overgrown grass, their weathered surfaces suggesting a long history. Tall, dark trees with skeletal branches stand against the cloudy night sky, their leaves barely visible, enhancing the scene's desolate atmosphere. A full, luminous moon hangs high in the sky, casting soft, ethereal light over the entire graveyard, illuminating the intricate carvings on some of the older monuments and the subtle textures of the ground. The ground itself is a mix of patchy grass and fallen leaves, indicating a neglected or aged burial ground, with small, indistinct flora growing in scattered clusters. Pathways, possibly made of worn earth or gravel, wind between the graves, though they are largely obscured by the low light and foliage. A low, stone wall or barrier might enclose the graveyard on one side, separating it from an unseen, silent world beyond. The moon remains a singular, dominant light source, creating long, soft shadows that stretch across the uneven terrain of the cemetery. "
},
"e132bc85-ecf1-4126-b466-f8c281ebaabf": {
"id": "e132bc85-ecf1-4126-b466-f8c281ebaabf",
"type": "pano",
"parentId": "5046e0da-ce2c-428f-a5d8-3b99143d4ce3",
"source": {
"type": "generate_world",
"url": "https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/d51d9ddd-bf33-4ce6-a1e0-b35bacde335b_panos/rgb_0.png",
"world_id": "323bfcc0-086a-4822-acc5-b38b4ddc624d",
"status": "complete"
},
"createdAt": 1765323290361
},
"5d90764a-7356-4c0c-b819-8c6fbdfa4300": {
"id": "5d90764a-7356-4c0c-b819-8c6fbdfa4300",
"type": "world",
"parentId": "e132bc85-ecf1-4126-b466-f8c281ebaabf",
"source": {
"type": "generate_world",
"world_id": "323bfcc0-086a-4822-acc5-b38b4ddc624d",
"spz_urls": {
"500k": "https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/514bcf69-1f9e-4fa1-ba82-5e3eacd3aa0e_ceramic_500k.spz",
"full_res": "https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/7a169623-8993-448d-b0c4-a9780287d0ce_ceramic.spz",
"100k": "https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/044f6002-c5d9-4064-a690-1ff1a6bb40e2_dust_100k.spz"
},
"posed_cubemaps_url": "https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/84fb4783-e74f-4676-b825-84834a349437_cubemaps",
"minimap_url": "https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/4e373e4c-b7c2-4122-aa7f-a27cf6377f8d_minimap.png",
"minimap_metadata": "[0.0, 1.486802339553833, 13.666599082946778]",
"status": "complete",
"mpi_url": "https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/17b7b9f7-1448-4e03-a244-ac51b87bc1a2_dust_mpi",
"cond_image_url": "https://cdn.marble.worldlabs.ai/323bfcc0-086a-4822-acc5-b38b4ddc624d/307390d3_image_prompt_sanitized.png"
},
"createdAt": 1765323290361
}
}
}
}
@@ -0,0 +1,20 @@
curl 'https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects' \
-H 'accept: */*' \
-H 'accept-language: en-US,en;q=0.9' \
-H 'authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk1MTg5MTkxMTA3NjA1NDM0NGUxNWUyNTY0MjViYjQyNWVlYjNhNWMiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiVmljdG9yIFZvaWNlIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0t3MGFhWEtZU3F5LVhra242OXlkSUpGR25KQTM3UzEzWHZqTlk0ZDl4Q3pVektVdz1zOTYtYyIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS93bHQtdHJhaW5pbmctZ3NjIiwiYXVkIjoid2x0LXRyYWluaW5nLWdzYyIsImF1dGhfdGltZSI6MTc2NTMyMDg0MiwidXNlcl9pZCI6InNWZ0FRRHlIM0JmWU9CZkY2ZXBXVGpMSHlnWDIiLCJzdWIiOiJzVmdBUUR5SDNCZllPQmZGNmVwV1RqTEh5Z1gyIiwiaWF0IjoxNzY1MzIwODQyLCJleHAiOjE3NjUzMjQ0NDIsImVtYWlsIjoidmljdG9ydm9pY2U4OUBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJnb29nbGUuY29tIjpbIjExNjQ1OTMwMDE5ODYxOTg4ODgzNiJdLCJlbWFpbCI6WyJ2aWN0b3J2b2ljZTg5QGdtYWlsLmNvbSJdfSwic2lnbl9pbl9wcm92aWRlciI6Imdvb2dsZS5jb20ifX0.SHy8_FpsekZ3LvRdwfDMqW1BDdBHVfJO78x0xtJuIhsKKrUCD88eb256MsAKFb_ak6mujk7GjzajUtkcV-JiZhxElzQ_lu1kQiOoSWcnmuXe8Pm1trx-NN1DUGLbVj2CopdmsRmX2Fs_hFgXd4KhGmcaiqKxEVKZGoq2vB4Bs2kvIjA7u3bqAdS75BsJ5kaxvvIrqY7WjmpVb2LWr6uZIaSZa2BFZi_CAs8rGFV7cO9zg3xGD8MKwG6DmJbopYrtHHECxHbYCe1f-HS5eXCN_tJFIq7CHV9RSyv3KkT5Da9yOIeDP8YBATxTLNWqdkq3h-mXmkFvgL7-n49-aqcIgA' \
-H 'baggage: sentry-environment=prod,sentry-release=rel-4c2ae3c,sentry-public_key=3779934420ee57f00d05e5fb1e57f79d,sentry-trace_id=3ea3cefa133447398d3d1b50923b158e,sentry-org_id=4509005975388160,sentry-replay_id=7da3fa2dd40d412fbc41559247f02342,sentry-transaction=%2F(main)%2F_explore%2F,sentry-sampled=true,sentry-sample_rand=0.5897258369230949,sentry-sample_rate=1' \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-H 'origin: https://marble.worldlabs.ai' \
-H 'pragma: no-cache' \
-H 'priority: u=1, i' \
-H 'referer: https://marble.worldlabs.ai/' \
-H 'sec-ch-ua: "Not_A Brand";v="99", "Chromium";v="142"' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'sec-ch-ua-platform: "Linux"' \
-H 'sec-fetch-dest: empty' \
-H 'sec-fetch-mode: cors' \
-H 'sec-fetch-site: cross-site' \
-H 'sentry-trace: 3ea3cefa133447398d3d1b50923b158e-a2647f414a7b9652-1' \
-H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36' \
--data-raw '{"metadata":{"version":"0.0.1","createdAt":1765324283470,"updatedAt":1765324283470,"useAdvancedEditing":false,"draftMode":false,"nodes":{}},"mime_type":"application/run+json"}'
@@ -0,0 +1,17 @@
curl 'https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/worlds/3e8d210f-28ea-4375-92d8-3ee6f14db61d' \
-H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:145.0) Gecko/20100101 Firefox/145.0' \
-H 'Accept: */*' \
-H 'Accept-Language: en-US,en;q=0.5' \
-H 'Accept-Encoding: gzip, deflate, br, zstd' \
-H 'Referer: https://marble.worldlabs.ai/' \
-H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk1MTg5MTkxMTA3NjA1NDM0NGUxNWUyNTY0MjViYjQyNWVlYjNhNWMiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiVmljdG9yIFZvaWNlIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0t3MGFhWEtZU3F5LVhra242OXlkSUpGR25KQTM3UzEzWHZqTlk0ZDl4Q3pVektVdz1zOTYtYyIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS93bHQtdHJhaW5pbmctZ3NjIiwiYXVkIjoid2x0LXRyYWluaW5nLWdzYyIsImF1dGhfdGltZSI6MTc2NTMyNTM3NCwidXNlcl9pZCI6InNWZ0FRRHlIM0JmWU9CZkY2ZXBXVGpMSHlnWDIiLCJzdWIiOiJzVmdBUUR5SDNCZllPQmZGNmVwV1RqTEh5Z1gyIiwiaWF0IjoxNzY1MzI1Mzc0LCJleHAiOjE3NjUzMjg5NzQsImVtYWlsIjoidmljdG9ydm9pY2U4OUBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJnb29nbGUuY29tIjpbIjExNjQ1OTMwMDE5ODYxOTg4ODgzNiJdLCJlbWFpbCI6WyJ2aWN0b3J2b2ljZTg5QGdtYWlsLmNvbSJdfSwic2lnbl9pbl9wcm92aWRlciI6Imdvb2dsZS5jb20ifX0.U_mp4iAw14poJz11UFKg3QVO6TSfE8Gps6VqLhg4GLLumjilgnuyD8mnKFznRFX0R-OyBf8mugVk59zfy4BugeZ0cXRkm1FWHqR9BVJZ9BQoEobXw4RqHkUvtgSe2qnx8a4fLUVp5zxNPpXfEjLAdcG4YnNwdZ7-TxyCDvO3U_WHkG3aAJup1q5KOqURDeYoQ7m7THeobyM3pnmDO03GIMdYgLV3Lnpvk6FTprtsV8SxWr8ZJ-Cy1g_I9wtKcB4B5bIFLjfV4r8W_-uq_g5ddbri-Yy28Ah97jxFIFOVChbPSbQpS-TRshW6M2cM5Y2EhGudpgVQBM-Tekco9fGSRw' \
-H 'Origin: https://marble.worldlabs.ai' \
-H 'Sec-GPC: 1' \
-H 'Connection: keep-alive' \
-H 'Sec-Fetch-Dest: empty' \
-H 'Sec-Fetch-Mode: cors' \
-H 'Sec-Fetch-Site: cross-site' \
-H 'Priority: u=4' \
-H 'Pragma: no-cache' \
-H 'Cache-Control: no-cache' \
-H 'TE: trailers'
@@ -0,0 +1 @@
{"context":null,"id":"3e8d210f-28ea-4375-92d8-3ee6f14db61d","display_name":null,"status":"INITIALIZING","error":null,"owner_id":"sVgAQDyH3BfYOBfF6epWTjLHygX2","created_at":1765325564,"updated_at":1765325564,"permission":{"public":true,"allowed_readers":[],"allowed_writers":[]},"stats":null,"application_data":{"owner_username":"victorv","owner_display_name":"Victor Voice","reactions":null,"pinned":false},"generation_input":{"model":"Marble 0.1-plus","seed":null,"prompt":{"type":"image","text_prompt":"The scene is a cozy A-frame cabin interior, rendered in a realistic style, exuding warmth and rustic charm, creating a tranquil and inviting atmosphere. A prominent wooden A-frame structure defines the architecture, featuring angled timber beams that converge towards the peak of the ceiling. The walls and ceiling are paneled with warm-toned wooden planks, creating a consistent and enveloping aesthetic throughout the space. A large, floor-to-ceiling window dominates one wall, offering an expansive view of a lush forest with tall trees and autumnal foliage outside, suggesting the cabin is nestled deep within nature. A plush bed occupies a significant portion of the floor space, adorned with a dark grey duvet, numerous pillows, and a rust-colored throw blanket, inviting comfort and relaxation. A cream-colored faux fur rug rests on the wooden floor beside the bed, adding texture and a soft landing. A black wood-burning stove with a visible fire provides heat and a focal point for the room, situated near the large window. The floor is made of polished light wood planks. On the other side of the cabin, a continuation of the wooden paneling and A-frame structure mirrors the visible portion, maintaining architectural consistency. Another large window, identical in style and size to the visible one, would likely offer a similar forest view on the opposite side of the cabin, bathing the entire space in natural light filtered through the trees. A small, rustic armchair with a woven texture would be positioned near the stove on the opposite side, providing an additional seating area for enjoying the warmth. A stack of neatly chopped firewood is arranged next to the stove, ready for use, emphasizing the cabin's rustic functionality. ","image_prompt":{"uri":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/5c5474e3_image_prompt_sanitized.png","data_base64":null,"extension":null},"is_pano":false}},"tags":null,"hq_mesh_export_op_id":null,"generation_output":null}
@@ -0,0 +1,20 @@
curl 'https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects' \
-X POST \
-H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:145.0) Gecko/20100101 Firefox/145.0' \
-H 'Accept: */*' \
-H 'Accept-Language: en-US,en;q=0.5' \
-H 'Accept-Encoding: gzip, deflate, br, zstd' \
-H 'Referer: https://marble.worldlabs.ai/' \
-H 'content-type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk1MTg5MTkxMTA3NjA1NDM0NGUxNWUyNTY0MjViYjQyNWVlYjNhNWMiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiVmljdG9yIFZvaWNlIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0t3MGFhWEtZU3F5LVhra242OXlkSUpGR25KQTM3UzEzWHZqTlk0ZDl4Q3pVektVdz1zOTYtYyIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS93bHQtdHJhaW5pbmctZ3NjIiwiYXVkIjoid2x0LXRyYWluaW5nLWdzYyIsImF1dGhfdGltZSI6MTc2NTMyNTM3NCwidXNlcl9pZCI6InNWZ0FRRHlIM0JmWU9CZkY2ZXBXVGpMSHlnWDIiLCJzdWIiOiJzVmdBUUR5SDNCZllPQmZGNmVwV1RqTEh5Z1gyIiwiaWF0IjoxNzY1MzI1Mzc0LCJleHAiOjE3NjUzMjg5NzQsImVtYWlsIjoidmljdG9ydm9pY2U4OUBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJnb29nbGUuY29tIjpbIjExNjQ1OTMwMDE5ODYxOTg4ODgzNiJdLCJlbWFpbCI6WyJ2aWN0b3J2b2ljZTg5QGdtYWlsLmNvbSJdfSwic2lnbl9pbl9wcm92aWRlciI6Imdvb2dsZS5jb20ifX0.U_mp4iAw14poJz11UFKg3QVO6TSfE8Gps6VqLhg4GLLumjilgnuyD8mnKFznRFX0R-OyBf8mugVk59zfy4BugeZ0cXRkm1FWHqR9BVJZ9BQoEobXw4RqHkUvtgSe2qnx8a4fLUVp5zxNPpXfEjLAdcG4YnNwdZ7-TxyCDvO3U_WHkG3aAJup1q5KOqURDeYoQ7m7THeobyM3pnmDO03GIMdYgLV3Lnpvk6FTprtsV8SxWr8ZJ-Cy1g_I9wtKcB4B5bIFLjfV4r8W_-uq_g5ddbri-Yy28Ah97jxFIFOVChbPSbQpS-TRshW6M2cM5Y2EhGudpgVQBM-Tekco9fGSRw' \
-H 'Origin: https://marble.worldlabs.ai' \
-H 'Sec-GPC: 1' \
-H 'Connection: keep-alive' \
-H 'Sec-Fetch-Dest: empty' \
-H 'Sec-Fetch-Mode: cors' \
-H 'Sec-Fetch-Site: cross-site' \
-H 'Priority: u=0' \
-H 'Pragma: no-cache' \
-H 'Cache-Control: no-cache' \
-H 'TE: trailers' \
--data-raw '{"metadata":{"version":"0.0.1","createdAt":1765325556528,"updatedAt":1765325556528,"useAdvancedEditing":false,"draftMode":false,"nodes":{}},"mime_type":"application/run+json"}'
@@ -0,0 +1,11 @@
{
"metadata": {
"version": "0.0.1",
"createdAt": 1765325556528,
"updatedAt": 1765325556528,
"useAdvancedEditing": false,
"draftMode": false,
"nodes": {}
},
"mime_type": "application/run+json"
}
@@ -0,0 +1,19 @@
{
"context": null,
"id": "a37a82a4-0b39-47e1-acf9-07a65888d5be",
"display_name": null,
"owner_id": "sVgAQDyH3BfYOBfF6epWTjLHygX2",
"status": "CREATED",
"created_at": 1765325556,
"updated_at": 1765325556,
"object_uri": null,
"mime_type": "application/run+json",
"metadata": {
"version": "0.0.1",
"createdAt": 1765325556528,
"updatedAt": 1765325556528,
"useAdvancedEditing": false,
"draftMode": false,
"nodes": {}
}
}
@@ -0,0 +1,20 @@
curl 'https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects' \
-X POST \
-H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:145.0) Gecko/20100101 Firefox/145.0' \
-H 'Accept: */*' \
-H 'Accept-Language: en-US,en;q=0.5' \
-H 'Accept-Encoding: gzip, deflate, br, zstd' \
-H 'Referer: https://marble.worldlabs.ai/' \
-H 'content-type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk1MTg5MTkxMTA3NjA1NDM0NGUxNWUyNTY0MjViYjQyNWVlYjNhNWMiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiVmljdG9yIFZvaWNlIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0t3MGFhWEtZU3F5LVhra242OXlkSUpGR25KQTM3UzEzWHZqTlk0ZDl4Q3pVektVdz1zOTYtYyIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS93bHQtdHJhaW5pbmctZ3NjIiwiYXVkIjoid2x0LXRyYWluaW5nLWdzYyIsImF1dGhfdGltZSI6MTc2NTMyNTM3NCwidXNlcl9pZCI6InNWZ0FRRHlIM0JmWU9CZkY2ZXBXVGpMSHlnWDIiLCJzdWIiOiJzVmdBUUR5SDNCZllPQmZGNmVwV1RqTEh5Z1gyIiwiaWF0IjoxNzY1MzI1Mzc0LCJleHAiOjE3NjUzMjg5NzQsImVtYWlsIjoidmljdG9ydm9pY2U4OUBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJnb29nbGUuY29tIjpbIjExNjQ1OTMwMDE5ODYxOTg4ODgzNiJdLCJlbWFpbCI6WyJ2aWN0b3J2b2ljZTg5QGdtYWlsLmNvbSJdfSwic2lnbl9pbl9wcm92aWRlciI6Imdvb2dsZS5jb20ifX0.U_mp4iAw14poJz11UFKg3QVO6TSfE8Gps6VqLhg4GLLumjilgnuyD8mnKFznRFX0R-OyBf8mugVk59zfy4BugeZ0cXRkm1FWHqR9BVJZ9BQoEobXw4RqHkUvtgSe2qnx8a4fLUVp5zxNPpXfEjLAdcG4YnNwdZ7-TxyCDvO3U_WHkG3aAJup1q5KOqURDeYoQ7m7THeobyM3pnmDO03GIMdYgLV3Lnpvk6FTprtsV8SxWr8ZJ-Cy1g_I9wtKcB4B5bIFLjfV4r8W_-uq_g5ddbri-Yy28Ah97jxFIFOVChbPSbQpS-TRshW6M2cM5Y2EhGudpgVQBM-Tekco9fGSRw' \
-H 'Origin: https://marble.worldlabs.ai' \
-H 'Sec-GPC: 1' \
-H 'Connection: keep-alive' \
-H 'Sec-Fetch-Dest: empty' \
-H 'Sec-Fetch-Mode: cors' \
-H 'Sec-Fetch-Site: cross-site' \
-H 'Priority: u=4' \
-H 'Pragma: no-cache' \
-H 'Cache-Control: no-cache' \
-H 'TE: trailers' \
--data-raw '{"display_name":"uploaded_image_7e2fb65f-819a-486b-9609-f782ad4d244f.jpeg","mime_type":"image/jpeg"}'
@@ -0,0 +1,4 @@
{
"display_name": "uploaded_image_7e2fb65f-819a-486b-9609-f782ad4d244f.jpeg",
"mime_type": "image/jpeg"
}
@@ -0,0 +1,12 @@
{
"context": null,
"id": "cf326bd0-b7eb-454c-b433-54f36eb4d5a6",
"display_name": "uploaded_image_7e2fb65f-819a-486b-9609-f782ad4d244f.jpeg",
"owner_id": "sVgAQDyH3BfYOBfF6epWTjLHygX2",
"status": "CREATED",
"created_at": 1765325556,
"updated_at": 1765325556,
"object_uri": null,
"mime_type": "image/jpeg",
"metadata": null
}
@@ -0,0 +1,17 @@
curl 'https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/worlds/3e8d210f-28ea-4375-92d8-3ee6f14db61d' \
-H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:145.0) Gecko/20100101 Firefox/145.0' \
-H 'Accept: */*' \
-H 'Accept-Language: en-US,en;q=0.5' \
-H 'Accept-Encoding: gzip, deflate, br, zstd' \
-H 'Referer: https://marble.worldlabs.ai/' \
-H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk1MTg5MTkxMTA3NjA1NDM0NGUxNWUyNTY0MjViYjQyNWVlYjNhNWMiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiVmljdG9yIFZvaWNlIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0t3MGFhWEtZU3F5LVhra242OXlkSUpGR25KQTM3UzEzWHZqTlk0ZDl4Q3pVektVdz1zOTYtYyIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS93bHQtdHJhaW5pbmctZ3NjIiwiYXVkIjoid2x0LXRyYWluaW5nLWdzYyIsImF1dGhfdGltZSI6MTc2NTMyNTM3NCwidXNlcl9pZCI6InNWZ0FRRHlIM0JmWU9CZkY2ZXBXVGpMSHlnWDIiLCJzdWIiOiJzVmdBUUR5SDNCZllPQmZGNmVwV1RqTEh5Z1gyIiwiaWF0IjoxNzY1MzI1Mzc0LCJleHAiOjE3NjUzMjg5NzQsImVtYWlsIjoidmljdG9ydm9pY2U4OUBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJnb29nbGUuY29tIjpbIjExNjQ1OTMwMDE5ODYxOTg4ODgzNiJdLCJlbWFpbCI6WyJ2aWN0b3J2b2ljZTg5QGdtYWlsLmNvbSJdfSwic2lnbl9pbl9wcm92aWRlciI6Imdvb2dsZS5jb20ifX0.U_mp4iAw14poJz11UFKg3QVO6TSfE8Gps6VqLhg4GLLumjilgnuyD8mnKFznRFX0R-OyBf8mugVk59zfy4BugeZ0cXRkm1FWHqR9BVJZ9BQoEobXw4RqHkUvtgSe2qnx8a4fLUVp5zxNPpXfEjLAdcG4YnNwdZ7-TxyCDvO3U_WHkG3aAJup1q5KOqURDeYoQ7m7THeobyM3pnmDO03GIMdYgLV3Lnpvk6FTprtsV8SxWr8ZJ-Cy1g_I9wtKcB4B5bIFLjfV4r8W_-uq_g5ddbri-Yy28Ah97jxFIFOVChbPSbQpS-TRshW6M2cM5Y2EhGudpgVQBM-Tekco9fGSRw' \
-H 'Origin: https://marble.worldlabs.ai' \
-H 'Sec-GPC: 1' \
-H 'Connection: keep-alive' \
-H 'Sec-Fetch-Dest: empty' \
-H 'Sec-Fetch-Mode: cors' \
-H 'Sec-Fetch-Site: cross-site' \
-H 'Priority: u=4' \
-H 'Pragma: no-cache' \
-H 'Cache-Control: no-cache' \
-H 'TE: trailers'
@@ -0,0 +1 @@
{"context":null,"id":"3e8d210f-28ea-4375-92d8-3ee6f14db61d","display_name":null,"status":"SUCCEEDED","error":null,"owner_id":"sVgAQDyH3BfYOBfF6epWTjLHygX2","created_at":1765325564,"updated_at":1765325831,"permission":{"public":true,"allowed_readers":[],"allowed_writers":[]},"stats":null,"application_data":{"owner_username":"victorv","owner_display_name":"Victor Voice","reactions":null,"pinned":false},"generation_input":{"model":"Marble 0.1-plus","seed":null,"prompt":{"type":"image","text_prompt":"The scene is a cozy A-frame cabin interior, rendered in a realistic style, exuding warmth and rustic charm, creating a tranquil and inviting atmosphere. A prominent wooden A-frame structure defines the architecture, featuring angled timber beams that converge towards the peak of the ceiling. The walls and ceiling are paneled with warm-toned wooden planks, creating a consistent and enveloping aesthetic throughout the space. A large, floor-to-ceiling window dominates one wall, offering an expansive view of a lush forest with tall trees and autumnal foliage outside, suggesting the cabin is nestled deep within nature. A plush bed occupies a significant portion of the floor space, adorned with a dark grey duvet, numerous pillows, and a rust-colored throw blanket, inviting comfort and relaxation. A cream-colored faux fur rug rests on the wooden floor beside the bed, adding texture and a soft landing. A black wood-burning stove with a visible fire provides heat and a focal point for the room, situated near the large window. The floor is made of polished light wood planks. On the other side of the cabin, a continuation of the wooden paneling and A-frame structure mirrors the visible portion, maintaining architectural consistency. Another large window, identical in style and size to the visible one, would likely offer a similar forest view on the opposite side of the cabin, bathing the entire space in natural light filtered through the trees. A small, rustic armchair with a woven texture would be positioned near the stove on the opposite side, providing an additional seating area for enjoying the warmth. A stack of neatly chopped firewood is arranged next to the stove, ready for use, emphasizing the cabin's rustic functionality. ","image_prompt":{"uri":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/5c5474e3_image_prompt_sanitized.png","data_base64":null,"extension":null},"is_pano":false}},"tags":null,"hq_mesh_export_op_id":null,"generation_output":{"ply_url":null,"wlg_url":null,"cond_image_url":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/5c5474e3_image_prompt_sanitized.png","mpi_url":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/942b0d8e-2f83-413a-a0a0-98693d719be9_dust_mpi","minimap_url":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/b110166c-31b6-463d-a6bc-ca383343bb78_minimap.png","minimap_metadata":"[-1.6852229833602905, 1.5322132110595703, 14.28858642578125]","spz_urls":{"500k":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/dcfef0e9-cad9-481b-888e-c0cd6a6cd897_ceramic_500k.spz","full_res":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/f86b7139-412c-49b8-9c8c-e0c7363ec5d2_ceramic.spz","100k":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/6a63455b-1534-483a-a433-c33f8341acbf_dust_100k.spz"},"skypano_url":null,"posed_cond_image":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/4e0a67f9-9d13-465b-8c04-2d69681315ae_cond_image","collider_mesh_url":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/ff0e4ac5.glb","hq_mesh_url":null,"full_res_mesh_url":null,"posed_cubemaps_url":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/1b6d0eff-bb70-4a85-a9c3-7c115a9ddc76_cubemaps","posed_panos_url":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/9b7df6b9-cf45-46a1-b131-0b0f07d9ffd0_panos","panos_metadata":null}}
@@ -0,0 +1,20 @@
curl 'https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects/a37a82a4-0b39-47e1-acf9-07a65888d5be' \
-X PATCH \
-H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:145.0) Gecko/20100101 Firefox/145.0' \
-H 'Accept: */*' \
-H 'Accept-Language: en-US,en;q=0.5' \
-H 'Accept-Encoding: gzip, deflate, br, zstd' \
-H 'Referer: https://marble.worldlabs.ai/' \
-H 'content-type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk1MTg5MTkxMTA3NjA1NDM0NGUxNWUyNTY0MjViYjQyNWVlYjNhNWMiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiVmljdG9yIFZvaWNlIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0t3MGFhWEtZU3F5LVhra242OXlkSUpGR25KQTM3UzEzWHZqTlk0ZDl4Q3pVektVdz1zOTYtYyIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS93bHQtdHJhaW5pbmctZ3NjIiwiYXVkIjoid2x0LXRyYWluaW5nLWdzYyIsImF1dGhfdGltZSI6MTc2NTMyNTM3NCwidXNlcl9pZCI6InNWZ0FRRHlIM0JmWU9CZkY2ZXBXVGpMSHlnWDIiLCJzdWIiOiJzVmdBUUR5SDNCZllPQmZGNmVwV1RqTEh5Z1gyIiwiaWF0IjoxNzY1MzI1Mzc0LCJleHAiOjE3NjUzMjg5NzQsImVtYWlsIjoidmljdG9ydm9pY2U4OUBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJnb29nbGUuY29tIjpbIjExNjQ1OTMwMDE5ODYxOTg4ODgzNiJdLCJlbWFpbCI6WyJ2aWN0b3J2b2ljZTg5QGdtYWlsLmNvbSJdfSwic2lnbl9pbl9wcm92aWRlciI6Imdvb2dsZS5jb20ifX0.U_mp4iAw14poJz11UFKg3QVO6TSfE8Gps6VqLhg4GLLumjilgnuyD8mnKFznRFX0R-OyBf8mugVk59zfy4BugeZ0cXRkm1FWHqR9BVJZ9BQoEobXw4RqHkUvtgSe2qnx8a4fLUVp5zxNPpXfEjLAdcG4YnNwdZ7-TxyCDvO3U_WHkG3aAJup1q5KOqURDeYoQ7m7THeobyM3pnmDO03GIMdYgLV3Lnpvk6FTprtsV8SxWr8ZJ-Cy1g_I9wtKcB4B5bIFLjfV4r8W_-uq_g5ddbri-Yy28Ah97jxFIFOVChbPSbQpS-TRshW6M2cM5Y2EhGudpgVQBM-Tekco9fGSRw' \
-H 'Origin: https://marble.worldlabs.ai' \
-H 'Sec-GPC: 1' \
-H 'Connection: keep-alive' \
-H 'Sec-Fetch-Dest: empty' \
-H 'Sec-Fetch-Mode: cors' \
-H 'Sec-Fetch-Site: cross-site' \
-H 'Priority: u=4' \
-H 'Pragma: no-cache' \
-H 'Cache-Control: no-cache' \
-H 'TE: trailers' \
--data-raw $'{"object":{"metadata":{"version":"0.0.1","name":"Cozy A-frame Cabin Retreat","createdAt":1765325556528,"updatedAt":1765325836734,"useAdvancedEditing":false,"draftMode":false,"nodes":{"bcb8d155-0117-4d20-85cf-aa76627996e8":{"id":"bcb8d155-0117-4d20-85cf-aa76627996e8","type":"input","parentId":null,"source":{"type":"image","image_url":"https://cdn.marble.worldlabs.ai/object/cf326bd0-b7eb-454c-b433-54f36eb4d5a6/asset.jpg"},"createdAt":1765325562986,"title":"Cozy A-frame Cabin Retreat","caption":"The scene is a cozy A-frame cabin interior, rendered in a realistic style, exuding warmth and rustic charm, creating a tranquil and inviting atmosphere. A prominent wooden A-frame structure defines the architecture, featuring angled timber beams that converge towards the peak of the ceiling. The walls and ceiling are paneled with warm-toned wooden planks, creating a consistent and enveloping aesthetic throughout the space. A large, floor-to-ceiling window dominates one wall, offering an expansive view of a lush forest with tall trees and autumnal foliage outside, suggesting the cabin is nestled deep within nature. A plush bed occupies a significant portion of the floor space, adorned with a dark grey duvet, numerous pillows, and a rust-colored throw blanket, inviting comfort and relaxation. A cream-colored faux fur rug rests on the wooden floor beside the bed, adding texture and a soft landing. A black wood-burning stove with a visible fire provides heat and a focal point for the room, situated near the large window. The floor is made of polished light wood planks. On the other side of the cabin, a continuation of the wooden paneling and A-frame structure mirrors the visible portion, maintaining architectural consistency. Another large window, identical in style and size to the visible one, would likely offer a similar forest view on the opposite side of the cabin, bathing the entire space in natural light filtered through the trees. A small, rustic armchair with a woven texture would be positioned near the stove on the opposite side, providing an additional seating area for enjoying the warmth. A stack of neatly chopped firewood is arranged next to the stove, ready for use, emphasizing the cabin\'s rustic functionality. "},"b62ec969-b045-4f4e-8926-5f4c2f067b60":{"id":"b62ec969-b045-4f4e-8926-5f4c2f067b60","type":"pano","parentId":"bcb8d155-0117-4d20-85cf-aa76627996e8","source":{"type":"generate_world","url":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/9b7df6b9-cf45-46a1-b131-0b0f07d9ffd0_panos/rgb_0.png","world_id":"3e8d210f-28ea-4375-92d8-3ee6f14db61d","status":"complete"},"createdAt":1765325565022},"42bf7afb-bf2f-434e-b5a3-573b48ac849a":{"id":"42bf7afb-bf2f-434e-b5a3-573b48ac849a","type":"world","parentId":"b62ec969-b045-4f4e-8926-5f4c2f067b60","source":{"type":"generate_world","world_id":"3e8d210f-28ea-4375-92d8-3ee6f14db61d","spz_urls":{"500k":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/dcfef0e9-cad9-481b-888e-c0cd6a6cd897_ceramic_500k.spz","full_res":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/f86b7139-412c-49b8-9c8c-e0c7363ec5d2_ceramic.spz","100k":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/6a63455b-1534-483a-a433-c33f8341acbf_dust_100k.spz"},"posed_cubemaps_url":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/1b6d0eff-bb70-4a85-a9c3-7c115a9ddc76_cubemaps","minimap_url":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/b110166c-31b6-463d-a6bc-ca383343bb78_minimap.png","minimap_metadata":"[-1.6852229833602905, 1.5322132110595703, 14.28858642578125]","status":"complete","mpi_url":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/942b0d8e-2f83-413a-a0a0-98693d719be9_dust_mpi","cond_image_url":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/5c5474e3_image_prompt_sanitized.png"},"createdAt":1765325565022}}}},"update_mask":["metadata"]}'
@@ -0,0 +1 @@
{"context":null,"id":"a37a82a4-0b39-47e1-acf9-07a65888d5be","display_name":null,"owner_id":"sVgAQDyH3BfYOBfF6epWTjLHygX2","status":"CREATED","created_at":1765325556,"updated_at":1765325836,"object_uri":null,"mime_type":"application/run+json","metadata":{"version":"0.0.1","name":"Cozy A-frame Cabin Retreat","createdAt":1765325556528,"updatedAt":1765325836734,"useAdvancedEditing":false,"draftMode":false,"nodes":{"bcb8d155-0117-4d20-85cf-aa76627996e8":{"id":"bcb8d155-0117-4d20-85cf-aa76627996e8","type":"input","parentId":null,"source":{"type":"image","image_url":"https://cdn.marble.worldlabs.ai/object/cf326bd0-b7eb-454c-b433-54f36eb4d5a6/asset.jpg"},"createdAt":1765325562986,"title":"Cozy A-frame Cabin Retreat","caption":"The scene is a cozy A-frame cabin interior, rendered in a realistic style, exuding warmth and rustic charm, creating a tranquil and inviting atmosphere. A prominent wooden A-frame structure defines the architecture, featuring angled timber beams that converge towards the peak of the ceiling. The walls and ceiling are paneled with warm-toned wooden planks, creating a consistent and enveloping aesthetic throughout the space. A large, floor-to-ceiling window dominates one wall, offering an expansive view of a lush forest with tall trees and autumnal foliage outside, suggesting the cabin is nestled deep within nature. A plush bed occupies a significant portion of the floor space, adorned with a dark grey duvet, numerous pillows, and a rust-colored throw blanket, inviting comfort and relaxation. A cream-colored faux fur rug rests on the wooden floor beside the bed, adding texture and a soft landing. A black wood-burning stove with a visible fire provides heat and a focal point for the room, situated near the large window. The floor is made of polished light wood planks. On the other side of the cabin, a continuation of the wooden paneling and A-frame structure mirrors the visible portion, maintaining architectural consistency. Another large window, identical in style and size to the visible one, would likely offer a similar forest view on the opposite side of the cabin, bathing the entire space in natural light filtered through the trees. A small, rustic armchair with a woven texture would be positioned near the stove on the opposite side, providing an additional seating area for enjoying the warmth. A stack of neatly chopped firewood is arranged next to the stove, ready for use, emphasizing the cabin's rustic functionality. "},"b62ec969-b045-4f4e-8926-5f4c2f067b60":{"id":"b62ec969-b045-4f4e-8926-5f4c2f067b60","type":"pano","parentId":"bcb8d155-0117-4d20-85cf-aa76627996e8","source":{"type":"generate_world","url":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/9b7df6b9-cf45-46a1-b131-0b0f07d9ffd0_panos/rgb_0.png","world_id":"3e8d210f-28ea-4375-92d8-3ee6f14db61d","status":"complete"},"createdAt":1765325565022},"42bf7afb-bf2f-434e-b5a3-573b48ac849a":{"id":"42bf7afb-bf2f-434e-b5a3-573b48ac849a","type":"world","parentId":"b62ec969-b045-4f4e-8926-5f4c2f067b60","source":{"type":"generate_world","world_id":"3e8d210f-28ea-4375-92d8-3ee6f14db61d","spz_urls":{"500k":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/dcfef0e9-cad9-481b-888e-c0cd6a6cd897_ceramic_500k.spz","full_res":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/f86b7139-412c-49b8-9c8c-e0c7363ec5d2_ceramic.spz","100k":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/6a63455b-1534-483a-a433-c33f8341acbf_dust_100k.spz"},"posed_cubemaps_url":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/1b6d0eff-bb70-4a85-a9c3-7c115a9ddc76_cubemaps","minimap_url":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/b110166c-31b6-463d-a6bc-ca383343bb78_minimap.png","minimap_metadata":"[-1.6852229833602905, 1.5322132110595703, 14.28858642578125]","status":"complete","mpi_url":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/942b0d8e-2f83-413a-a0a0-98693d719be9_dust_mpi","cond_image_url":"https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/5c5474e3_image_prompt_sanitized.png"},"createdAt":1765325565022}}}}
@@ -0,0 +1,19 @@
curl 'https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects/cf326bd0-b7eb-454c-b433-54f36eb4d5a6:upload' \
-X POST \
-H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:145.0) Gecko/20100101 Firefox/145.0' \
-H 'Accept: */*' \
-H 'Accept-Language: en-US,en;q=0.5' \
-H 'Accept-Encoding: gzip, deflate, br, zstd' \
-H 'Referer: https://marble.worldlabs.ai/' \
-H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk1MTg5MTkxMTA3NjA1NDM0NGUxNWUyNTY0MjViYjQyNWVlYjNhNWMiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiVmljdG9yIFZvaWNlIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0t3MGFhWEtZU3F5LVhra242OXlkSUpGR25KQTM3UzEzWHZqTlk0ZDl4Q3pVektVdz1zOTYtYyIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS93bHQtdHJhaW5pbmctZ3NjIiwiYXVkIjoid2x0LXRyYWluaW5nLWdzYyIsImF1dGhfdGltZSI6MTc2NTMyNTM3NCwidXNlcl9pZCI6InNWZ0FRRHlIM0JmWU9CZkY2ZXBXVGpMSHlnWDIiLCJzdWIiOiJzVmdBUUR5SDNCZllPQmZGNmVwV1RqTEh5Z1gyIiwiaWF0IjoxNzY1MzI1Mzc0LCJleHAiOjE3NjUzMjg5NzQsImVtYWlsIjoidmljdG9ydm9pY2U4OUBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJnb29nbGUuY29tIjpbIjExNjQ1OTMwMDE5ODYxOTg4ODgzNiJdLCJlbWFpbCI6WyJ2aWN0b3J2b2ljZTg5QGdtYWlsLmNvbSJdfSwic2lnbl9pbl9wcm92aWRlciI6Imdvb2dsZS5jb20ifX0.U_mp4iAw14poJz11UFKg3QVO6TSfE8Gps6VqLhg4GLLumjilgnuyD8mnKFznRFX0R-OyBf8mugVk59zfy4BugeZ0cXRkm1FWHqR9BVJZ9BQoEobXw4RqHkUvtgSe2qnx8a4fLUVp5zxNPpXfEjLAdcG4YnNwdZ7-TxyCDvO3U_WHkG3aAJup1q5KOqURDeYoQ7m7THeobyM3pnmDO03GIMdYgLV3Lnpvk6FTprtsV8SxWr8ZJ-Cy1g_I9wtKcB4B5bIFLjfV4r8W_-uq_g5ddbri-Yy28Ah97jxFIFOVChbPSbQpS-TRshW6M2cM5Y2EhGudpgVQBM-Tekco9fGSRw' \
-H 'Origin: https://marble.worldlabs.ai' \
-H 'Sec-GPC: 1' \
-H 'Connection: keep-alive' \
-H 'Sec-Fetch-Dest: empty' \
-H 'Sec-Fetch-Mode: cors' \
-H 'Sec-Fetch-Site: cross-site' \
-H 'Priority: u=4' \
-H 'Pragma: no-cache' \
-H 'Cache-Control: no-cache' \
-H 'Content-Length: 0' \
-H 'TE: trailers'
@@ -0,0 +1,9 @@
{
"upload_id": "cf326bd0-b7eb-454c-b433-54f36eb4d5a6/asset.jpg",
"upload_url": "https://storage.googleapis.com/wlt-training-gsc-marble-assets-prod/temp/objects/cf326bd0-b7eb-454c-b433-54f36eb4d5a6/asset.jpg?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=wlt-training-gsc-sa%40wlt-training-gsc.iam.gserviceaccount.com%2F20251210%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20251210T001237Z&X-Goog-Expires=3600&X-Goog-SignedHeaders=content-type%3Bhost%3Bx-goog-content-length-range&X-Goog-Signature=338a4058e69f0f4d717e64ffbd9ac5609b63a67a43a9cb5027a65822edafee2dcf6769dafda8d82f812b0a009c53af77df6c8163e2d884bee2ab1a33ce63894e43f5faac07553528feadcc009f71f9b6195f6a2f73c1c3f8e5772a63d53c7c0ffc937d3c96b221cf760367bf435318f6c463b029d7879f26064acb5ab8e404d18a16b9263a0157b4edcfffe840b682a6e8198f342dcee51b928f235e1618aa98fdd7ee55bca8f27017738037b81b3041f12a72903c0decbc0d83b3fd39bb0edd3b750441bc21e9a226723876e4a52164b61659678e24f8af001451fa84a14c01b372d71cd55abaacd67e2b32df55f65a49f6ba0640b5239ab23b7eb45ad30d54",
"required_headers": {
"Content-Type": "image/jpeg",
"x-goog-content-length-range": "0,1048576000"
},
"curl_example": "curl -X PUT -H 'Content-Type: image/jpeg' -H 'x-goog-content-length-range: 0,1048576000' --upload-file my-file 'https://storage.googleapis.com/wlt-training-gsc-marble-assets-prod/temp/objects/cf326bd0-b7eb-454c-b433-54f36eb4d5a6/asset.jpg?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=wlt-training-gsc-sa%40wlt-training-gsc.iam.gserviceaccount.com%2F20251210%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20251210T001237Z&X-Goog-Expires=3600&X-Goog-SignedHeaders=content-type%3Bhost%3Bx-goog-content-length-range&X-Goog-Signature=338a4058e69f0f4d717e64ffbd9ac5609b63a67a43a9cb5027a65822edafee2dcf6769dafda8d82f812b0a009c53af77df6c8163e2d884bee2ab1a33ce63894e43f5faac07553528feadcc009f71f9b6195f6a2f73c1c3f8e5772a63d53c7c0ffc937d3c96b221cf760367bf435318f6c463b029d7879f26064acb5ab8e404d18a16b9263a0157b4edcfffe840b682a6e8198f342dcee51b928f235e1618aa98fdd7ee55bca8f27017738037b81b3041f12a72903c0decbc0d83b3fd39bb0edd3b750441bc21e9a226723876e4a52164b61659678e24f8af001451fa84a14c01b372d71cd55abaacd67e2b32df55f65a49f6ba0640b5239ab23b7eb45ad30d54'"
}
@@ -0,0 +1,19 @@
curl 'https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects/cf326bd0-b7eb-454c-b433-54f36eb4d5a6:complete' \
-X POST \
-H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:145.0) Gecko/20100101 Firefox/145.0' \
-H 'Accept: */*' \
-H 'Accept-Language: en-US,en;q=0.5' \
-H 'Accept-Encoding: gzip, deflate, br, zstd' \
-H 'Referer: https://marble.worldlabs.ai/' \
-H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk1MTg5MTkxMTA3NjA1NDM0NGUxNWUyNTY0MjViYjQyNWVlYjNhNWMiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiVmljdG9yIFZvaWNlIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0t3MGFhWEtZU3F5LVhra242OXlkSUpGR25KQTM3UzEzWHZqTlk0ZDl4Q3pVektVdz1zOTYtYyIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS93bHQtdHJhaW5pbmctZ3NjIiwiYXVkIjoid2x0LXRyYWluaW5nLWdzYyIsImF1dGhfdGltZSI6MTc2NTMyNTM3NCwidXNlcl9pZCI6InNWZ0FRRHlIM0JmWU9CZkY2ZXBXVGpMSHlnWDIiLCJzdWIiOiJzVmdBUUR5SDNCZllPQmZGNmVwV1RqTEh5Z1gyIiwiaWF0IjoxNzY1MzI1Mzc0LCJleHAiOjE3NjUzMjg5NzQsImVtYWlsIjoidmljdG9ydm9pY2U4OUBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJnb29nbGUuY29tIjpbIjExNjQ1OTMwMDE5ODYxOTg4ODgzNiJdLCJlbWFpbCI6WyJ2aWN0b3J2b2ljZTg5QGdtYWlsLmNvbSJdfSwic2lnbl9pbl9wcm92aWRlciI6Imdvb2dsZS5jb20ifX0.U_mp4iAw14poJz11UFKg3QVO6TSfE8Gps6VqLhg4GLLumjilgnuyD8mnKFznRFX0R-OyBf8mugVk59zfy4BugeZ0cXRkm1FWHqR9BVJZ9BQoEobXw4RqHkUvtgSe2qnx8a4fLUVp5zxNPpXfEjLAdcG4YnNwdZ7-TxyCDvO3U_WHkG3aAJup1q5KOqURDeYoQ7m7THeobyM3pnmDO03GIMdYgLV3Lnpvk6FTprtsV8SxWr8ZJ-Cy1g_I9wtKcB4B5bIFLjfV4r8W_-uq_g5ddbri-Yy28Ah97jxFIFOVChbPSbQpS-TRshW6M2cM5Y2EhGudpgVQBM-Tekco9fGSRw' \
-H 'Origin: https://marble.worldlabs.ai' \
-H 'Sec-GPC: 1' \
-H 'Connection: keep-alive' \
-H 'Sec-Fetch-Dest: empty' \
-H 'Sec-Fetch-Mode: cors' \
-H 'Sec-Fetch-Site: cross-site' \
-H 'Priority: u=4' \
-H 'Pragma: no-cache' \
-H 'Cache-Control: no-cache' \
-H 'Content-Length: 0' \
-H 'TE: trailers'
@@ -0,0 +1,12 @@
{
"context": null,
"id": "cf326bd0-b7eb-454c-b433-54f36eb4d5a6",
"display_name": "uploaded_image_7e2fb65f-819a-486b-9609-f782ad4d244f.jpeg",
"owner_id": "sVgAQDyH3BfYOBfF6epWTjLHygX2",
"status": "READY",
"created_at": 1765325556,
"updated_at": 1765325558,
"object_uri": "https://cdn.marble.worldlabs.ai/object/cf326bd0-b7eb-454c-b433-54f36eb4d5a6/asset.jpg",
"mime_type": "image/jpeg",
"metadata": null
}
@@ -0,0 +1,20 @@
curl 'https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/recaption2' \
-X POST \
-H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:145.0) Gecko/20100101 Firefox/145.0' \
-H 'Accept: */*' \
-H 'Accept-Language: en-US,en;q=0.5' \
-H 'Accept-Encoding: gzip, deflate, br, zstd' \
-H 'Referer: https://marble.worldlabs.ai/' \
-H 'content-type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk1MTg5MTkxMTA3NjA1NDM0NGUxNWUyNTY0MjViYjQyNWVlYjNhNWMiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiVmljdG9yIFZvaWNlIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0t3MGFhWEtZU3F5LVhra242OXlkSUpGR25KQTM3UzEzWHZqTlk0ZDl4Q3pVektVdz1zOTYtYyIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS93bHQtdHJhaW5pbmctZ3NjIiwiYXVkIjoid2x0LXRyYWluaW5nLWdzYyIsImF1dGhfdGltZSI6MTc2NTMyNTM3NCwidXNlcl9pZCI6InNWZ0FRRHlIM0JmWU9CZkY2ZXBXVGpMSHlnWDIiLCJzdWIiOiJzVmdBUUR5SDNCZllPQmZGNmVwV1RqTEh5Z1gyIiwiaWF0IjoxNzY1MzI1Mzc0LCJleHAiOjE3NjUzMjg5NzQsImVtYWlsIjoidmljdG9ydm9pY2U4OUBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJnb29nbGUuY29tIjpbIjExNjQ1OTMwMDE5ODYxOTg4ODgzNiJdLCJlbWFpbCI6WyJ2aWN0b3J2b2ljZTg5QGdtYWlsLmNvbSJdfSwic2lnbl9pbl9wcm92aWRlciI6Imdvb2dsZS5jb20ifX0.U_mp4iAw14poJz11UFKg3QVO6TSfE8Gps6VqLhg4GLLumjilgnuyD8mnKFznRFX0R-OyBf8mugVk59zfy4BugeZ0cXRkm1FWHqR9BVJZ9BQoEobXw4RqHkUvtgSe2qnx8a4fLUVp5zxNPpXfEjLAdcG4YnNwdZ7-TxyCDvO3U_WHkG3aAJup1q5KOqURDeYoQ7m7THeobyM3pnmDO03GIMdYgLV3Lnpvk6FTprtsV8SxWr8ZJ-Cy1g_I9wtKcB4B5bIFLjfV4r8W_-uq_g5ddbri-Yy28Ah97jxFIFOVChbPSbQpS-TRshW6M2cM5Y2EhGudpgVQBM-Tekco9fGSRw' \
-H 'Origin: https://marble.worldlabs.ai' \
-H 'Sec-GPC: 1' \
-H 'Connection: keep-alive' \
-H 'Sec-Fetch-Dest: empty' \
-H 'Sec-Fetch-Mode: cors' \
-H 'Sec-Fetch-Site: cross-site' \
-H 'Priority: u=4' \
-H 'Pragma: no-cache' \
-H 'Cache-Control: no-cache' \
-H 'TE: trailers' \
--data-raw '{"world_prompt":{"type":"image","image_prompt":{"uri":"https://cdn.marble.worldlabs.ai/object/cf326bd0-b7eb-454c-b433-54f36eb4d5a6/asset.jpg"},"text_prompt":""},"user_caption":"","context":{"run_id":"a37a82a4-0b39-47e1-acf9-07a65888d5be"}}'
@@ -0,0 +1,13 @@
{
"world_prompt": {
"type": "image",
"image_prompt": {
"uri": "https://cdn.marble.worldlabs.ai/object/cf326bd0-b7eb-454c-b433-54f36eb4d5a6/asset.jpg"
},
"text_prompt": ""
},
"user_caption": "",
"context": {
"run_id": "a37a82a4-0b39-47e1-acf9-07a65888d5be"
}
}
@@ -0,0 +1,4 @@
{
"caption": "The scene is a cozy A-frame cabin interior, rendered in a realistic style, exuding warmth and rustic charm, creating a tranquil and inviting atmosphere. A prominent wooden A-frame structure defines the architecture, featuring angled timber beams that converge towards the peak of the ceiling. The walls and ceiling are paneled with warm-toned wooden planks, creating a consistent and enveloping aesthetic throughout the space. A large, floor-to-ceiling window dominates one wall, offering an expansive view of a lush forest with tall trees and autumnal foliage outside, suggesting the cabin is nestled deep within nature. A plush bed occupies a significant portion of the floor space, adorned with a dark grey duvet, numerous pillows, and a rust-colored throw blanket, inviting comfort and relaxation. A cream-colored faux fur rug rests on the wooden floor beside the bed, adding texture and a soft landing. A black wood-burning stove with a visible fire provides heat and a focal point for the room, situated near the large window. The floor is made of polished light wood planks. On the other side of the cabin, a continuation of the wooden paneling and A-frame structure mirrors the visible portion, maintaining architectural consistency. Another large window, identical in style and size to the visible one, would likely offer a similar forest view on the opposite side of the cabin, bathing the entire space in natural light filtered through the trees. A small, rustic armchair with a woven texture would be positioned near the stove on the opposite side, providing an additional seating area for enjoying the warmth. A stack of neatly chopped firewood is arranged next to the stove, ready for use, emphasizing the cabin's rustic functionality. ",
"title": "Cozy A-frame Cabin Retreat"
}
@@ -0,0 +1,20 @@
curl 'https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/worlds' \
-X POST \
-H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:145.0) Gecko/20100101 Firefox/145.0' \
-H 'Accept: */*' \
-H 'Accept-Language: en-US,en;q=0.5' \
-H 'Accept-Encoding: gzip, deflate, br, zstd' \
-H 'Referer: https://marble.worldlabs.ai/' \
-H 'content-type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk1MTg5MTkxMTA3NjA1NDM0NGUxNWUyNTY0MjViYjQyNWVlYjNhNWMiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiVmljdG9yIFZvaWNlIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0t3MGFhWEtZU3F5LVhra242OXlkSUpGR25KQTM3UzEzWHZqTlk0ZDl4Q3pVektVdz1zOTYtYyIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS93bHQtdHJhaW5pbmctZ3NjIiwiYXVkIjoid2x0LXRyYWluaW5nLWdzYyIsImF1dGhfdGltZSI6MTc2NTMyNTM3NCwidXNlcl9pZCI6InNWZ0FRRHlIM0JmWU9CZkY2ZXBXVGpMSHlnWDIiLCJzdWIiOiJzVmdBUUR5SDNCZllPQmZGNmVwV1RqTEh5Z1gyIiwiaWF0IjoxNzY1MzI1Mzc0LCJleHAiOjE3NjUzMjg5NzQsImVtYWlsIjoidmljdG9ydm9pY2U4OUBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJnb29nbGUuY29tIjpbIjExNjQ1OTMwMDE5ODYxOTg4ODgzNiJdLCJlbWFpbCI6WyJ2aWN0b3J2b2ljZTg5QGdtYWlsLmNvbSJdfSwic2lnbl9pbl9wcm92aWRlciI6Imdvb2dsZS5jb20ifX0.U_mp4iAw14poJz11UFKg3QVO6TSfE8Gps6VqLhg4GLLumjilgnuyD8mnKFznRFX0R-OyBf8mugVk59zfy4BugeZ0cXRkm1FWHqR9BVJZ9BQoEobXw4RqHkUvtgSe2qnx8a4fLUVp5zxNPpXfEjLAdcG4YnNwdZ7-TxyCDvO3U_WHkG3aAJup1q5KOqURDeYoQ7m7THeobyM3pnmDO03GIMdYgLV3Lnpvk6FTprtsV8SxWr8ZJ-Cy1g_I9wtKcB4B5bIFLjfV4r8W_-uq_g5ddbri-Yy28Ah97jxFIFOVChbPSbQpS-TRshW6M2cM5Y2EhGudpgVQBM-Tekco9fGSRw' \
-H 'Origin: https://marble.worldlabs.ai' \
-H 'Sec-GPC: 1' \
-H 'Connection: keep-alive' \
-H 'Sec-Fetch-Dest: empty' \
-H 'Sec-Fetch-Mode: cors' \
-H 'Sec-Fetch-Site: cross-site' \
-H 'Priority: u=4' \
-H 'Pragma: no-cache' \
-H 'Cache-Control: no-cache' \
-H 'TE: trailers' \
--data-raw $'{"permission":{"public":true},"generation_input":{"model":"Marble 0.1-plus","prompt":{"type":"image","image_prompt":{"uri":"https://cdn.marble.worldlabs.ai/object/cf326bd0-b7eb-454c-b433-54f36eb4d5a6/asset.jpg"},"text_prompt":"The scene is a cozy A-frame cabin interior, rendered in a realistic style, exuding warmth and rustic charm, creating a tranquil and inviting atmosphere. A prominent wooden A-frame structure defines the architecture, featuring angled timber beams that converge towards the peak of the ceiling. The walls and ceiling are paneled with warm-toned wooden planks, creating a consistent and enveloping aesthetic throughout the space. A large, floor-to-ceiling window dominates one wall, offering an expansive view of a lush forest with tall trees and autumnal foliage outside, suggesting the cabin is nestled deep within nature. A plush bed occupies a significant portion of the floor space, adorned with a dark grey duvet, numerous pillows, and a rust-colored throw blanket, inviting comfort and relaxation. A cream-colored faux fur rug rests on the wooden floor beside the bed, adding texture and a soft landing. A black wood-burning stove with a visible fire provides heat and a focal point for the room, situated near the large window. The floor is made of polished light wood planks. On the other side of the cabin, a continuation of the wooden paneling and A-frame structure mirrors the visible portion, maintaining architectural consistency. Another large window, identical in style and size to the visible one, would likely offer a similar forest view on the opposite side of the cabin, bathing the entire space in natural light filtered through the trees. A small, rustic armchair with a woven texture would be positioned near the stove on the opposite side, providing an additional seating area for enjoying the warmth. A stack of neatly chopped firewood is arranged next to the stove, ready for use, emphasizing the cabin\'s rustic functionality. "}},"context":{"run_id":"a37a82a4-0b39-47e1-acf9-07a65888d5be"}}'
@@ -0,0 +1,18 @@
{
"permission": {
"public": true
},
"generation_input": {
"model": "Marble 0.1-plus",
"prompt": {
"type": "image",
"image_prompt": {
"uri": "https://cdn.marble.worldlabs.ai/object/cf326bd0-b7eb-454c-b433-54f36eb4d5a6/asset.jpg"
},
"text_prompt": "The scene is a cozy A-frame cabin interior, rendered in a realistic style, exuding warmth and rustic charm, creating a tranquil and inviting atmosphere. A prominent wooden A-frame structure defines the architecture, featuring angled timber beams that converge towards the peak of the ceiling. The walls and ceiling are paneled with warm-toned wooden planks, creating a consistent and enveloping aesthetic throughout the space. A large, floor-to-ceiling window dominates one wall, offering an expansive view of a lush forest with tall trees and autumnal foliage outside, suggesting the cabin is nestled deep within nature. A plush bed occupies a significant portion of the floor space, adorned with a dark grey duvet, numerous pillows, and a rust-colored throw blanket, inviting comfort and relaxation. A cream-colored faux fur rug rests on the wooden floor beside the bed, adding texture and a soft landing. A black wood-burning stove with a visible fire provides heat and a focal point for the room, situated near the large window. The floor is made of polished light wood planks. On the other side of the cabin, a continuation of the wooden paneling and A-frame structure mirrors the visible portion, maintaining architectural consistency. Another large window, identical in style and size to the visible one, would likely offer a similar forest view on the opposite side of the cabin, bathing the entire space in natural light filtered through the trees. A small, rustic armchair with a woven texture would be positioned near the stove on the opposite side, providing an additional seating area for enjoying the warmth. A stack of neatly chopped firewood is arranged next to the stove, ready for use, emphasizing the cabin's rustic functionality. "
}
},
"context": {
"run_id": "a37a82a4-0b39-47e1-acf9-07a65888d5be"
}
}
@@ -0,0 +1,37 @@
{
"context": {
"run_id": "a37a82a4-0b39-47e1-acf9-07a65888d5be",
"project_id": null
},
"id": "3e8d210f-28ea-4375-92d8-3ee6f14db61d",
"display_name": null,
"status": "INITIALIZING",
"error": null,
"owner_id": "sVgAQDyH3BfYOBfF6epWTjLHygX2",
"created_at": 1765325564,
"updated_at": 1765325564,
"permission": {
"public": true,
"allowed_readers": [],
"allowed_writers": []
},
"stats": null,
"application_data": null,
"generation_input": {
"model": "Marble 0.1-plus",
"seed": null,
"prompt": {
"type": "image",
"text_prompt": "The scene is a cozy A-frame cabin interior, rendered in a realistic style, exuding warmth and rustic charm, creating a tranquil and inviting atmosphere. A prominent wooden A-frame structure defines the architecture, featuring angled timber beams that converge towards the peak of the ceiling. The walls and ceiling are paneled with warm-toned wooden planks, creating a consistent and enveloping aesthetic throughout the space. A large, floor-to-ceiling window dominates one wall, offering an expansive view of a lush forest with tall trees and autumnal foliage outside, suggesting the cabin is nestled deep within nature. A plush bed occupies a significant portion of the floor space, adorned with a dark grey duvet, numerous pillows, and a rust-colored throw blanket, inviting comfort and relaxation. A cream-colored faux fur rug rests on the wooden floor beside the bed, adding texture and a soft landing. A black wood-burning stove with a visible fire provides heat and a focal point for the room, situated near the large window. The floor is made of polished light wood planks. On the other side of the cabin, a continuation of the wooden paneling and A-frame structure mirrors the visible portion, maintaining architectural consistency. Another large window, identical in style and size to the visible one, would likely offer a similar forest view on the opposite side of the cabin, bathing the entire space in natural light filtered through the trees. A small, rustic armchair with a woven texture would be positioned near the stove on the opposite side, providing an additional seating area for enjoying the warmth. A stack of neatly chopped firewood is arranged next to the stove, ready for use, emphasizing the cabin's rustic functionality. ",
"image_prompt": {
"uri": "https://cdn.marble.worldlabs.ai/3e8d210f-28ea-4375-92d8-3ee6f14db61d/5c5474e3_image_prompt_sanitized.png",
"data_base64": null,
"extension": "png"
},
"is_pano": null
}
},
"tags": null,
"hq_mesh_export_op_id": null,
"generation_output": null
}
@@ -0,0 +1,20 @@
curl 'https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects/a37a82a4-0b39-47e1-acf9-07a65888d5be' \
-X PATCH \
-H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:145.0) Gecko/20100101 Firefox/145.0' \
-H 'Accept: */*' \
-H 'Accept-Language: en-US,en;q=0.5' \
-H 'Accept-Encoding: gzip, deflate, br, zstd' \
-H 'Referer: https://marble.worldlabs.ai/' \
-H 'content-type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk1MTg5MTkxMTA3NjA1NDM0NGUxNWUyNTY0MjViYjQyNWVlYjNhNWMiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiVmljdG9yIFZvaWNlIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0t3MGFhWEtZU3F5LVhra242OXlkSUpGR25KQTM3UzEzWHZqTlk0ZDl4Q3pVektVdz1zOTYtYyIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS93bHQtdHJhaW5pbmctZ3NjIiwiYXVkIjoid2x0LXRyYWluaW5nLWdzYyIsImF1dGhfdGltZSI6MTc2NTMyNTM3NCwidXNlcl9pZCI6InNWZ0FRRHlIM0JmWU9CZkY2ZXBXVGpMSHlnWDIiLCJzdWIiOiJzVmdBUUR5SDNCZllPQmZGNmVwV1RqTEh5Z1gyIiwiaWF0IjoxNzY1MzI1Mzc0LCJleHAiOjE3NjUzMjg5NzQsImVtYWlsIjoidmljdG9ydm9pY2U4OUBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJnb29nbGUuY29tIjpbIjExNjQ1OTMwMDE5ODYxOTg4ODgzNiJdLCJlbWFpbCI6WyJ2aWN0b3J2b2ljZTg5QGdtYWlsLmNvbSJdfSwic2lnbl9pbl9wcm92aWRlciI6Imdvb2dsZS5jb20ifX0.U_mp4iAw14poJz11UFKg3QVO6TSfE8Gps6VqLhg4GLLumjilgnuyD8mnKFznRFX0R-OyBf8mugVk59zfy4BugeZ0cXRkm1FWHqR9BVJZ9BQoEobXw4RqHkUvtgSe2qnx8a4fLUVp5zxNPpXfEjLAdcG4YnNwdZ7-TxyCDvO3U_WHkG3aAJup1q5KOqURDeYoQ7m7THeobyM3pnmDO03GIMdYgLV3Lnpvk6FTprtsV8SxWr8ZJ-Cy1g_I9wtKcB4B5bIFLjfV4r8W_-uq_g5ddbri-Yy28Ah97jxFIFOVChbPSbQpS-TRshW6M2cM5Y2EhGudpgVQBM-Tekco9fGSRw' \
-H 'Origin: https://marble.worldlabs.ai' \
-H 'Sec-GPC: 1' \
-H 'Connection: keep-alive' \
-H 'Sec-Fetch-Dest: empty' \
-H 'Sec-Fetch-Mode: cors' \
-H 'Sec-Fetch-Site: cross-site' \
-H 'Priority: u=4' \
-H 'Pragma: no-cache' \
-H 'Cache-Control: no-cache' \
-H 'TE: trailers' \
--data-raw $'{"object":{"metadata":{"version":"0.0.1","name":"Cozy A-frame Cabin Retreat","createdAt":1765325556528,"updatedAt":1765325565023,"useAdvancedEditing":false,"draftMode":false,"nodes":{"bcb8d155-0117-4d20-85cf-aa76627996e8":{"id":"bcb8d155-0117-4d20-85cf-aa76627996e8","type":"input","parentId":null,"source":{"type":"image","image_url":"https://cdn.marble.worldlabs.ai/object/cf326bd0-b7eb-454c-b433-54f36eb4d5a6/asset.jpg"},"createdAt":1765325562986,"title":"Cozy A-frame Cabin Retreat","caption":"The scene is a cozy A-frame cabin interior, rendered in a realistic style, exuding warmth and rustic charm, creating a tranquil and inviting atmosphere. A prominent wooden A-frame structure defines the architecture, featuring angled timber beams that converge towards the peak of the ceiling. The walls and ceiling are paneled with warm-toned wooden planks, creating a consistent and enveloping aesthetic throughout the space. A large, floor-to-ceiling window dominates one wall, offering an expansive view of a lush forest with tall trees and autumnal foliage outside, suggesting the cabin is nestled deep within nature. A plush bed occupies a significant portion of the floor space, adorned with a dark grey duvet, numerous pillows, and a rust-colored throw blanket, inviting comfort and relaxation. A cream-colored faux fur rug rests on the wooden floor beside the bed, adding texture and a soft landing. A black wood-burning stove with a visible fire provides heat and a focal point for the room, situated near the large window. The floor is made of polished light wood planks. On the other side of the cabin, a continuation of the wooden paneling and A-frame structure mirrors the visible portion, maintaining architectural consistency. Another large window, identical in style and size to the visible one, would likely offer a similar forest view on the opposite side of the cabin, bathing the entire space in natural light filtered through the trees. A small, rustic armchair with a woven texture would be positioned near the stove on the opposite side, providing an additional seating area for enjoying the warmth. A stack of neatly chopped firewood is arranged next to the stove, ready for use, emphasizing the cabin\'s rustic functionality. "},"b62ec969-b045-4f4e-8926-5f4c2f067b60":{"id":"b62ec969-b045-4f4e-8926-5f4c2f067b60","type":"pano","parentId":"bcb8d155-0117-4d20-85cf-aa76627996e8","source":{"type":"generate_world","world_id":"3e8d210f-28ea-4375-92d8-3ee6f14db61d","status":"pending"},"createdAt":1765325565022},"42bf7afb-bf2f-434e-b5a3-573b48ac849a":{"id":"42bf7afb-bf2f-434e-b5a3-573b48ac849a","type":"world","parentId":"b62ec969-b045-4f4e-8926-5f4c2f067b60","source":{"type":"generate_world","world_id":"3e8d210f-28ea-4375-92d8-3ee6f14db61d","posed_cubemaps_url":"","minimap_url":"","minimap_metadata":"","status":"pending"},"createdAt":1765325565022}}}},"update_mask":["metadata"]}'
@@ -0,0 +1,54 @@
{
"object": {
"metadata": {
"version": "0.0.1",
"name": "Cozy A-frame Cabin Retreat",
"createdAt": 1765325556528,
"updatedAt": 1765325565023,
"useAdvancedEditing": false,
"draftMode": false,
"nodes": {
"bcb8d155-0117-4d20-85cf-aa76627996e8": {
"id": "bcb8d155-0117-4d20-85cf-aa76627996e8",
"type": "input",
"parentId": null,
"source": {
"type": "image",
"image_url": "https://cdn.marble.worldlabs.ai/object/cf326bd0-b7eb-454c-b433-54f36eb4d5a6/asset.jpg"
},
"createdAt": 1765325562986,
"title": "Cozy A-frame Cabin Retreat",
"caption": "The scene is a cozy A-frame cabin interior, rendered in a realistic style, exuding warmth and rustic charm, creating a tranquil and inviting atmosphere. A prominent wooden A-frame structure defines the architecture, featuring angled timber beams that converge towards the peak of the ceiling. The walls and ceiling are paneled with warm-toned wooden planks, creating a consistent and enveloping aesthetic throughout the space. A large, floor-to-ceiling window dominates one wall, offering an expansive view of a lush forest with tall trees and autumnal foliage outside, suggesting the cabin is nestled deep within nature. A plush bed occupies a significant portion of the floor space, adorned with a dark grey duvet, numerous pillows, and a rust-colored throw blanket, inviting comfort and relaxation. A cream-colored faux fur rug rests on the wooden floor beside the bed, adding texture and a soft landing. A black wood-burning stove with a visible fire provides heat and a focal point for the room, situated near the large window. The floor is made of polished light wood planks. On the other side of the cabin, a continuation of the wooden paneling and A-frame structure mirrors the visible portion, maintaining architectural consistency. Another large window, identical in style and size to the visible one, would likely offer a similar forest view on the opposite side of the cabin, bathing the entire space in natural light filtered through the trees. A small, rustic armchair with a woven texture would be positioned near the stove on the opposite side, providing an additional seating area for enjoying the warmth. A stack of neatly chopped firewood is arranged next to the stove, ready for use, emphasizing the cabins rustic functionality. "
},
"b62ec969-b045-4f4e-8926-5f4c2f067b60": {
"id": "b62ec969-b045-4f4e-8926-5f4c2f067b60",
"type": "pano",
"parentId": "bcb8d155-0117-4d20-85cf-aa76627996e8",
"source": {
"type": "generate_world",
"world_id": "3e8d210f-28ea-4375-92d8-3ee6f14db61d",
"status": "pending"
},
"createdAt": 1765325565022
},
"42bf7afb-bf2f-434e-b5a3-573b48ac849a": {
"id": "42bf7afb-bf2f-434e-b5a3-573b48ac849a",
"type": "world",
"parentId": "b62ec969-b045-4f4e-8926-5f4c2f067b60",
"source": {
"type": "generate_world",
"world_id": "3e8d210f-28ea-4375-92d8-3ee6f14db61d",
"posed_cubemaps_url": "",
"minimap_url": "",
"minimap_metadata": "",
"status": "pending"
},
"createdAt": 1765325565022
}
}
}
},
"update_mask": [
"metadata"
]
}
@@ -0,0 +1,58 @@
{
"context": null,
"id": "a37a82a4-0b39-47e1-acf9-07a65888d5be",
"display_name": null,
"owner_id": "sVgAQDyH3BfYOBfF6epWTjLHygX2",
"status": "CREATED",
"created_at": 1765325556,
"updated_at": 1765325565,
"object_uri": null,
"mime_type": "application/run+json",
"metadata": {
"version": "0.0.1",
"name": "Cozy A-frame Cabin Retreat",
"createdAt": 1765325556528,
"updatedAt": 1765325565023,
"useAdvancedEditing": false,
"draftMode": false,
"nodes": {
"bcb8d155-0117-4d20-85cf-aa76627996e8": {
"id": "bcb8d155-0117-4d20-85cf-aa76627996e8",
"type": "input",
"parentId": null,
"source": {
"type": "image",
"image_url": "https://cdn.marble.worldlabs.ai/object/cf326bd0-b7eb-454c-b433-54f36eb4d5a6/asset.jpg"
},
"createdAt": 1765325562986,
"title": "Cozy A-frame Cabin Retreat",
"caption": "The scene is a cozy A-frame cabin interior, rendered in a realistic style, exuding warmth and rustic charm, creating a tranquil and inviting atmosphere. A prominent wooden A-frame structure defines the architecture, featuring angled timber beams that converge towards the peak of the ceiling. The walls and ceiling are paneled with warm-toned wooden planks, creating a consistent and enveloping aesthetic throughout the space. A large, floor-to-ceiling window dominates one wall, offering an expansive view of a lush forest with tall trees and autumnal foliage outside, suggesting the cabin is nestled deep within nature. A plush bed occupies a significant portion of the floor space, adorned with a dark grey duvet, numerous pillows, and a rust-colored throw blanket, inviting comfort and relaxation. A cream-colored faux fur rug rests on the wooden floor beside the bed, adding texture and a soft landing. A black wood-burning stove with a visible fire provides heat and a focal point for the room, situated near the large window. The floor is made of polished light wood planks. On the other side of the cabin, a continuation of the wooden paneling and A-frame structure mirrors the visible portion, maintaining architectural consistency. Another large window, identical in style and size to the visible one, would likely offer a similar forest view on the opposite side of the cabin, bathing the entire space in natural light filtered through the trees. A small, rustic armchair with a woven texture would be positioned near the stove on the opposite side, providing an additional seating area for enjoying the warmth. A stack of neatly chopped firewood is arranged next to the stove, ready for use, emphasizing the cabins rustic functionality. "
},
"b62ec969-b045-4f4e-8926-5f4c2f067b60": {
"id": "b62ec969-b045-4f4e-8926-5f4c2f067b60",
"type": "pano",
"parentId": "bcb8d155-0117-4d20-85cf-aa76627996e8",
"source": {
"type": "generate_world",
"world_id": "3e8d210f-28ea-4375-92d8-3ee6f14db61d",
"status": "pending"
},
"createdAt": 1765325565022
},
"42bf7afb-bf2f-434e-b5a3-573b48ac849a": {
"id": "42bf7afb-bf2f-434e-b5a3-573b48ac849a",
"type": "world",
"parentId": "b62ec969-b045-4f4e-8926-5f4c2f067b60",
"source": {
"type": "generate_world",
"world_id": "3e8d210f-28ea-4375-92d8-3ee6f14db61d",
"posed_cubemaps_url": "",
"minimap_url": "",
"minimap_metadata": "",
"status": "pending"
},
"createdAt": 1765325565022
}
}
}
}
@@ -0,0 +1,62 @@
https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects
fetch("https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects", {
"headers": {
"accept": "*/*",
"accept-language": "en-US,en;q=0.9",
"authorization": "Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk1MTg5MTkxMTA3NjA1NDM0NGUxNWUyNTY0MjViYjQyNWVlYjNhNWMiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiVm9jb2RlcyBWb2NvZGVzIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0x6Mi0yT2FBbTBNUXhSNmo4Q05yLVBvOF9Yci1hcnlBVGlDbjRjMGlfVHVEbUxfZz1zOTYtYyIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS93bHQtdHJhaW5pbmctZ3NjIiwiYXVkIjoid2x0LXRyYWluaW5nLWdzYyIsImF1dGhfdGltZSI6MTc2NTQzMzEwOCwidXNlcl9pZCI6ImhkWXRlM3JWcldic3dKWkVnbEw1Q2RtS2Z4djEiLCJzdWIiOiJoZFl0ZTNyVnJXYnN3SlpFZ2xMNUNkbUtmeHYxIiwiaWF0IjoxNzY1NDMzMTA4LCJleHAiOjE3NjU0MzY3MDgsImVtYWlsIjoidm9jb2RlczIwMjBAZ21haWwuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImZpcmViYXNlIjp7ImlkZW50aXRpZXMiOnsiZ29vZ2xlLmNvbSI6WyIxMTMxMDE5Njc2MTIzOTY3OTM3NzciXSwiZW1haWwiOlsidm9jb2RlczIwMjBAZ21haWwuY29tIl19LCJzaWduX2luX3Byb3ZpZGVyIjoiZ29vZ2xlLmNvbSJ9fQ.Q5yHeLfkTZb6DigaHmjwcejZNPw4byf0QAo-5z7FnZ2UJKfQINcwSQlXRTpDj-t4J8I5WlVBmqX9CM3UtSlQ4lJyc5UI2r5MPUri7Djl8NItKF0QEZhf-MO10crXuEG2IMNsiePrMjy9fDgHzOywA2HNpyJluZu9vgZqZxT4Nol11gcsxBssk7k-YWJR7Ig-pUgRzqkM0BgdX2HRad_gI2Fe7oH6s1cw1lJ157wYL-ltAH-diVWLuwlxolc7BeRDOEuqLlHtQgd4zVvVPrcOOSwwxOSPChgAaafERLBwaTBbFe3M0xqbdvPb7IU58LA-E3HlXyFsXcDf6m5anOyhrQ",
"baggage": "sentry-environment=prod,sentry-release=rel-5f2dd5e,sentry-public_key=3779934420ee57f00d05e5fb1e57f79d,sentry-trace_id=59eba427c8e042aaae0b9d30f7f3aa4f,sentry-org_id=4509005975388160,sentry-replay_id=ada67eaa105f47049ac59d52f38232dd,sentry-transaction=%2F(auth)%2Fonboarding,sentry-sampled=true,sentry-sample_rand=0.7143690752789659,sentry-sample_rate=1",
"cache-control": "no-cache",
"content-type": "application/json",
"pragma": "no-cache",
"priority": "u=1, i",
"sec-ch-ua": "\"Not_A Brand\";v=\"99\", \"Chromium\";v=\"142\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"Linux\"",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "cross-site",
"sentry-trace": "59eba427c8e042aaae0b9d30f7f3aa4f-81eca8557b198888-1"
},
"referrer": "https://marble.worldlabs.ai/",
"body": "{\"metadata\":{\"version\":\"0.0.1\",\"createdAt\":1765433415549,\"updatedAt\":1765433415549,\"useAdvancedEditing\":false,\"draftMode\":false,\"nodes\":{}},\"mime_type\":\"application/run+json\"}",
"method": "POST",
"mode": "cors",
"credentials": "include"
});
Request Body:
{
"metadata": {
"version": "0.0.1",
"createdAt": 1765433415549,
"updatedAt": 1765433415549,
"useAdvancedEditing": false,
"draftMode": false,
"nodes": {}
},
"mime_type": "application/run+json"
}
Response:
{
"context":null,
"id":"6623842d-3669-49b9-976f-5b239c24e353",
"display_name":null,
"owner_id":"hdYte3rVrWbswJZEglL5CdmKfxv1",
"status":"CREATED",
"created_at":1765433415,
"updated_at":1765433415,
"object_uri":null,
"mime_type":"application/run+json",
"metadata":{
"version":"0.0.1",
"createdAt":1765433415549,
"updatedAt":1765433415549,
"useAdvancedEditing":false,
"draftMode":false,
"nodes":{}
}
}
@@ -0,0 +1,52 @@
https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects
fetch("https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects", {
"headers": {
"accept": "*/*",
"accept-language": "en-US,en;q=0.9",
"authorization": "Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk1MTg5MTkxMTA3NjA1NDM0NGUxNWUyNTY0MjViYjQyNWVlYjNhNWMiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiVm9jb2RlcyBWb2NvZGVzIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0x6Mi0yT2FBbTBNUXhSNmo4Q05yLVBvOF9Yci1hcnlBVGlDbjRjMGlfVHVEbUxfZz1zOTYtYyIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS93bHQtdHJhaW5pbmctZ3NjIiwiYXVkIjoid2x0LXRyYWluaW5nLWdzYyIsImF1dGhfdGltZSI6MTc2NTQzMzEwOCwidXNlcl9pZCI6ImhkWXRlM3JWcldic3dKWkVnbEw1Q2RtS2Z4djEiLCJzdWIiOiJoZFl0ZTNyVnJXYnN3SlpFZ2xMNUNkbUtmeHYxIiwiaWF0IjoxNzY1NDMzMTA4LCJleHAiOjE3NjU0MzY3MDgsImVtYWlsIjoidm9jb2RlczIwMjBAZ21haWwuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImZpcmViYXNlIjp7ImlkZW50aXRpZXMiOnsiZ29vZ2xlLmNvbSI6WyIxMTMxMDE5Njc2MTIzOTY3OTM3NzciXSwiZW1haWwiOlsidm9jb2RlczIwMjBAZ21haWwuY29tIl19LCJzaWduX2luX3Byb3ZpZGVyIjoiZ29vZ2xlLmNvbSJ9fQ.Q5yHeLfkTZb6DigaHmjwcejZNPw4byf0QAo-5z7FnZ2UJKfQINcwSQlXRTpDj-t4J8I5WlVBmqX9CM3UtSlQ4lJyc5UI2r5MPUri7Djl8NItKF0QEZhf-MO10crXuEG2IMNsiePrMjy9fDgHzOywA2HNpyJluZu9vgZqZxT4Nol11gcsxBssk7k-YWJR7Ig-pUgRzqkM0BgdX2HRad_gI2Fe7oH6s1cw1lJ157wYL-ltAH-diVWLuwlxolc7BeRDOEuqLlHtQgd4zVvVPrcOOSwwxOSPChgAaafERLBwaTBbFe3M0xqbdvPb7IU58LA-E3HlXyFsXcDf6m5anOyhrQ",
"baggage": "sentry-environment=prod,sentry-release=rel-5f2dd5e,sentry-public_key=3779934420ee57f00d05e5fb1e57f79d,sentry-trace_id=59eba427c8e042aaae0b9d30f7f3aa4f,sentry-org_id=4509005975388160,sentry-replay_id=ada67eaa105f47049ac59d52f38232dd,sentry-transaction=%2F(auth)%2Fonboarding,sentry-sampled=true,sentry-sample_rand=0.7143690752789659,sentry-sample_rate=1",
"cache-control": "no-cache",
"content-type": "application/json",
"pragma": "no-cache",
"priority": "u=1, i",
"sec-ch-ua": "\"Not_A Brand\";v=\"99\", \"Chromium\";v=\"142\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"Linux\"",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "cross-site",
"sentry-trace": "59eba427c8e042aaae0b9d30f7f3aa4f-96c7b63a77da1719-1"
},
"referrer": "https://marble.worldlabs.ai/",
"body": "{\"display_name\":\"uploaded_image_f21c0e52-5202-43eb-ba46-121860ae8265.jpeg\",\"mime_type\":\"image/jpeg\"}",
"method": "POST",
"mode": "cors",
"credentials": "include"
});
Request Payload:
{
"display_name": "uploaded_image_f21c0e52-5202-43eb-ba46-121860ae8265.jpeg",
"mime_type": "image/jpeg"
}
Response:
{"context":null,"id":"ee33d03e-b153-4d56-a7cb-a08bf86bd20e","display_name":"uploaded_image_f21c0e52-5202-43eb-ba46-121860ae8265.jpeg","owner_id":"hdYte3rVrWbswJZEglL5CdmKfxv1","status":"CREATED","created_at":1765433415,"updated_at":1765433415,"object_uri":null,"mime_type":"image/jpeg","metadata":null}
Response Printed:
{
"context": null,
"id": "ee33d03e-b153-4d56-a7cb-a08bf86bd20e",
"display_name": "uploaded_image_f21c0e52-5202-43eb-ba46-121860ae8265.jpeg",
"owner_id": "hdYte3rVrWbswJZEglL5CdmKfxv1",
"status": "CREATED",
"created_at": 1765433415,
"updated_at": 1765433415,
"object_uri": null,
"mime_type": "image/jpeg",
"metadata": null
}
@@ -0,0 +1,41 @@
https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects/ee33d03e-b153-4d56-a7cb-a08bf86bd20e:upload
fetch("https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects/ee33d03e-b153-4d56-a7cb-a08bf86bd20e:upload", {
"headers": {
"accept": "*/*",
"accept-language": "en-US,en;q=0.9",
"authorization": "Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk1MTg5MTkxMTA3NjA1NDM0NGUxNWUyNTY0MjViYjQyNWVlYjNhNWMiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiVm9jb2RlcyBWb2NvZGVzIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0x6Mi0yT2FBbTBNUXhSNmo4Q05yLVBvOF9Yci1hcnlBVGlDbjRjMGlfVHVEbUxfZz1zOTYtYyIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS93bHQtdHJhaW5pbmctZ3NjIiwiYXVkIjoid2x0LXRyYWluaW5nLWdzYyIsImF1dGhfdGltZSI6MTc2NTQzMzEwOCwidXNlcl9pZCI6ImhkWXRlM3JWcldic3dKWkVnbEw1Q2RtS2Z4djEiLCJzdWIiOiJoZFl0ZTNyVnJXYnN3SlpFZ2xMNUNkbUtmeHYxIiwiaWF0IjoxNzY1NDMzMTA4LCJleHAiOjE3NjU0MzY3MDgsImVtYWlsIjoidm9jb2RlczIwMjBAZ21haWwuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImZpcmViYXNlIjp7ImlkZW50aXRpZXMiOnsiZ29vZ2xlLmNvbSI6WyIxMTMxMDE5Njc2MTIzOTY3OTM3NzciXSwiZW1haWwiOlsidm9jb2RlczIwMjBAZ21haWwuY29tIl19LCJzaWduX2luX3Byb3ZpZGVyIjoiZ29vZ2xlLmNvbSJ9fQ.Q5yHeLfkTZb6DigaHmjwcejZNPw4byf0QAo-5z7FnZ2UJKfQINcwSQlXRTpDj-t4J8I5WlVBmqX9CM3UtSlQ4lJyc5UI2r5MPUri7Djl8NItKF0QEZhf-MO10crXuEG2IMNsiePrMjy9fDgHzOywA2HNpyJluZu9vgZqZxT4Nol11gcsxBssk7k-YWJR7Ig-pUgRzqkM0BgdX2HRad_gI2Fe7oH6s1cw1lJ157wYL-ltAH-diVWLuwlxolc7BeRDOEuqLlHtQgd4zVvVPrcOOSwwxOSPChgAaafERLBwaTBbFe3M0xqbdvPb7IU58LA-E3HlXyFsXcDf6m5anOyhrQ",
"baggage": "sentry-environment=prod,sentry-release=rel-5f2dd5e,sentry-public_key=3779934420ee57f00d05e5fb1e57f79d,sentry-trace_id=59eba427c8e042aaae0b9d30f7f3aa4f,sentry-org_id=4509005975388160,sentry-replay_id=ada67eaa105f47049ac59d52f38232dd,sentry-transaction=%2F(auth)%2Fonboarding,sentry-sampled=true,sentry-sample_rand=0.7143690752789659,sentry-sample_rate=1",
"cache-control": "no-cache",
"pragma": "no-cache",
"priority": "u=1, i",
"sec-ch-ua": "\"Not_A Brand\";v=\"99\", \"Chromium\";v=\"142\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"Linux\"",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "cross-site",
"sentry-trace": "59eba427c8e042aaae0b9d30f7f3aa4f-b77b4ae878caa9c8-1"
},
"referrer": "https://marble.worldlabs.ai/",
"body": null,
"method": "POST",
"mode": "cors",
"credentials": "include"
});
Response:
{"upload_id":"ee33d03e-b153-4d56-a7cb-a08bf86bd20e/asset.jpg","upload_url":"https://storage.googleapis.com/wlt-training-gsc-marble-assets-prod/temp/objects/ee33d03e-b153-4d56-a7cb-a08bf86bd20e/asset.jpg?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=wlt-training-gsc-sa%40wlt-training-gsc.iam.gserviceaccount.com%2F20251211%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20251211T061016Z&X-Goog-Expires=3600&X-Goog-SignedHeaders=content-type%3Bhost%3Bx-goog-content-length-range&X-Goog-Signature=8c494d7afd19eea9820fc1d629d8b10cc76410c34f98c440665a0e2a7bf6980e6fadaa4a271c335de485780ee645dfb8b2f956cd8cc17fb1878581f5b39331208197579f9976bc6d21e75df1828c3bd5aba5bf21b91100f3c583b76ab2f0ce5fba32c671eaac860cfd43d4ecc31f509a83b1c30a8336d81fd1c9cd9fc9283ed4e8978c7a6418dc3ac3da51384041a5e3b7255b7bd67bdbbad5f65e87ef883d0dac9018caded615be46914b0d298fdc651bf1a77bef1d44d23ab416446c9dab42d9d82dc78ceab67379ad143dd99173fdfbbd7997a5b47673fc960cf511b76a6d1f941274a8bce456a16809c4f2752517f468611f67bf9eb1fab35e0d3280bdaa","required_headers":{"Content-Type":"image/jpeg","x-goog-content-length-range":"0,1048576000"},"curl_example":"curl -X PUT -H 'Content-Type: image/jpeg' -H 'x-goog-content-length-range: 0,1048576000' --upload-file my-file 'https://storage.googleapis.com/wlt-training-gsc-marble-assets-prod/temp/objects/ee33d03e-b153-4d56-a7cb-a08bf86bd20e/asset.jpg?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=wlt-training-gsc-sa%40wlt-training-gsc.iam.gserviceaccount.com%2F20251211%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20251211T061016Z&X-Goog-Expires=3600&X-Goog-SignedHeaders=content-type%3Bhost%3Bx-goog-content-length-range&X-Goog-Signature=8c494d7afd19eea9820fc1d629d8b10cc76410c34f98c440665a0e2a7bf6980e6fadaa4a271c335de485780ee645dfb8b2f956cd8cc17fb1878581f5b39331208197579f9976bc6d21e75df1828c3bd5aba5bf21b91100f3c583b76ab2f0ce5fba32c671eaac860cfd43d4ecc31f509a83b1c30a8336d81fd1c9cd9fc9283ed4e8978c7a6418dc3ac3da51384041a5e3b7255b7bd67bdbbad5f65e87ef883d0dac9018caded615be46914b0d298fdc651bf1a77bef1d44d23ab416446c9dab42d9d82dc78ceab67379ad143dd99173fdfbbd7997a5b47673fc960cf511b76a6d1f941274a8bce456a16809c4f2752517f468611f67bf9eb1fab35e0d3280bdaa'"}
Response Pretty Printed:
{
"upload_id": "ee33d03e-b153-4d56-a7cb-a08bf86bd20e/asset.jpg",
"upload_url": "https://storage.googleapis.com/wlt-training-gsc-marble-assets-prod/temp/objects/ee33d03e-b153-4d56-a7cb-a08bf86bd20e/asset.jpg?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=wlt-training-gsc-sa%40wlt-training-gsc.iam.gserviceaccount.com%2F20251211%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20251211T061016Z&X-Goog-Expires=3600&X-Goog-SignedHeaders=content-type%3Bhost%3Bx-goog-content-length-range&X-Goog-Signature=8c494d7afd19eea9820fc1d629d8b10cc76410c34f98c440665a0e2a7bf6980e6fadaa4a271c335de485780ee645dfb8b2f956cd8cc17fb1878581f5b39331208197579f9976bc6d21e75df1828c3bd5aba5bf21b91100f3c583b76ab2f0ce5fba32c671eaac860cfd43d4ecc31f509a83b1c30a8336d81fd1c9cd9fc9283ed4e8978c7a6418dc3ac3da51384041a5e3b7255b7bd67bdbbad5f65e87ef883d0dac9018caded615be46914b0d298fdc651bf1a77bef1d44d23ab416446c9dab42d9d82dc78ceab67379ad143dd99173fdfbbd7997a5b47673fc960cf511b76a6d1f941274a8bce456a16809c4f2752517f468611f67bf9eb1fab35e0d3280bdaa",
"required_headers": {
"Content-Type": "image/jpeg",
"x-goog-content-length-range": "0,1048576000"
},
"curl_example": "curl -X PUT -H 'Content-Type: image/jpeg' -H 'x-goog-content-length-range: 0,1048576000' --upload-file my-file 'https://storage.googleapis.com/wlt-training-gsc-marble-assets-prod/temp/objects/ee33d03e-b153-4d56-a7cb-a08bf86bd20e/asset.jpg?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=wlt-training-gsc-sa%40wlt-training-gsc.iam.gserviceaccount.com%2F20251211%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20251211T061016Z&X-Goog-Expires=3600&X-Goog-SignedHeaders=content-type%3Bhost%3Bx-goog-content-length-range&X-Goog-Signature=8c494d7afd19eea9820fc1d629d8b10cc76410c34f98c440665a0e2a7bf6980e6fadaa4a271c335de485780ee645dfb8b2f956cd8cc17fb1878581f5b39331208197579f9976bc6d21e75df1828c3bd5aba5bf21b91100f3c583b76ab2f0ce5fba32c671eaac860cfd43d4ecc31f509a83b1c30a8336d81fd1c9cd9fc9283ed4e8978c7a6418dc3ac3da51384041a5e3b7255b7bd67bdbbad5f65e87ef883d0dac9018caded615be46914b0d298fdc651bf1a77bef1d44d23ab416446c9dab42d9d82dc78ceab67379ad143dd99173fdfbbd7997a5b47673fc960cf511b76a6d1f941274a8bce456a16809c4f2752517f468611f67bf9eb1fab35e0d3280bdaa'"
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,44 @@
https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects/ee33d03e-b153-4d56-a7cb-a08bf86bd20e:complete
fetch("https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects/ee33d03e-b153-4d56-a7cb-a08bf86bd20e:complete", {
"headers": {
"accept": "*/*",
"accept-language": "en-US,en;q=0.9",
"authorization": "Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk1MTg5MTkxMTA3NjA1NDM0NGUxNWUyNTY0MjViYjQyNWVlYjNhNWMiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiVm9jb2RlcyBWb2NvZGVzIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0x6Mi0yT2FBbTBNUXhSNmo4Q05yLVBvOF9Yci1hcnlBVGlDbjRjMGlfVHVEbUxfZz1zOTYtYyIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS93bHQtdHJhaW5pbmctZ3NjIiwiYXVkIjoid2x0LXRyYWluaW5nLWdzYyIsImF1dGhfdGltZSI6MTc2NTQzMzEwOCwidXNlcl9pZCI6ImhkWXRlM3JWcldic3dKWkVnbEw1Q2RtS2Z4djEiLCJzdWIiOiJoZFl0ZTNyVnJXYnN3SlpFZ2xMNUNkbUtmeHYxIiwiaWF0IjoxNzY1NDMzMTA4LCJleHAiOjE3NjU0MzY3MDgsImVtYWlsIjoidm9jb2RlczIwMjBAZ21haWwuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImZpcmViYXNlIjp7ImlkZW50aXRpZXMiOnsiZ29vZ2xlLmNvbSI6WyIxMTMxMDE5Njc2MTIzOTY3OTM3NzciXSwiZW1haWwiOlsidm9jb2RlczIwMjBAZ21haWwuY29tIl19LCJzaWduX2luX3Byb3ZpZGVyIjoiZ29vZ2xlLmNvbSJ9fQ.Q5yHeLfkTZb6DigaHmjwcejZNPw4byf0QAo-5z7FnZ2UJKfQINcwSQlXRTpDj-t4J8I5WlVBmqX9CM3UtSlQ4lJyc5UI2r5MPUri7Djl8NItKF0QEZhf-MO10crXuEG2IMNsiePrMjy9fDgHzOywA2HNpyJluZu9vgZqZxT4Nol11gcsxBssk7k-YWJR7Ig-pUgRzqkM0BgdX2HRad_gI2Fe7oH6s1cw1lJ157wYL-ltAH-diVWLuwlxolc7BeRDOEuqLlHtQgd4zVvVPrcOOSwwxOSPChgAaafERLBwaTBbFe3M0xqbdvPb7IU58LA-E3HlXyFsXcDf6m5anOyhrQ",
"baggage": "sentry-environment=prod,sentry-release=rel-5f2dd5e,sentry-public_key=3779934420ee57f00d05e5fb1e57f79d,sentry-trace_id=59eba427c8e042aaae0b9d30f7f3aa4f,sentry-org_id=4509005975388160,sentry-replay_id=ada67eaa105f47049ac59d52f38232dd,sentry-transaction=%2F(auth)%2Fonboarding,sentry-sampled=true,sentry-sample_rand=0.7143690752789659,sentry-sample_rate=1",
"cache-control": "no-cache",
"pragma": "no-cache",
"priority": "u=1, i",
"sec-ch-ua": "\"Not_A Brand\";v=\"99\", \"Chromium\";v=\"142\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"Linux\"",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "cross-site",
"sentry-trace": "59eba427c8e042aaae0b9d30f7f3aa4f-87ab2d9c0dd400ab-1"
},
"referrer": "https://marble.worldlabs.ai/",
"body": null,
"method": "POST",
"mode": "cors",
"credentials": "include"
});
Response:
{"context":null,"id":"ee33d03e-b153-4d56-a7cb-a08bf86bd20e","display_name":"uploaded_image_f21c0e52-5202-43eb-ba46-121860ae8265.jpeg","owner_id":"hdYte3rVrWbswJZEglL5CdmKfxv1","status":"READY","created_at":1765433416,"updated_at":1765433417,"object_uri":"https://cdn.marble.worldlabs.ai/object/ee33d03e-b153-4d56-a7cb-a08bf86bd20e/asset.jpg","mime_type":"image/jpeg","metadata":null}
Response Pretty Print:
{
"context": null,
"id": "ee33d03e-b153-4d56-a7cb-a08bf86bd20e",
"display_name": "uploaded_image_f21c0e52-5202-43eb-ba46-121860ae8265.jpeg",
"owner_id": "hdYte3rVrWbswJZEglL5CdmKfxv1",
"status": "READY",
"created_at": 1765433416,
"updated_at": 1765433417,
"object_uri": "https://cdn.marble.worldlabs.ai/object/ee33d03e-b153-4d56-a7cb-a08bf86bd20e/asset.jpg",
"mime_type": "image/jpeg",
"metadata": null
}

Some files were not shown because too many files have changed in this diff Show More