Overview
These are the product requirements in plain language — what a user should be able to do, and what the app should handle quietly.
How to read
Must = core value. Should = improves the experience. Can = nice to have.
Core User Tasks
| ID | Requirement | Priority |
|---|---|---|
| FR-01 | Paste a URL and see title, thumbnail, duration, and qualities before downloading | Must |
| FR-02 | Pick a quality and download to a chosen folder with progress (percent, speed, ETA) | Must |
| FR-03 | Pause, resume, cancel, and retry a download | Must |
| FR-04 | Queue many downloads and control how many run at once (1–10) | Must |
| FR-05 | Inspected URLs are remembered (unique, 30-day retention) so past searches are one click away | Should |
| FR-06 | History survives restarts — grouped Today / Yesterday / date | Must |
| FR-07 | Convert a completed video (MP4/MKV) or extract audio (MP3/AAC/Opus/FLAC) | Should |
| FR-08 | No duplicate completed downloads for the same video + format | Should |
| FR-09 | Desktop notifications for completion/failure (toggleable) | Can |
| FR-10 | Settings: folder, notifications, concurrency — persisted locally | Must |
Behavior That Matters
- Inspection before commitment — users pick from human labels like "1080p MP4", not raw format codes.
- Retry is deliberate, not magical — failed or cancelled downloads can always be retried with their original settings (even after an app restart). Automatic retry with backoff for transient network failures is a documented future enhancement, not shipped behavior.
- No wasted downloads — starting the same video + quality twice is rejected while a completed copy still exists.
- File safety — each completed download prints its final path; the manager verifies it on disk. Missing files are repaired or pruned.
Out of Scope
To keep the app focused:
- No cloud sync, no accounts, no sharing links.
- No built-in video player — use the system player via "Open file".
- No proxy settings or auto-update checks in the current version.
- No playlist downloads — yt-dlp runs with
--no-playlistby design; single videos only. Playlist support is a candidate for future versions, not a hidden half-feature.
Trade-off made visible
Writing what is not included avoids building a second product inside the first.
Acceptance in One Glance
- A new user can download a single video in under a minute with no setup.
- A failed download can be retried from history after a full app restart, restoring its original settings.
- Closing and reopening the app shows the same downloads and history — nothing lost.
Why it matters
Requirements are written for real people, not for a spec shelf. If a feature doesn't help "save this video now," it waits.