Skip to main content
Documentation

Working with Large Files

Dits is designed for large files. Learn best practices for video, images, 3D models, and other binary assets to maximize storage efficiency and performance.

File Types

Video
.mov, .mp4, .avi, .mxf, .r3d
  • GOP-aligned chunking
  • Frame-level dedup
  • Streaming playback
Images
.psd, .tiff, .raw, .exr, .dpx
  • Layer-aware chunking
  • Proxy generation
  • Metadata preservation
3D/Game
.fbx, .uasset, .blend, .unity
  • Binary-aware chunking
  • Mesh deduplication
  • Texture reuse

Chunking Configuration

Dits automatically selects optimal chunk sizes, but you can tune for your specific content:

# dits.toml - per-repository settings

[chunking]
# Default settings for most files
algorithm = "fastcdc"
min_size = "16KB"
avg_size = "64KB"
max_size = "256KB"

# Override for specific file types
[chunking.video]
patterns = ["*.mov", "*.mp4", "*.mxf"]
min_size = "256KB"
avg_size = "1MB"
max_size = "4MB"

[chunking.images]
patterns = ["*.psd", "*.tiff", "*.exr"]
min_size = "64KB"
avg_size = "256KB"
max_size = "1MB"

Workflow: Video Production

# Initial setup
$ dits init
$ dits add footage/*.mov
$ dits commit -m "Add raw footage"

# Dits shows efficient storage
$ dits status
Repository size: 45.2 GB
Unique chunks: 234,567
Deduplication ratio: 23.4%

# Generate proxies for editing
$ dits proxy create footage/*.mov --profile preview
Creating proxies...
  footage/scene01.mov -> proxies/scene01_preview.mov (1080p, H.264)
  footage/scene02.mov -> proxies/scene02_preview.mov
Done. Saved 42.1 GB in proxy storage.

# Commit proxies
$ dits add proxies/
$ dits commit -m "Add preview proxies"

# Team member clones (fast!)
$ dits clone --filter blob:none https://server/project
# Only metadata downloaded - instant

# Mount for instant access
$ dits mount /mnt/project
# All files appear, stream on demand

Workflow: Game Development

# Track only source assets, ignore builds
$ cat .ditsignore
Build/
Library/
Temp/
*.exe

# Add source assets
$ dits add Assets/
$ dits commit -m "Add game assets"

# Check texture reuse
$ dits dedup-stats Assets/Textures/
Analyzed 456 textures:
  Total size: 12.3 GB
  Unique data: 8.7 GB (29.3% savings)
  Shared chunks: 1,234
  Identical files: 12

# Find duplicate textures
$ dits find-duplicates Assets/
Exact duplicates:
  grass_01.png = grass_old.png (23 MB)
  rock_normal.png = stone_normal.png (45 MB)

Similar textures (>90% match):
  wood_01.png ~ wood_02.png (87% similar)

Sparse Checkout

Work with just the files you need:

# Clone metadata only
$ dits clone --filter blob:none https://server/huge-project
Cloning into 'huge-project'...
Receiving metadata... done.
Repository size: 2.3 TB (available on demand)

# Enable sparse checkout
$ cd huge-project
$ dits sparse-checkout init --cone

# Choose what to download
$ dits sparse-checkout set \
    scripts/ \
    assets/textures/characters/ \
    assets/models/characters/

# Check what's downloaded
$ dits sparse-checkout list
scripts/
assets/textures/characters/
assets/models/characters/

# Rest of files are placeholders
$ ls assets/environments/
# Shows files but they're not downloaded yet

# Access downloads on demand
$ cat assets/environments/level1/readme.txt
# File content streams automatically

VFS Mount

The most seamless way to work with large repos:

# Mount repository as virtual drive
$ dits mount /mnt/project

# Files appear instantly
$ ls /mnt/project
assets/  footage/  project.prproj  README.md

# Open in your NLE - files stream on demand
$ open /mnt/project/project.prproj

# Check what's cached locally
$ dits cache-stats
Cache: 12.5 GB / 50 GB
Hot files: project.prproj, footage/scene01.mov
Hit rate: 94.2%

# Prefetch for offline work
$ dits prefetch footage/scene01.mov footage/scene02.mov
Prefetching 2 files (4.5 GB)...
Done.

Storage Optimization

Local Storage
# Clean up unused chunks
dits gc

# Aggressive cleanup
dits gc --aggressive

# Show what would be removed
dits gc --dry-run
Remote Storage
# Move cold data to archive tier
dits storage tier \
  --path footage/2022/ \
  --tier archive

# Check storage distribution
dits storage stats

Best Practices

Do's

  • Use proxies for daily editing, full-res for final delivery
  • Organize assets by project/version for better chunking
  • Use sparse checkout for partial access to huge repos
  • Mount with VFS for streaming access
  • Run dits gc periodically to clean up

Don'ts

  • Don't store generated/rendered files (add to .ditsignore)
  • Don't commit the same file with different names
  • Don't recompress videos before committing
  • Don't forget to push proxies for team access

Related Topics