When NAS sync is enabled:
- Audio uploads: pushed to NAS via NasSyncVideoJob, local file deleted immediately after
- Video uploads: processed locally (ffprobe, compress, HLS), then at the end of
GenerateHlsJob the final compressed file is re-synced to NAS and the local copy removed
- stream() and download(): if local file is missing, pull from NAS into a local
stream cache (storage/app/nas_cache/videos/) and serve from there with full
byte-range support — so seeking still works over NAS-sourced files
When NAS is disabled:
- Upload, stream, and download all use local storage exclusively (no change)
HLS segments are intentionally kept local: they are small, generated on-demand,
and serving them via per-segment SMB round-trips would hurt playback performance.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>