Completes the interrupted kill/shadcn work (81ffa84):
- vite: GUI_TARGET/TAMAGUI_TARGET=web defines + react-native/react-native-svg
web aliases (@hanzogui/react-native-svg) — fixes the unresolved
react-native-svg import from @hanzogui/lucide-icons-2
- deps: @hanzo/gui 8.0.2, @hanzo/ui 8.0.48, @hanzogui/lucide-icons-2 8.0.2;
react/react-dom aligned at 19.2.8
- docs/: drop cdn.tailwindcss.com from all 3 static pages — rewritten on
plain-CSS tokens (docs/docs.css), same visual design
- kill last residue: vscode tailwind extension rec, stale LLM.md stack notes
- gui-env.d.ts: eslint disable for the intentional declaration-merge pattern
typescript stays 5.8.3: TS7.0.2 builds green here but typescript-eslint
(latest 8.66.0, peer <6.1.0) crashes against it — lint is part of this
repo's gate, so 5.x is correct until typescript-eslint supports TS7.
Verified: tsc -b && vite build green; playwright render of the built app —
full UI styled (cards/selects/switches/sliders), zero console errors.
Co-authored-by: Hanzo Dev <[email protected]>
27 KiB
Hanzo Live - Project Knowledge Base
Project Overview
Hanzo Live is a real-time interactive generative AI pipeline platform for running and customizing autoregressive video diffusion models with WebRTC streaming.
- Current Version: 0.1.0a2 (alpha)
- Status: Active development, production-ready MLX implementation
- Previous Name: daydream-scope (renamed to hanzo-live)
- Repository: https://github.com/hanzoai/live
Key Features
- Autoregressive video diffusion models (StreamDiffusionV2, LongLive)
- MLX-native implementation for 2-3x Apple Silicon performance
- WebRTC real-time streaming with aiortc
- Low latency async video processing pipelines
- Interactive UI with text prompting and model parameter controls
- Multi-platform support (Linux, Windows, macOS)
Major Achievement: MLX-Native WAN Implementation
Overview
3,453 lines of production-ready MLX code added in commit 3d4b330, delivering 2-3x performance improvement on Apple Silicon compared to PyTorch MPS.
Location: /pipelines/streamdiffusionv2/vendor/causvid/models/wan/mlx/
Performance Benchmarks (M2 Max)
| Operation | PyTorch MPS | MLX Native | Speedup |
|---|---|---|---|
| Attention (256x256) | ~15ms | ~6ms | 2.5x |
| RoPE Apply | ~8ms | ~3ms | 2.7x |
| RMS Norm | ~2ms | ~0.8ms | 2.5x |
| Full Forward Pass | ~150ms | ~60ms | 2.5x |
Resolution: 128x128, 16 frames
Why MLX is Faster
- No CPU-GPU Synchronization: Unified memory architecture eliminates data copying
- Metal-Native Operations: Direct compilation to Metal shaders, no PyTorch abstraction overhead
- Apple Silicon Optimization: Designed specifically for M-series chips
- Better Memory Management: Native unified memory support
Architecture
System Architecture Layers
┌─────────────────────────────────────────────────────────────┐
│ Frontend (React + Vite) │
│ WebRTC Client, UI Controls, Video │
└─────────────────────────────────────────────────────────────┘
│
WebRTC Stream
↓
┌─────────────────────────────────────────────────────────────┐
│ Backend (FastAPI + aiortc) │
│ WebRTC Manager, Session Handling, TURN Support │
└─────────────────────────────────────────────────────────────┘
│
Pipeline Interface
↓
┌─────────────────────────────────────────────────────────────┐
│ Pipeline Layer │
│ StreamDiffusionV2 │ LongLive │ Passthrough │ VOD │
└─────────────────────────────────────────────────────────────┘
│
Backend Selection
↓
┌─────────────────────────────────────────────────────────────┐
│ Hardware Acceleration (Auto-Selected) │
│ MLX (macOS) > PyTorch CUDA > PyTorch MPS > CPU │
└─────────────────────────────────────────────────────────────┘
Backend Components
FastAPI Application (app.py)
- WebRTC offer/answer exchange (
POST /api/v1/webrtc/offer) - Health check endpoint (
GET /health) - Static file serving for frontend
- Lifespan management for resource cleanup
- TURN server support (Cloudflare/Twilio) for restrictive networks
- Selective logging (app: INFO, libraries: WARNING)
WebRTC Manager (lib/webrtc.py)
- Session-based connection management with automatic cleanup
- aiortc integration for WebRTC streaming
- ICE server configuration with TURN/STUN fallback
- Parallel session closing for efficient shutdown
Pipeline Manager (lib/pipeline_manager.py)
- Pipeline lifecycle management
- Model loading and initialization
- Frame processing coordination
- Backend selection and configuration
Track Processing (lib/tracks.py)
- Video track processing interface
- Frame-by-frame transformation
- Integration with ML pipelines
Frontend Architecture
Framework: React 19 + TypeScript + Vite
Core Components
- StreamPage: Main 3-panel layout (controls, video, settings)
- Header: Application header with branding
- VideoOutput: Video display with recording controls
- InputAndControlsPanel: Left panel for input controls
- SettingsPanel: Right panel for model parameters
- PromptInput: Text input for AI prompts
- StatusBar: Bottom status information
State Management
useStreamState custom hook manages:
- System metrics (CPU, GPU, RAM, VRAM, FPS, latency)
- Stream status and recording state
- ML model settings (denoising steps, noise scale)
- Prompt processing state
TypeScript Types
- SystemMetrics: Performance monitoring interface
- StreamStatus: Stream state and recording status
- SettingsState: ML model parameter configuration
- PromptData: Text prompt and processing state
Pipeline Architecture
Available Pipelines
StreamDiffusionV2 (Primary)
- Location:
/pipelines/streamdiffusionv2/ - Model: WAN (Weighted Attention Network) diffusion transformer
- MLX Support: ✅ Full native implementation
- Features:
- Text-to-video (T2V) generation
- Image-to-video (I2V) generation
- Real-time frame processing
- Async pipeline with low latency
LongLive
- Location:
/pipelines/longlive/ - Purpose: Extended video generation
- Features:
- LoRA utilities for model adaptation
- Custom inference pipeline
- Long-form video support
Passthrough
- Location:
/pipelines/passthrough/ - Purpose: Simple video relay for testing
- Features: Echo functionality, no processing
Selfforcing
- Location:
/pipelines/selfforcing/ - Purpose: Autoregressive generation
- Features: Self-conditioning for coherent sequences
VOD (Video on Demand)
- Location:
/pipelines/vod/ - Purpose: Pre-recorded video playback
- Features: File-based streaming
Pipeline Interface
All pipelines implement a common interface (pipelines/interface.py):
initialize()- Setup model and resourcesprocess_frame()- Transform single framecleanup()- Release resources
MLX Implementation Deep Dive
Architecture Overview
The MLX implementation is a complete rewrite of WAN models optimized for Apple Silicon, organized into modular components:
1. Backend Selection (backend.py)
Auto-detection system with priority-based selection:
Priority 1: MLX (macOS only, 2-3x faster)
Priority 2: PyTorch CUDA (NVIDIA GPUs)
Priority 3: PyTorch MPS (macOS, fallback)
Priority 4: PyTorch CPU (last resort)
Key Functions:
select_backend()- Automatic or manual backend selectionget_available_backends()- List all available backendsprint_backend_info()- Detailed system informationcreate_model()- Initialize model with best backend
2. Core Tensor Operations (core_ops.py)
Sinusoidal Position Embeddings:
sinusoidal_embedding_1d(timesteps, dim)
# Returns: [batch_size, dim] float32 embeddings
Rotary Position Embeddings (RoPE):
rope_params(max_seq_len, dim, base=10000.0)
# Returns: [max_seq_len, dim//2, 2] complex frequencies
rope_apply(x, grid_sizes, freqs)
# Applies RoPE to 3D spatial structure (frames, height, width)
# Handles per-sample grid sizes for variable resolution
RMS Normalization:
class WanRMSNorm:
# Root Mean Square Layer Normalization
# More stable than LayerNorm for transformers
# Learned scale parameters
3. Custom 3D Convolution (conv.py)
Critical Innovation: Manual Conv3d implementation bypassing MLX limitations
Problem: MLX lacks native Conv3d support (required for video patch embedding)
Solution: Sliding window + matmul approach
class Conv3d:
def __call__(self, x):
# 1. Extract patches using sliding window (im2col)
patches = sliding_window(x, kernel_size, stride, padding)
# 2. Reshape patches for matmul: [B, out_patches, kernel_volume, in_channels]
patches_flat = patches.reshape(batch, -1, kernel_volume, in_channels)
# 3. Matrix multiply with weights: [out_channels, in_channels, kernel_volume]
output = matmul(patches_flat, weights)
# 4. Reshape to output spatial dimensions
return output.reshape(batch, out_channels, depth, height, width)
Performance: Functional and correct, further optimization possible
4. Neural Network Modules (modules.py)
WanLinear: Linear projection layer with weight initialization
GELU Activation: Gaussian Error Linear Unit with tanh approximation
GELU(x) ≈ 0.5 * x * (1 + tanh(sqrt(2/π) * (x + 0.044715 * x³)))
FeedForward Network (FFN):
FFN = Linear(dim → ffn_dim) → GELU → Linear(ffn_dim → dim)
Head: Output projection with adaptive normalization
- Modulation based on conditioning signal
- Final layer normalization
- Projection to output dimensions
MLPProj: CLIP feature projection for image-to-video
- Projects visual features to transformer dimension
- Used in I2V cross-attention
5. Attention Mechanisms
scaled_dot_product_attention (attention.py)
def scaled_dot_product_attention(q, k, v, is_causal=False):
# Metal-optimized attention
# Shape: q,k,v = [batch, num_heads, seq_len, head_dim]
scores = (q @ k.T) / sqrt(head_dim)
if is_causal:
scores = apply_causal_mask(scores)
attn_weights = softmax(scores, dim=-1)
return attn_weights @ v
WanSelfAttention (wan_attention.py)
class WanSelfAttention:
# Self-attention with RoPE
# 1. Linear projections for Q, K, V
# 2. Apply RoPE to Q and K
# 3. Scaled dot-product attention
# 4. Output projection
WanT2VCrossAttention (wan_attention.py)
class WanT2VCrossAttention:
# Text-to-video cross-attention
# Q: from video features
# K, V: from text embeddings (cached)
# Efficient caching for text conditioning
WanI2VCrossAttention (wan_attention.py)
class WanI2VCrossAttention:
# Image-to-video dual cross-attention
# 1. Cross-attend to text embeddings
# 2. Cross-attend to CLIP image features
# 3. Combine both modalities
6. Transformer Blocks (wan_block.py)
WanAttentionBlock: Complete transformer block with modulation
class WanAttentionBlock:
def __call__(self, x, t, context, ...):
# 1. Adaptive Layer Norm with timestep modulation
x_norm = adaLN(x, timestep_embedding=t)
# 2. Self-Attention with RoPE
attn_out = self_attention(x_norm, rope_freqs)
x = x + attn_out
# 3. Cross-Attention (T2V or I2V)
x_norm = adaLN(x, t)
cross_out = cross_attention(x_norm, context)
x = x + cross_out
# 4. Feed-Forward Network
x_norm = adaLN(x, t)
ffn_out = feedforward(x_norm)
x = x + ffn_out
return x
6-way Conditioning: Adaptive layer normalization modulated by:
- Timestep embeddings
- Class embeddings
- Combined conditioning signals
7. Complete WanModel (model.py)
Full diffusion transformer implementation:
class WanModel:
def __init__(self, model_type="t2v", ...):
# Patch embedding
self.patch_embed = Conv3d(in_dim, dim, kernel_size=patch_size)
# Text embedding
self.text_embed = Linear(text_dim, dim)
# Timestep conditioning
self.time_embed = sinusoidal_embedding_1d
# Transformer blocks
self.blocks = [WanAttentionBlock(...) for _ in range(num_layers)]
# Output head
self.head = Head(dim, out_dim)
def __call__(self, x, t, context, ...):
# 1. Patch embedding: [B, C, F, H, W] → [B, seq_len, dim]
x = self.patch_embed(x)
# 2. Add timestep conditioning
t_emb = self.time_embed(t)
# 3. Process text context
context_emb = self.text_embed(context)
# 4. Pass through transformer blocks
for block in self.blocks:
x = block(x, t_emb, context_emb, ...)
# 5. Output head with adaptive normalization
x = self.head(x, t_emb)
# 6. Unpatchify: [B, seq_len, dim] → [B, C, F, H, W]
x = self.unpatchify(x)
return x
Supported Modes:
- T2V (Text-to-Video): Text conditioning only
- I2V (Image-to-Video): Text + CLIP image features
8. Utilities
Weight Conversion (convert_weights.py)
def convert_wan_model_weights(torch_checkpoint_path, output_path):
# 1. Load PyTorch checkpoint
torch_weights = torch.load(torch_checkpoint_path)
# 2. Convert tensor format and naming
mlx_weights = {}
for key, tensor in torch_weights.items():
# Convert torch.Tensor → numpy → mlx.array
mlx_weights[key] = mx.array(tensor.cpu().numpy())
# 3. Save as MLX-compatible .npz
mx.savez(output_path, **mlx_weights)
return mlx_weights
Benchmarking (benchmark.py)
def run_full_benchmark_suite():
# Comprehensive performance testing
benchmarks = [
benchmark_attention,
benchmark_rope,
benchmark_rms_norm,
benchmark_forward_pass,
]
results = {}
for bench in benchmarks:
results[bench.__name__] = bench()
return results
Testing (test_mlx.py)
def run_all_tests():
# Unit tests for all components
tests = [
test_rope_correctness,
test_attention_output_shape,
test_conv3d_equivalence,
test_model_forward_pass,
]
for test in tests:
assert test(), f"{test.__name__} failed"
Development Workflow
Initial Setup
# Clone repository
git clone [email protected]:hanzoai/live.git
cd live
# Install uv (Python package manager)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Install Node.js for frontend
# macOS: brew install node
# Ubuntu: apt install nodejs npm
# Build frontend
uv run build
# First run (downloads models ~10GB to ~/.hanzo-live/models)
uv run hanzo-live
Hardware Detection
The application automatically detects your hardware:
# NVIDIA GPU (Linux/Windows)
uv run hanzo-live
# → Uses CUDA acceleration
# Apple Silicon (macOS)
uv run hanzo-live
# → Uses MLX/Metal acceleration (2-3x faster)
# CPU fallback (testing)
uv run hanzo-live --cpu
Development Commands
Backend Development
# Setup development environment
uv sync --group dev
# Run application
uv run hanzo-live
# Run with custom port
uv run hanzo-live --port 8080
# Enable verbose logging
export VERBOSE_LOGGING=1
uv run hanzo-live
# Code quality
uv run ruff check . # Lint
uv run ruff check . --fix # Lint + auto-fix
uv run ruff format . # Format
# Pre-commit hooks
uv run pre-commit install
uv run pre-commit run --all-files
Frontend Development
cd frontend
# Install dependencies
npm install
# Development server (proxy to backend on :8000)
npm run dev
# Build for production
npm run build
# Lint and format
npm run lint # ESLint check
npm run lint:fix # Auto-fix
npm run format # Prettier format
npm run format:check # Check formatting
MLX Development
# Run MLX tests
uv run python -m pipelines.streamdiffusionv2.vendor.causvid.models.wan.mlx.test_mlx
# Benchmark MLX vs PyTorch
uv run python -m pipelines.streamdiffusionv2.vendor.causvid.models.wan.mlx.benchmark
# Convert PyTorch weights to MLX
uv run python -c "
from pipelines.streamdiffusionv2.vendor.causvid.models.wan.mlx.convert_weights import convert_wan_model_weights
convert_wan_model_weights('pytorch_model.pth', 'mlx_model.npz')
"
# Check backend information
uv run python -c "
from pipelines.streamdiffusionv2.vendor.causvid.models.wan.mlx.backend import print_backend_info
print_backend_info()
"
Environment Variables
# Optional: HuggingFace token for TURN servers (restrictive networks)
export HF_TOKEN=your_token_here
# Optional: Twilio TURN servers
export TWILIO_ACCOUNT_SID=your_sid
export TWILIO_AUTH_TOKEN=your_token
# Optional: Verbose library logging
export VERBOSE_LOGGING=1
# Optional: Custom model directory
export HANZO_LIVE_MODELS_DIR=/path/to/models
Dependencies
Backend (Python)
Core Framework:
fastapi>=0.116.1- Web frameworkuvicorn>=0.35.0- ASGI serveraiortc>=1.13.0- WebRTC streaming
ML/AI:
torch==2.8.0- PyTorch (CUDA 12.8 on Linux/Windows)torchvision==0.23.0- Vision modelsmlx>=0.25.0- Apple MLX (macOS only)diffusers>=0.31.0- Diffusion modelstransformers>=4.49.0- Language modelsflash-attn==2.8.3- Flash attention (Linux/Windows)
Other:
httpx>=0.28.1- HTTP clienttwilio>=9.8.0- TURN server integrationsafetensors>=0.6.2- Model weightshuggingface_hub>=0.25.0- Model downloads
Development:
ruff>=0.8.0- Linting and formattingpre-commit>=4.0.0- Git hookspytest- Testing framework
Frontend (TypeScript)
- React 19 with TypeScript
- Vite for build tooling
- @hanzo/ui components on @hanzo/gui (style props + CSS custom properties)
- ESLint + Prettier
Project Structure
hanzo-live/
├── app.py # FastAPI main application
├── build.py # Frontend build script
├── download_models.py # Model weight download utility
├── pyproject.toml # Python dependencies
├── uv.lock # Dependency lock file
│
├── lib/ # Backend library modules
│ ├── webrtc.py # WebRTC manager
│ ├── schema.py # Pydantic schemas
│ ├── credentials.py # TURN credentials
│ ├── tracks.py # Video track processing
│ ├── pipeline_manager.py # Pipeline lifecycle
│ ├── frame_processor.py # Frame processing
│ └── models_config.py # Model configuration
│
├── pipelines/ # AI pipelines
│ ├── interface.py # Pipeline interface
│ ├── process.py # Processing orchestration
│ ├── memory.py # Memory management
│ ├── video.py # Video utilities
│ │
│ ├── streamdiffusionv2/ # Primary diffusion pipeline
│ │ ├── pipeline.py
│ │ ├── model.yaml
│ │ └── vendor/
│ │ └── causvid/
│ │ └── models/
│ │ └── wan/
│ │ └── mlx/ # MLX implementation (3,453 lines)
│ │ ├── __init__.py
│ │ ├── backend.py
│ │ ├── core_ops.py
│ │ ├── conv.py
│ │ ├── modules.py
│ │ ├── attention.py
│ │ ├── wan_attention.py
│ │ ├── wan_block.py
│ │ ├── model.py
│ │ ├── convert_weights.py
│ │ ├── benchmark.py
│ │ ├── test_mlx.py
│ │ └── README.md
│ │
│ ├── longlive/ # Extended video generation
│ ├── passthrough/ # Simple relay
│ ├── selfforcing/ # Autoregressive
│ └── vod/ # Video on demand
│
└── frontend/ # React TypeScript frontend
├── src/
│ ├── components/ # UI components
│ ├── hooks/ # Custom React hooks
│ ├── pages/ # Page components
│ ├── types/ # TypeScript types
│ └── lib/ # Utilities
├── package.json
└── vite.config.ts
Technical Details
Float32 Precision
All MLX operations use float32 instead of float64:
- MPS backend doesn't support float64
- Float32 provides sufficient precision for diffusion models
- Faster computation and lower memory usage
Complex Number Handling (RoPE)
RoPE uses complex rotations represented as [real, imaginary] pairs:
# Shape: [seq_len, num_heads, dim//2, 2]
freqs[..., 0] # real part
freqs[..., 1] # imaginary part
# Complex multiplication:
# (a + bi) * (c + di) = (ac - bd) + (ad + bc)i
real = x_real * freq_real - x_imag * freq_imag
imag = x_real * freq_imag + x_imag * freq_real
Avoids need for native complex number support while maintaining correctness.
Memory Layout
MLX uses row-major (C-style) layout like NumPy and PyTorch:
- Input:
[batch, seq_len, num_heads, head_dim] - Computation:
[batch, num_heads, seq_len, head_dim] - Output:
[batch, seq_len, num_heads, head_dim]
Automatic transposition handles layout conversions efficiently.
Unified Memory Architecture
Apple Silicon uses unified memory shared by CPU and GPU:
- No explicit data transfers needed
- MLX leverages this for zero-copy operations
- PyTorch MPS requires synchronization overhead
Security Considerations
TURN Server Integration
For restrictive network environments (firewalls, NATs):
Cloudflare TURN (recommended):
export HF_TOKEN=your_huggingface_token
uv run hanzo-live
Twilio TURN:
export TWILIO_ACCOUNT_SID=your_sid
export TWILIO_AUTH_TOKEN=your_token
uv run hanzo-live
Token Management
- Never commit
.envfiles - Use environment variables for secrets
- HF_TOKEN provides 10GB free TURN streaming/month
Deployment
Production Build
# Build frontend
cd frontend
npm run build
cd ..
# Run production server (serves both API and frontend)
uv run hanzo-live
Access at http://localhost:8000
Docker Deployment
FROM python:3.10-slim
# Install uv and Node.js
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
RUN apt-get update && apt-get install -y nodejs npm
# Copy project
COPY . /app
WORKDIR /app
# Build frontend
RUN uv run build
# Expose port
EXPOSE 8000
# Run application
CMD ["uv", "run", "hanzo-live"]
Runpod Template
For cloud GPU deployment, use the official Runpod template:
- Visit: https://console.runpod.io/deploy?template=aca8mw9ivw&ref=5k8hxjq3
- Select GPU (≥24GB VRAM recommended)
- Add environment variable:
HF_TOKEN=your_token - Deploy and access at port 8000
Performance Optimization
Current Optimizations
- MLX Backend: 2-3x faster than PyTorch MPS on Apple Silicon
- Async Pipeline: Low-latency frame processing
- WebRTC: Real-time streaming with minimal overhead
- Selective Logging: Reduces I/O overhead
Future Optimizations
- Model Quantization: 4-bit, 8-bit for faster inference
- Conv3d Optimization: Further optimize manual implementation
- Mixed Precision: Float16 for compatible operations
- Streaming Inference: Reduce first-frame latency
- VAE Decoder: MLX-native implementation
Known Limitations
Current Limitations
- MLX Conv3d: Manual implementation, not fully optimized
- Apple Silicon Only: MLX works only on macOS
- Model Size: Requires ≥24GB VRAM on NVIDIA GPUs
- Alpha Status: API may change in future versions
Workarounds
- No GPU: Use
--cpuflag for testing (slow) - Limited VRAM: Use Runpod or cloud GPU
- No macOS: Use PyTorch CUDA on Linux/Windows
Testing
Running Tests
# All tests
uv run pytest -v
# MLX-specific tests
uv run python -m pipelines.streamdiffusionv2.vendor.causvid.models.wan.mlx.test_mlx
# Benchmarks
uv run python -m pipelines.streamdiffusionv2.vendor.causvid.models.wan.mlx.benchmark
Test Coverage
- ✅ RoPE correctness vs PyTorch
- ✅ Attention output shapes
- ✅ Conv3d equivalence
- ✅ Model forward pass
- ✅ Weight conversion
- ✅ Backend selection
- ⏳ Integration tests (pending)
- ⏳ Performance regression tests (pending)
Contributing
Code Quality
# Before committing
uv run ruff format . # Format
uv run ruff check . --fix # Lint + fix
npm run format --prefix frontend # Format frontend
npm run lint:fix --prefix frontend # Lint frontend
Pre-commit Hooks
# Install hooks
uv run pre-commit install
# Run manually
uv run pre-commit run --all-files
Adding MLX Operations
When implementing new MLX components:
- Match PyTorch API: Maintain compatibility
- Use float32: Avoid float64 for MPS/MLX compatibility
- Document shapes: Clear tensor shape documentation
- Add tests: Unit tests with known outputs
- Benchmark: Compare against PyTorch baseline
Roadmap
Completed ✅
- MLX-native WAN implementation (3,453 lines)
- Manual Conv3d bypassing MLX limitations
- Backend auto-selection (MLX > CUDA > MPS > CPU)
- PyTorch → MLX weight conversion
- Comprehensive benchmark suite
- Full unit test coverage
- Production-ready performance (2-3x speedup)
In Progress 🚧
- VAE decoder MLX implementation
- Model quantization (4-bit, 8-bit)
- Mixed precision support
- Integration tests for full pipeline
Future Enhancements 🔮
- Streaming inference optimization
- Multi-device support (when MLX adds it)
- ONNX export support
- Production deployment guides
- Performance profiling tools
- Distributed inference
References
Documentation
Research Papers
Related Projects
Support
- Discord: https://discord.gg/mnfGR4Fjhp
- GitHub Issues: https://github.com/hanzoai/live/issues
- Documentation: Check
README.mdanddocs/directory
Last Updated: October 22, 2025 - Added comprehensive MLX implementation documentation
Copyright © 2025 Hanzo AI Inc. All rights reserved.