📄
Cargo.toml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
[workspace]
resolver = "3"
members = [
"rig",
"capture",
"replay",
"splatgen",
"render",
"sink",
]
# The workspace root is the `kinect-view/` tree from PLAN.md. `rig` holds the
# shared types (poses, intrinsics, splat batches, frame sources) so the other
# crates never need to depend on each other's heavy dependencies.
[workspace.package]
version = "0.1.0"
edition = "2024"
[workspace.dependencies]
# Internal crates.
rig = { path = "rig" }
capture = { path = "capture" }
replay = { path = "replay" }
splatgen = { path = "splatgen" }
render = { path = "render" }
sink = { path = "sink" }
# Math. glam is pinned to match Brush's workspace: brush-render's public API
# speaks glam, and a different minor would compile a second copy of the
# crate and break type interop.
glam = { version = "0.30", features = ["serde"] }
bytemuck = "1.20"
# Capture.
kinect-one = { git = "https://github.com/Aytixel/kinect-one", default-features = false, features = [
"parallel",
"cpu_depth",
"zune_color",
] }
nokhwa = { version = "0.10", features = [
"input-native",
"output-threaded",
] }
# Rendering: Brush's renderer as a library (not published to crates.io; it
# lives under crates/brush-render in the Brush repo). The burn/burn-wgpu
# pins mirror Brush's own workspace deps exactly — same git source and
# revision (the one in Brush's committed Cargo.lock) — so cargo unifies
# them into a single burn crate. A different source or revision would
# compile a second burn and break type interop, exactly like glam.
# Pin the revision whenever these move: burn's `main` drifts ahead of
# Brush between releases (a fusion API change broke the build once
# already).
brush-render = { git = "https://github.com/ArthurBrussee/brush", rev = "1388f74c6fe0236f68ee4915564bf00e9d2e3747" }
# NOTE: burn is declared with `branch = "main"` — the same requirement as
# Brush's workspace — so cargo unifies it with Brush's burn into one
# crate. The *revision actually built* is then pinned through the
# committed Cargo.lock (see the lock-sync note in PLAN.md): burn's `main`
# regularly drifts ahead of Brush and breaks its build, so the lock pins
# the `branch = "main"` resolution to the revision Brush's own committed
# lockfile uses. Never run `cargo update -p burn ...` blindly.
burn = { git = "https://github.com/tracel-ai/burn", branch = "main", default-features = false, features = [
"std",
"wgpu",
"autodiff",
] }
burn-wgpu = { git = "https://github.com/tracel-ai/burn", branch = "main", features = [
"exclusive-memory-only",
] }
# UI / sinks.
eframe = "0.37"
egui = "0.37"
# Headless egui test harness (wgpu snapshots + interaction).
egui_kittest = { version = "0.37", features = ["wgpu"] }
pollster = "1"
# v4l2loopback output (Linux only). Fallback candidate if this proves
# awkward for output queues: edgefirst-v4l2.
v4l2r = "0.0.8"
# Serialization / data for replay datasets.
serde = { version = "1", features = ["derive"] }
image = "0.25"
toml = "1"
# CLI / config: clap with env support, bridged to config files (TOML) via
# clap_config (see sink/src/config.rs for the layering).
clap = { version = "4", features = ["derive", "env"] }
clap_config = "0.1.3"
# Errors / logging (Brush uses tracing + log).
anyhow = "1"
thiserror = "2"
tracing = "0.1"
tracing-subscriber = "0.3"
log = "0.4"
env_logger = "0.11"
# Async plumbing (kinect-one's API is tokio-based).
tokio = { version = "1", features = ["macros", "rt", "rt-multi-thread", "sync", "time"] }