feat: Archipelago demo stack (lightweight)

This commit is contained in:
Dorian
2026-03-17 02:14:04 +00:00
commit 6b15143b8a
534 changed files with 75115 additions and 0 deletions

View File

@@ -0,0 +1,226 @@
# Video Optimization Guide - Quality Preservation
## Current Video
- **File**: `public/assets/video/video-intro.mp4`
- **Size**: ~36MB
- **Goal**: Optimize for web without losing quality
## Quick Optimization
Run the optimization script:
```bash
cd neode-ui
./optimize-video.sh
```
This will:
1. Create a backup of the original video
2. Optimize using H.264 with CRF 18 (near-lossless)
3. Add faststart flag for web streaming
4. Replace the original with the optimized version
## Manual Optimization
If you prefer to optimize manually:
### Option 1: Near-Lossless (Recommended)
```bash
cd neode-ui/public/assets/video
# Backup original
cp video-intro.mp4 video-intro-backup.mp4
# Optimize with CRF 18 (near-lossless, best quality)
ffmpeg -i video-intro.mp4 \
-c:v libx264 \
-preset slow \
-crf 18 \
-profile:v high \
-level 4.0 \
-pix_fmt yuv420p \
-c:a aac \
-b:a 128k \
-ar 48000 \
-movflags +faststart \
-threads 0 \
video-intro-optimized.mp4
# Replace original
mv video-intro-optimized.mp4 video-intro.mp4
```
**Expected result**: 15-25MB (40-60% reduction) with visually identical quality
### Option 2: Lossless (Maximum Quality)
```bash
ffmpeg -i video-intro.mp4 \
-c:v libx264 \
-preset veryslow \
-crf 15 \
-profile:v high \
-level 4.0 \
-pix_fmt yuv420p \
-c:a aac \
-b:a 192k \
-ar 48000 \
-movflags +faststart \
video-intro-lossless.mp4
```
**Expected result**: 20-30MB (20-40% reduction) with imperceptible quality loss
### Option 3: H.265/HEVC (Better Compression, Modern Browsers)
```bash
ffmpeg -i video-intro.mp4 \
-c:v libx265 \
-preset slow \
-crf 20 \
-pix_fmt yuv420p \
-c:a aac \
-b:a 128k \
-movflags +faststart \
video-intro-hevc.mp4
```
**Note**: H.265 provides better compression but has limited browser support (Safari, Edge, Chrome on Android). Use H.264 for maximum compatibility.
## Parameter Explanation
### CRF (Constant Rate Factor)
- **CRF 15**: Visually lossless (largest file)
- **CRF 18**: Near-lossless (recommended, good balance)
- **CRF 20**: High quality (smaller file, still excellent)
- **CRF 23**: Good quality (noticeable but acceptable)
- **Lower = Better Quality, Larger File**
### Preset
- **veryslow**: Best compression, slowest encoding
- **slow**: Best balance (recommended)
- **medium**: Faster encoding, larger file
- **fast**: Quick encoding, largest file
### Faststart Flag
- `-movflags +faststart`: Moves metadata to beginning of file
- Enables progressive download (video starts playing before fully downloaded)
- **Essential for web video**
### Profile & Level
- `-profile:v high`: Enables advanced H.264 features
- `-level 4.0`: Maximum compatibility with modern devices
- Ensures video plays on all browsers/devices
## Quality Comparison
| CRF | Quality | File Size | Use Case |
|-----|---------|-----------|----------|
| 15 | Lossless | ~30MB | Maximum quality needed |
| 18 | Near-lossless | ~20MB | **Recommended** - Best balance |
| 20 | High | ~15MB | Good quality, smaller file |
| 23 | Good | ~10MB | Acceptable quality |
## Expected Results
With CRF 18 (recommended):
- **Original**: 36MB
- **Optimized**: ~18-22MB (40-50% reduction)
- **Quality**: Visually identical to original
- **Loading**: 2-3x faster on slower connections
## Testing
After optimization:
1. **Visual comparison**: Compare original and optimized side-by-side
2. **File size**: Check reduction percentage
3. **Loading speed**: Test on slow connection (Chrome DevTools → Network → Throttling)
4. **Playback**: Verify smooth playback and looping
## Browser Compatibility
- **H.264 (MP4)**: Works in all modern browsers ✅
- **H.265 (HEVC)**: Safari, Edge, Chrome Android ✅ (Chrome Desktop ❌)
- **VP9 (WebM)**: Chrome, Firefox, Edge ✅ (Safari ❌)
**Recommendation**: Use H.264 for maximum compatibility.
## Advanced: Two-Pass Encoding
For even better quality at same file size:
```bash
# First pass
ffmpeg -i video-intro.mp4 \
-c:v libx264 \
-preset slow \
-crf 18 \
-profile:v high \
-level 4.0 \
-pix_fmt yuv420p \
-pass 1 \
-an \
-f null \
/dev/null
# Second pass
ffmpeg -i video-intro.mp4 \
-c:v libx264 \
-preset slow \
-crf 18 \
-profile:v high \
-level 4.0 \
-pix_fmt yuv420p \
-c:a aac \
-b:a 128k \
-ar 48000 \
-movflags +faststart \
-pass 2 \
video-intro-optimized.mp4
```
## Troubleshooting
### "FFmpeg not found"
```bash
# macOS
brew install ffmpeg
# Linux
sudo apt install ffmpeg
# Windows
# Download from https://ffmpeg.org/download.html
```
### "Permission denied"
```bash
chmod +x optimize-video.sh
```
### Video looks pixelated
- Use lower CRF (15-18 instead of 20+)
- Use slower preset (slow instead of medium)
### File size still too large
- Use CRF 20-23 (slight quality trade-off)
- Reduce resolution if video is 4K (scale to 1920x1080)
- Reduce frame rate if 60fps (reduce to 30fps)
## After Optimization
1. **Update cache-busting version** in code:
- `SplashScreen.vue`: Change `?v=3` to `?v=4`
- `OnboardingWrapper.vue`: Change `?v=3` to `?v=4`
2. **Test the video**:
- Check playback smoothness
- Verify looping works
- Test on mobile devices
3. **Update documentation**:
- Update `VIDEO_COMPRESSION_GUIDE.md` with new file size