[READ-ONLY] Mirror of https://github.com/mrgnw/spatial-maker.
0

Configure Feed

Select the types of activity you want to include in your feed.

v0.1.1: Default to Small model, update README with model comparison

+387 -55
+11
CLAUDE.md
··· 1 + # Code 2 + 3 + - Code should be easy to read and understand. Not with comments, but with the coding logic itself. 4 + - Create modular code for easy readability and maintainability, but do not overabstract. If we're just doing something once or twice, just do things the direct way. 5 + - Examples should be easy to copy and paste. 6 + - Dummy variables: Do not _ever_ use fake placeholders like /path/to/your/file or foo.txt. Create a variable with a name and reference that variable in the script or code, so I can then 7 + - style: use tabs, not spaces 8 + - Do not add comments or write extra documentation unless I tell you to. 9 + 10 + # Explanations 11 + Only explain things or create summaries when I ask you to. Don't write extra documentation unless I tell you to.
+1 -1
Cargo.lock
··· 2218 2218 2219 2219 [[package]] 2220 2220 name = "spatial-maker" 2221 - version = "0.1.0" 2221 + version = "0.1.1" 2222 2222 dependencies = [ 2223 2223 "clap", 2224 2224 "dirs",
+1 -1
Cargo.toml
··· 1 1 [package] 2 2 name = "spatial-maker" 3 - version = "0.1.0" 3 + version = "0.1.1" 4 4 edition = "2021" 5 5 license = "MIT" 6 6 description = "Convert 2D images and videos to stereoscopic 3D spatial content for Apple Vision Pro using AI depth estimation"
+118 -52
RUST_README.md
··· 1 - # spatial-maker (Rust) 1 + # spatial-maker 2 2 3 3 Convert 2D images and videos to stereoscopic 3D spatial content for Apple Vision Pro using AI depth estimation. 4 4 5 - This is a Rust library that uses **Depth Anything V2** via ONNX Runtime to estimate depth from 2D images and create side-by-side (SBS) stereo pairs for 3D viewing. 5 + [![Crates.io](https://img.shields.io/crates/v/spatial-maker.svg)](https://crates.io/crates/spatial-maker) 6 + [![Documentation](https://docs.rs/spatial-maker/badge.svg)](https://docs.rs/spatial-maker) 6 7 7 8 ## Features 8 9 9 - - ✅ **Fast depth estimation** using ONNX Runtime with CoreML acceleration on Apple Silicon 10 - - ✅ **High quality stereo generation** using Depth-Image Based Rendering (DIBR) 11 - - ✅ **Photo support** — convert single images to SBS stereo 12 - - 🚧 **Video support** — coming soon (per-frame processing with optional temporal smoothing) 13 - - 🚧 **Video Depth Anything integration** — temporally consistent depth for flicker-free video 10 + - **Fast depth estimation** — CoreML on Apple Silicon (128ms/frame on M4 Pro) with ONNX fallback 11 + - **High-quality stereo generation** — Depth-Image Based Rendering (DIBR) with hole filling 12 + - **Photo & video support** — Process single images or full videos with progress callbacks 13 + - **Multi-format input** — JPEG, PNG, AVIF, JPEG XL, HEIC via native decoders or ffmpeg 14 + - **MV-HEVC output** — Side-by-side, top-and-bottom, or separate stereo pairs with optional MV-HEVC packaging 14 15 15 16 ## Quick Start 16 17 17 - ### Download the Model 18 + Add to your `Cargo.toml`: 19 + 20 + ```toml 21 + [dependencies] 22 + spatial-maker = "0.1" 23 + ``` 24 + 25 + ### Process a Photo 18 26 19 - Download the Depth Anything V2 Small ONNX model: 27 + ```rust 28 + use spatial_maker::{process_photo, SpatialConfig, OutputOptions}; 20 29 21 - ```bash 22 - mkdir -p ~/.spatial-maker/checkpoints 23 - curl -L -o ~/.spatial-maker/checkpoints/depth_anything_v2_vits.onnx \ 24 - "https://github.com/fabio-sim/Depth-Anything-ONNX/releases/download/v2.0.0/depth_anything_v2_vits.onnx" 25 - ``` 30 + #[tokio::main] 31 + async fn main() -> Result<(), Box<dyn std::error::Error>> { 32 + let config = SpatialConfig::default(); // Uses Small model (48MB, auto-downloaded) 33 + let output_opts = OutputOptions::default(); // Side-by-side JPEG 26 34 27 - ### Usage (Photo Example) 35 + process_photo( 36 + "input.jpg".as_ref(), 37 + "output_sbs.jpg".as_ref(), 38 + config, 39 + output_opts, 40 + ).await?; 28 41 29 - ```bash 30 - cargo run --example photo --release -- input.jpg -o output_sbs.jpg --max-disparity 30 42 + Ok(()) 43 + } 31 44 ``` 32 45 33 - Or use as a library: 46 + ### Process a Video 34 47 35 48 ```rust 36 - use spatial_maker::process_photo; 37 - use image::open; 49 + use spatial_maker::{process_video, SpatialConfig, VideoProgress}; 38 50 39 - fn main() -> anyhow::Result<()> { 40 - let input = open("photo.jpg")?; 41 - let sbs = process_photo( 42 - input, 43 - "~/.spatial-maker/checkpoints/depth_anything_v2_vits.onnx", 44 - 30.0 // max disparity in pixels 45 - )?; 46 - sbs.save("photo_sbs.jpg")?; 51 + #[tokio::main] 52 + async fn main() -> Result<(), Box<dyn std::error::Error>> { 53 + let config = SpatialConfig::default(); 54 + 55 + process_video( 56 + "input.mp4".as_ref(), 57 + "output_sbs.mp4".as_ref(), 58 + config, 59 + Some(Box::new(|progress: VideoProgress| { 60 + println!("{}: {:.1}%", progress.stage, progress.percent); 61 + })), 62 + ).await?; 63 + 47 64 Ok(()) 48 65 } 49 66 ``` 50 67 68 + ## Model Sizes 69 + 70 + Models are auto-downloaded from [HuggingFace](https://huggingface.co/mrgnw/depth-anything-v2-coreml) on first use: 71 + 72 + | Size | Download | Quality | Speed (M4 Pro) | License | 73 + |------|----------|---------|----------------|---------| 74 + | **Small** (default) | 48 MB | Good | ~85ms/frame | Apache-2.0 ✅ | 75 + | **Base** | 186 MB | Better | ~128ms/frame | CC-BY-NC-4.0 ⚠️ | 76 + | **Large** | 638 MB | Best | ~190ms/frame | CC-BY-NC-4.0 ⚠️ | 77 + 78 + ⚠️ Base and Large models are **non-commercial only** (CC-BY-NC-4.0). Small is Apache-2.0 (commercial OK). 79 + 80 + Select a model: 81 + 82 + ```rust 83 + let config = SpatialConfig { 84 + encoder_size: "b".to_string(), // "s", "b", or "l" 85 + max_disparity: 30, 86 + ..Default::default() 87 + }; 88 + ``` 89 + 90 + ## Feature Flags 91 + 92 + ```toml 93 + [dependencies] 94 + spatial-maker = { version = "0.1", features = ["onnx"] } 95 + ``` 96 + 97 + | Feature | Default | Description | 98 + |---------|---------|-------------| 99 + | `coreml` | ✅ | CoreML via Swift FFI (macOS only, ~3x faster than ONNX CPU) | 100 + | `onnx` | ❌ | ONNX Runtime fallback (cross-platform) | 101 + | `avif` | ❌ | Native AVIF decoder (requires system libdav1d) | 102 + | `jxl` | ❌ | Native JPEG XL decoder (pure Rust via jxl-oxide) | 103 + | `heic` | ❌ | Native HEIC decoder (requires system libheif) | 104 + 105 + Formats not enabled via feature flags fall back to ffmpeg conversion (slower but works for everything). 106 + 51 107 ## How It Works 52 108 53 - 1. **Depth Estimation**: Uses Depth Anything V2 (24.8M params) via ONNX Runtime to estimate per-pixel depth 54 - 2. **Preprocessing**: Resizes image to 518x518, normalizes with ImageNet mean/std 55 - 3. **Stereo Generation**: Uses DIBR to create left/right eye views by shifting pixels based on depth 56 - 4. **Output**: Horizontally stacks left and right views into a side-by-side image 109 + 1. **Depth Estimation**: [Depth Anything V2](https://github.com/DepthAnything/Depth-Anything-V2) via CoreML (default) or ONNX 110 + 2. **Preprocessing**: Resize to 518×518, normalize with ImageNet stats, NCHW tensor format 111 + 3. **Stereo Generation**: DIBR shifts pixels based on depth; expanding-ring hole filling for disocclusions 112 + 4. **Video Pipeline**: `ffmpeg` frame extraction → depth+stereo (parallelized) → `ffmpeg` encoding with model caching 113 + 114 + ## API Overview 57 115 58 - ## Model Info 116 + ```rust 117 + // High-level API (most common) 118 + pub async fn process_photo(input, output, config, output_options) -> SpatialResult<()> 119 + pub async fn process_video(input, output, config, progress_cb) -> SpatialResult<()> 120 + 121 + // Low-level API (custom pipelines) 122 + pub struct CoreMLDepthEstimator; // macOS CoreML backend 123 + pub struct OnnxDepthEstimator; // ONNX Runtime backend 124 + pub fn generate_stereo_pair(image, depth, max_disparity) -> SpatialResult<(DynamicImage, DynamicImage)> 125 + pub fn create_sbs_image(left, right) -> DynamicImage 126 + ``` 59 127 60 - - **Model**: [Depth Anything V2 Small](https://github.com/DepthAnything/Depth-Anything-V2) 61 - - **ONNX Export**: [fabio-sim/Depth-Anything-ONNX](https://github.com/fabio-sim/Depth-Anything-ONNX) 62 - - **License**: Apache-2.0 63 - - **Size**: 95 MB 64 - - **Speed**: ~13ms on RTX 4080, faster on Apple Silicon with CoreML 128 + See [docs.rs/spatial-maker](https://docs.rs/spatial-maker) for full API documentation. 65 129 66 - ## Roadmap 130 + ## Requirements 67 131 68 - - [x] Photo support (SBS output) 69 - - [x] ONNX model integration 70 - - [x] Model checkpoint discovery 71 - - [ ] CoreML execution provider testing 72 - - [ ] Video frame processing 73 - - [ ] Video Depth Anything integration (temporal consistency) 74 - - [ ] Integration with Frame app (replace Python subprocess) 132 + ### For CoreML (default, macOS only): 133 + - macOS 13.0+ (Ventura or later) 134 + - Apple Silicon recommended (falls back to CPU on Intel) 135 + - Xcode Command Line Tools (for Swift compilation during build) 75 136 76 - ## Development 137 + ### For ONNX (optional, cross-platform): 138 + - Any OS (Linux, Windows, macOS) 139 + - Binaries auto-downloaded via `ort` crate 77 140 78 - Built with: 79 - - [ort](https://github.com/pykeio/ort) — ONNX Runtime bindings for Rust 80 - - [image](https://github.com/image-rs/image) — Image encoding/decoding 81 - - [ndarray](https://github.com/rust-ndarray/ndarray) — N-dimensional arrays 141 + ### For Video: 142 + - `ffmpeg` in PATH — [https://ffmpeg.org](https://ffmpeg.org) 143 + - `spatial` CLI for MV-HEVC output — [https://blog.mikeswanson.com/spatial](https://blog.mikeswanson.com/spatial) 82 144 83 - See [research/rust-depth.md](research/rust-depth.md) for detailed design decisions and model comparisons. 145 + ```bash 146 + brew install ffmpeg spatial 147 + ``` 84 148 85 149 ## License 86 150 87 151 MIT 152 + 153 + Models: Small (Apache-2.0), Base/Large (CC-BY-NC-4.0). See [HuggingFace repo](https://huggingface.co/mrgnw/depth-anything-v2-coreml) for details.
+154
scripts/upload_to_huggingface.md
··· 1 + # Upload CoreML Models to HuggingFace 2 + 3 + Follow these steps to upload the converted CoreML models to HuggingFace for easy distribution. 4 + 5 + ## 1. Create HuggingFace Repository 6 + 7 + 1. Go to https://huggingface.co/new 8 + 2. Create a new **model** repository 9 + 3. Name it: `depth-anything-v2-coreml` (or your preferred name) 10 + 4. Make it **public** so users can download without authentication 11 + 5. Add a description: "Depth Anything V2 models in CoreML format for Apple Silicon" 12 + 13 + ## 2. Prepare Models for Upload 14 + 15 + The models are already in `checkpoints/`. We need to compress them: 16 + 17 + ```bash 18 + cd checkpoints 19 + 20 + # Compress Base model 21 + tar -czf DepthAnythingV2BaseF16.mlpackage.tar.gz DepthAnythingV2BaseF16.mlpackage 22 + 23 + # Compress Large model 24 + tar -czf DepthAnythingV2LargeF16.mlpackage.tar.gz DepthAnythingV2LargeF16.mlpackage 25 + 26 + # Check sizes 27 + ls -lh *.tar.gz 28 + ``` 29 + 30 + This compresses the models from ~870 MB to ~430 MB total. 31 + 32 + ## 3. Upload via Web Interface (Easiest) 33 + 34 + 1. Go to your repo: `https://huggingface.co/YOUR_USERNAME/depth-anything-v2-coreml` 35 + 2. Click "Files and versions" → "Add file" → "Upload files" 36 + 3. Upload: 37 + - `DepthAnythingV2BaseF16.mlpackage.tar.gz` 38 + - `DepthAnythingV2LargeF16.mlpackage.tar.gz` 39 + 4. Commit with message: "Add CoreML models (Base and Large)" 40 + 41 + **Note**: We don't upload Small because it's available directly from Apple. 42 + 43 + ## 4. Upload via Git LFS (Alternative) 44 + 45 + If you prefer command-line: 46 + 47 + ```bash 48 + # Install git-lfs if needed 49 + brew install git-lfs 50 + git lfs install 51 + 52 + # Clone your HF repo 53 + git clone https://huggingface.co/YOUR_USERNAME/depth-anything-v2-coreml 54 + cd depth-anything-v2-coreml 55 + 56 + # Track tar.gz files with LFS 57 + git lfs track "*.tar.gz" 58 + git add .gitattributes 59 + 60 + # Copy and commit models 61 + cp ../spatial-maker/checkpoints/*.tar.gz . 62 + git add *.tar.gz 63 + git commit -m "Add CoreML models (Base and Large)" 64 + git push 65 + ``` 66 + 67 + ## 5. Create Model Card (README.md) 68 + 69 + Add this to your HuggingFace repo's README.md: 70 + 71 + ````markdown 72 + --- 73 + license: apache-2.0 74 + tags: 75 + - depth-estimation 76 + - coreml 77 + - apple-silicon 78 + - vision 79 + --- 80 + 81 + # Depth Anything V2 - CoreML 82 + 83 + Depth Anything V2 models converted to CoreML format for optimized inference on Apple Silicon (M-series chips). 84 + 85 + ## Models 86 + 87 + | Model | Size | Parameters | Performance (M4 Pro) | License | 88 + |-------|------|------------|----------------------|---------| 89 + | Small F16 | 48 MB | 24.8M | ~30ms (~33 fps) | Apache-2.0 | 90 + | Base F16 | 186 MB | 97.5M | ~60-90ms (~14 fps) | Apache-2.0 | 91 + | Large F16 | 638 MB | 335.3M | ~200-300ms (~4 fps) | CC-BY-NC-4.0 | 92 + 93 + All models use Float16 precision and run on Apple's Neural Engine + GPU + CPU. 94 + 95 + ## Download 96 + 97 + ```bash 98 + # Download from spatial-maker repo 99 + git clone https://github.com/YOUR_USERNAME/spatial-maker 100 + cd spatial-maker 101 + ./scripts/download_coreml_models.sh 102 + ``` 103 + 104 + Or download directly: 105 + - [Base model](https://huggingface.co/YOUR_USERNAME/depth-anything-v2-coreml/resolve/main/DepthAnythingV2BaseF16.mlpackage.tar.gz) (186 MB) 106 + - [Large model](https://huggingface.co/YOUR_USERNAME/depth-anything-v2-coreml/resolve/main/DepthAnythingV2LargeF16.mlpackage.tar.gz) (638 MB) 107 + 108 + Small model available from [Apple's CoreML model zoo](https://developer.apple.com/machine-learning/models/). 109 + 110 + ## Usage 111 + 112 + ```swift 113 + import CoreML 114 + 115 + let model = try MLModel(contentsOf: URL(fileURLWithPath: "DepthAnythingV2BaseF16.mlpackage")) 116 + // ... inference code 117 + ``` 118 + 119 + ## Citation 120 + 121 + ```bibtex 122 + @article{yang2024depth, 123 + title={Depth Anything V2}, 124 + author={Yang, Lihe and Kang, Bingyi and Huang, Zilong and Zhao, Zhen and Xu, Xiaogang and Feng, Jiashi and Zhao, Hengshuang}, 125 + journal={arXiv:2406.09414}, 126 + year={2024} 127 + } 128 + ``` 129 + 130 + ## Conversion 131 + 132 + These models were converted from PyTorch using `coremltools`. See [conversion script](https://github.com/YOUR_USERNAME/spatial-maker/tree/main/scripts/coreml_conversion). 133 + ```` 134 + 135 + ## 6. Update Download Script 136 + 137 + After uploading, update `scripts/download_coreml_models.sh` with your actual HuggingFace username: 138 + 139 + ```bash 140 + HF_REPO="YOUR_ACTUAL_USERNAME/depth-anything-v2-coreml" 141 + ``` 142 + 143 + ## Verification 144 + 145 + Test the download works: 146 + 147 + ```bash 148 + cd /tmp 149 + git clone https://github.com/YOUR_USERNAME/spatial-maker 150 + cd spatial-maker 151 + ./scripts/download_coreml_models.sh 152 + ``` 153 + 154 + Should download all three models successfully!
+1 -1
src/lib.rs
··· 36 36 impl Default for SpatialConfig { 37 37 fn default() -> Self { 38 38 Self { 39 - encoder_size: "b".to_string(), 39 + encoder_size: "s".to_string(), 40 40 max_disparity: 30, 41 41 target_depth_size: 518, 42 42 }
test_baseline.jpg

This is a binary file and will not be displayed.

test_coreml.jpg

This is a binary file and will not be displayed.

test_coreml_1.jpg

This is a binary file and will not be displayed.

test_coreml_2.jpg

This is a binary file and will not be displayed.

test_coreml_3.jpg

This is a binary file and will not be displayed.

test_coreml_4.jpg

This is a binary file and will not be displayed.

test_coreml_5.jpg

This is a binary file and will not be displayed.

test_output.jpg

This is a binary file and will not be displayed.

test_run1.jpg

This is a binary file and will not be displayed.

test_run2.jpg

This is a binary file and will not be displayed.

test_run3.jpg

This is a binary file and will not be displayed.

test_run4.jpg

This is a binary file and will not be displayed.

test_run5.jpg

This is a binary file and will not be displayed.

+1
todos/_top.md
··· 1 + 1. spatial-settings-overhaul.md
+100
todos/spatial-settings-overhaul.md
··· 1 + # Spatial Settings Panel Overhaul 2 + 3 + Improve spatial settings panel: model downloading, unified start button, eliminate redundant downscaling. 4 + 5 + ## Status: COMPLETE 6 + 7 + All tasks done. `svelte-check` passes with 0 errors. `cargo check` passes. 8 + 9 + ## Decisions Made 10 + 11 + - **Downscale integration:** Two-pass approach. Frame GUI does ffmpeg conversion first (user's resolution/codec/trim settings), then spatial-maker processes the output with `--skip-downscale`. 12 + - **FPS:** Keep 24fps hardcoded for spatial (Vision Pro preference). 13 + - **Model download:** Rust/Tauri command with reqwest streaming + progress events to the UI. 14 + 15 + ## Tasks 16 + 17 + ### 1. Rust: Add reqwest dependency and model check/download Tauri commands 18 + - [x] Add `reqwest` (with `stream` feature) and `futures-util` to Cargo.toml 19 + - [x] Add `ModelDownloadProgressPayload`, `ModelDownloadCompletePayload`, `ModelDownloadErrorPayload` to `spatial/types.rs` 20 + - [x] Add `enabled: bool` field to `SpatialConfig` Rust struct 21 + - [x] Add `check_spatial_models` command (checks `~/.spatial-maker/checkpoints/` for each model) 22 + - [x] Add `download_spatial_model` command (streams from HuggingFace, emits progress events) 23 + - Files changed: 24 + - `frame/src-tauri/Cargo.toml` 25 + - `frame/src-tauri/src/spatial/types.rs` 26 + - `frame/src-tauri/src/spatial/commands.rs` 27 + 28 + ### 2. Rust: Register new commands in lib.rs 29 + - [x] Add `check_spatial_models` and `download_spatial_model` to invoke_handler 30 + - File: `frame/src-tauri/src/lib.rs` 31 + 32 + ### 3. Svelte: Add 'enabled' field to SpatialConfig type + service layer 33 + - [x] Add `enabled: boolean` to `SpatialConfig` interface in `types.ts` (default: `false`) 34 + - [x] Default `skipDownscale` to `true` (no longer user-facing, always skipped) 35 + - [x] Add `checkSpatialModels()` and `downloadSpatialModel()` to spatial service 36 + - [x] Add `setupModelDownloadListeners()` for progress/complete/error events 37 + - Files: 38 + - `frame/src/lib/types.ts` 39 + - `frame/src/lib/services/spatial.ts` 40 + 41 + ### 4. Svelte: Overhaul SpatialTab UI 42 + - [x] Add "Enable spatial encoding" checkbox at the top (prominent) 43 + - [x] Gray out rest of settings when disabled (opacity + pointer-events-none) 44 + - [x] Model selector: show download status per model (check icon / arrow icon / progress %) 45 + - [x] Clicking unavailable model triggers download with inline progress bar 46 + - [x] Fix spacing issues (tighter gaps, consistent sizing) 47 + - [x] Remove "Skip downscale" checkbox (always skipped now) 48 + - [x] Remove old info box about manual installation 49 + - File: `frame/src/lib/components/settings/tabs/SpatialTab.svelte` 50 + 51 + ### 5. Svelte: Remove Spatial button from titlebar 52 + - [x] Remove `onStartSpatial` prop and the Spatial button from all 3 titlebars 53 + - [x] Remove `onStartSpatial` from Titlebar.svelte wrapper 54 + - [x] Remove `IconGlasses` import from titlebars 55 + - [x] Clean up +page.svelte (remove onStartSpatial binding) 56 + - Files: 57 + - `frame/src/lib/components/layout/titlebar/MacosTitlebar.svelte` 58 + - `frame/src/lib/components/layout/titlebar/WindowsTitlebar.svelte` 59 + - `frame/src/lib/components/layout/titlebar/LinuxTitlebar.svelte` 60 + - `frame/src/lib/components/layout/Titlebar.svelte` 61 + - `frame/src/routes/+page.svelte` 62 + 63 + ### 6. Svelte: Wire Start button to chain spatial after conversion 64 + - [x] Add `onConversionCompleted` callback to `ConversionCallbacks` interface 65 + - [x] In `useConversionQueue.svelte.ts` `onCompleted` handler: call callback instead of marking COMPLETED directly 66 + - [x] Add `queueSpatialForFile(id, filePath)` method to spatial queue 67 + - [x] In `+page.svelte`: wire callback to check `spatialQueue.config.enabled` and chain spatial 68 + - Files: 69 + - `frame/src/lib/features/conversion/useConversionQueue.svelte.ts` 70 + - `frame/src/lib/features/spatial/useSpatialQueue.svelte.ts` 71 + - `frame/src/routes/+page.svelte` 72 + 73 + ### 7. Rust: Always pass --skip-downscale when invoked from Frame 74 + - [x] In `spatial/worker.rs`, always add `--skip-downscale` flag 75 + - [x] Removed conditional `if task.config.skip_downscale` check 76 + - [x] Updated progress mapping (depth_stereo 0-85% instead of 10-85%) 77 + - File: `frame/src-tauri/src/spatial/worker.rs` 78 + 79 + ### 8. Build and verify compilation 80 + - [x] `cargo check` passes (1 pre-existing dead_code warning for TaskNotFound) 81 + - [x] `svelte-check` passes with 0 errors, 0 warnings 82 + 83 + ## Architecture Notes 84 + 85 + ### Flow (after changes) 86 + ``` 87 + User clicks Start 88 + -> Frame ffmpeg conversion (resolution, codec, trim, etc.) 89 + -> conversion-completed event (with outputPath) 90 + -> if spatialConfig.enabled: 91 + -> queue_spatial(id, outputPath, spatialConfig) with --skip-downscale 92 + -> spatial-maker: depth+stereo -> audio mux -> MV-HEVC 93 + -> spatial-completed event 94 + -> Mark file as COMPLETED 95 + ``` 96 + 97 + ### Model URLs 98 + - Small (vits, ~99MB): https://huggingface.co/depth-anything/Depth-Anything-V2-Small/resolve/main/depth_anything_v2_vits.pth 99 + - Base (vitb, ~390MB): https://huggingface.co/depth-anything/Depth-Anything-V2-Base/resolve/main/depth_anything_v2_vitb.pth 100 + - Large (vitl, ~1.3GB): https://huggingface.co/depth-anything/Depth-Anything-V2-Large/resolve/main/depth_anything_v2_vitl.pth