Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
283 changes: 271 additions & 12 deletions Cargo.lock

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions crates/nodes/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,11 @@ rustls-platform-verifier = { version = "0.6", optional = true }
rav1e = { version = "0.8", optional = true, default-features = false, features = ["threading", "asm"] }
rav1d = { version = "1.1", optional = true, default-features = false, features = ["bitdepth_8", "bitdepth_16", "asm"] }

# Object storage (optional, behind `object_store` feature)
opendal = { version = "0.55", optional = true, default-features = false, features = [
"services-s3",
] }

# GPU compositing (optional, behind `gpu` feature)
wgpu = { version = "29", optional = true, default-features = false, features = ["vulkan", "metal", "dx12", "wgsl"] }
pollster = { version = "0.4", optional = true }
Expand Down Expand Up @@ -167,6 +172,7 @@ dav1d_static = ["dav1d"]
colorbars = ["dep:schemars", "dep:serde_json", "dep:fontdue"]
compositor = ["dep:schemars", "dep:serde_json", "dep:image", "dep:tiny-skia", "dep:rayon", "dep:fontdue", "dep:smallvec", "dep:uuid", "dep:resvg"]
gpu = ["compositor", "dep:wgpu", "dep:pollster", "dep:bytemuck"]
object_store = ["dep:opendal", "dep:schemars"]
codegen = ["dep:ts-rs"]
video = ["vp9", "av1", "openh264", "colorbars", "compositor"]

Expand Down
21 changes: 21 additions & 0 deletions crates/nodes/src/core/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ pub mod bytes_output;
pub mod file_read;
pub mod file_write;
pub mod json_serialize;
#[cfg(feature = "object_store")]
pub mod object_store_write;
pub mod pacer;
mod passthrough;
#[cfg(feature = "script")]
Expand Down Expand Up @@ -190,4 +192,23 @@ pub fn register_core_nodes(registry: &mut NodeRegistry, constraints: &GlobalNode

// --- Register TelemetryOut Node ---
telemetry_out::register(registry);

// --- Register ObjectStoreWriteNode ---
#[cfg(feature = "object_store")]
{
use schemars::schema_for;

let factory = object_store_write::ObjectStoreWriteNode::factory();
registry.register_dynamic_with_description(
"core::object_store_writer",
move |params| (factory)(params),
serde_json::to_value(schema_for!(object_store_write::ObjectStoreWriteConfig))
.expect("ObjectStoreWriteConfig schema should serialize to JSON"),
vec!["core".to_string(), "io".to_string(), "object_store".to_string()],
false,
"Streams binary data to S3-compatible object storage (AWS S3, GCS, Azure, MinIO, RustFS, etc.). \
Uses multipart upload for bounded memory usage. \
Credentials can be provided via config or environment variables.",
);
}
}
Loading
Loading