Video Converter - Product Requirements Document (PRD)¶
Document Version: 1.1.0 Date: 2025-12-23 Status: Active Author: Product Team
Table of Contents¶
- Executive Summary
- Problem Definition
- Product Vision and Goals
- User Personas
- User Stories
- Functional Requirements
- Non-Functional Requirements
- User Flows
- UI/UX Requirements
- Scope Definition
- Dependencies and Constraints
- Success Metrics
- Release Plan
- Appendix
1. Executive Summary¶
1.1 Product Overview¶
Video Converter is an automated video codec conversion solution for macOS users. It automatically converts H.264 codec videos stored in Apple Photos library to H.265 (HEVC), achieving 50%+ storage savings while maintaining visually identical quality and preserving all metadata (GPS, dates, album information).
1.2 Core Value Proposition¶
┌─────────────────────────────────────────────────────────────────────┐
│ Core Value Proposition │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ "Keep your precious memories, halve your storage" │
│ │
│ ✓ Automation: Set once, runs daily automatically │
│ ✓ Lossless: Visually indistinguishable quality │
│ ✓ Safe: 100% preservation of GPS, dates, all metadata │
│ ✓ Efficient: Fast conversion with Apple Silicon hardware accel. │
│ │
└─────────────────────────────────────────────────────────────────────┘
1.3 Target Market¶
- Primary: Individual users using Apple Photos on macOS
- Secondary: Prosumers/creators managing large video archives
2. Problem Definition¶
2.1 User Pain Points¶
Pain Point 1: Rapidly Growing Video Storage¶
"My 4K videos from iPhone are piling up and even 512GB iCloud isn't enough anymore. The monthly iCloud fees are becoming a burden."
Current State: - Smartphone camera improvements → 4K 60fps recording commonplace - 1 minute 4K video = ~400MB (H.264) - Average user: 50-100 videos/month → 20-40GB/month increase
Result: - iCloud/local storage shortage - Additional storage purchase costs - Pressure to delete precious videos
Pain Point 2: Manual Conversion Hassle¶
"Converting one by one with HandBrake takes too much time, and the settings are too complicated."
Current State: - Existing conversion tools: Manual work required per file - Complex encoding settings to understand - Risk of metadata loss
Result: - Abandoning conversion efforts - Continued inefficient storage usage
Pain Point 3: Metadata Loss Concerns¶
"I'm worried that GPS info and recording dates will disappear after conversion. These are my travel memories..."
Current State: - Most conversion tools: Partial metadata loss - GPS coordinates: Particularly high risk of loss - Photos app sorting/search functionality disabled
Result: - Location-based search unavailable after conversion - Chronological sorting broken - Context of memories lost
2.2 Opportunity Analysis¶
| Factor | Current State | Opportunity |
|---|---|---|
| H.265 Codec Maturity | All Apple devices support (2017+) | Transition possible without compatibility issues |
| Apple Silicon Adoption | M1+ Macs majority | Fast conversion with hardware acceleration |
| Automation Infrastructure | macOS launchd built-in | Background execution without separate app |
| Open Source Tools | FFmpeg, osxphotos mature | Stable technical foundation secured |
3. Product Vision and Goals¶
3.1 Product Vision¶
"Enable all macOS users to preserve memories without worrying about storage space"
3.2 Product Goals¶
Short-term Goals (v1.0)¶
| # | Goal | Metric |
|---|---|---|
| G1 | Provide automated batch conversion | 0 user interventions after setup |
| G2 | 50%+ storage savings | Average compression ratio 50%+ |
| G3 | 100% metadata preservation | GPS, date preservation rate 100% |
| G4 | Visually lossless quality | VMAF 93+ |
Mid-term Goals (v1.x)¶
| # | Goal | Metric |
|---|---|---|
| G5 | Intuitive GUI | NPS 50+ |
| G6 | iCloud integration support | Cloud video conversion possible |
| G7 | Smart scheduling | Auto-scheduling based on system resources |
Long-term Goals (v2.0+)¶
| # | Goal | Metric |
|---|---|---|
| G8 | In-place Photos app replacement | Original replacement feature |
| G9 | AV1 codec support | M3+ hardware acceleration |
| G10 | Cross-platform | iOS/iPadOS support |
4. User Personas¶
4.1 Primary Persona: "Family Recorder" Minsu¶
┌─────────────────────────────────────────────────────────────────────┐
│ 👤 Minsu (38, Office Worker) │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 📱 Devices: iPhone 15 Pro, MacBook Air M2, 200GB iCloud │
│ 📸 Activity: Records family videos on weekends, 30-50 4K videos/mo │
│ 💾 Current: iCloud 90% used, monthly storage shortage warnings │
│ │
│ 🎯 Goals: │
│ • Want to keep all family videos │
│ • Want to avoid additional iCloud costs │
│ • Want automatic processing without complex settings │
│ │
│ 😤 Frustrations: │
│ • "I keep getting notifications to delete videos" │
│ • "HandBrake settings are too complicated" │
│ • "Location info disappears after conversion" │
│ │
│ ✅ Success Criteria: │
│ • Set once, runs daily automatically │
│ • Keep iCloud usage under 50% │
│ • Maintain map view for travel videos │
│ │
└─────────────────────────────────────────────────────────────────────┘
4.2 Secondary Persona: "Video Archiver" Jiyeon¶
┌─────────────────────────────────────────────────────────────────────┐
│ 👤 Jiyeon (29, YouTube Creator) │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 📱 Devices: iPhone 15 Pro Max, Mac Studio M2 Ultra, 4TB SSD │
│ 📸 Activity: Produces 3-4 videos/week, must keep originals │
│ 💾 Current: 200-300GB new videos/month, 2-3TB increase/year │
│ │
│ 🎯 Goals: │
│ • Save storage while maintaining maximum original quality │
│ • Batch process large numbers of videos │
│ • Fast conversion with hardware acceleration │
│ │
│ 😤 Frustrations: │
│ • "Software encoding is too slow" │
│ • "Batch job management is difficult" │
│ • "I'm worried about quality loss" │
│ │
│ ✅ Success Criteria: │
│ • Convert 4K 1-hour video in under 10 minutes │
│ • Guaranteed VMAF 95+ quality │
│ • Overnight automatic batch processing │
│ │
└─────────────────────────────────────────────────────────────────────┘
4.3 Tertiary Persona: "Tech Enthusiast" Sungho¶
┌─────────────────────────────────────────────────────────────────────┐
│ 👤 Sungho (45, Developer) │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 📱 Devices: Various Macs, runs NAS │
│ 📸 Activity: Tech testing, prefers script automation │
│ 💾 Current: Prefers command-line tools, wants fine control │
│ │
│ 🎯 Goals: │
│ • Complete control via CLI │
│ • Integration with other scripts │
│ • Open source for customization │
│ │
│ ✅ Success Criteria: │
│ • Rich CLI options │
│ • JSON/YAML config file support │
│ • Pipeline integration possible │
│ │
└─────────────────────────────────────────────────────────────────────┘
5. User Stories¶
5.1 Epic 1: Initial Setup¶
| ID | User Story | Priority | Acceptance Criteria |
|---|---|---|---|
| US-101 | As a user, I want to install all dependencies with a single install script | Must | Complete installation in 5 minutes |
| US-102 | As a user, I want to complete basic setup with a setup wizard | Should | 3 steps or fewer |
| US-103 | As a user, I want to easily grant Photos app access permission | Must | Auto-navigate to system settings |
| US-104 | As a user, I want to select quality/speed presets | Should | 3 presets provided |
5.2 Epic 2: Video Conversion¶
| ID | User Story | Priority | Acceptance Criteria |
|---|---|---|---|
| US-201 | As a user, I want to automatically find H.264 videos in Photos library | Must | No manual selection needed |
| US-202 | As a user, I want to convert only selected videos | Should | Album/date filter support |
| US-203 | As a user, I want to see real-time conversion progress | Should | Progress % display |
| US-204 | As a user, I want Mac to remain responsive during conversion | Must | CPU 30% or less (HW mode) |
| US-205 | As a user, I want already converted videos to be skipped | Must | Duplicate conversion prevention |
5.3 Epic 3: Metadata Preservation¶
| ID | User Story | Priority | Acceptance Criteria |
|---|---|---|---|
| US-301 | As a user, I want recording dates preserved after conversion | Must | 100% date preservation |
| US-302 | As a user, I want GPS location info preserved after conversion | Must | 100% GPS preservation |
| US-303 | As a user, I want album info preserved after conversion | Should | Album mapping maintained |
| US-304 | As a user, I want file creation date in Finder to match original | Should | Timestamp synchronization |
5.4 Epic 4: Automation¶
| ID | User Story | Priority | Acceptance Criteria |
|---|---|---|---|
| US-401 | As a user, I want auto conversion to run at a specific time daily | Must | Schedule configurable |
| US-402 | As a user, I want new videos to be auto-converted when added | Should | Folder watch feature |
| US-403 | As a user, I want to receive notification on conversion completion | Should | macOS notification support |
| US-404 | As a user, I want conversion delayed when Mac is in use | Could | Idle time detection |
5.5 Epic 5: Safety and Recovery¶
| ID | User Story | Priority | Acceptance Criteria |
|---|---|---|---|
| US-501 | As a user, I don't want original files deleted immediately | Must | Move to processed folder |
| US-502 | As a user, I want originals preserved on conversion failure | Must | Original retained on failure |
| US-503 | As a user, I want to verify quality of converted files | Should | Verification report provided |
| US-504 | As a user, I want to restore from original if problems occur | Should | Recovery feature provided |
5.6 Epic 6: Monitoring and Reporting¶
| ID | User Story | Priority | Acceptance Criteria |
|---|---|---|---|
| US-601 | As a user, I want to see total storage saved | Should | Statistics dashboard |
| US-602 | As a user, I want to view conversion history | Should | Log viewing feature |
| US-603 | As a user, I want to see list of failed conversions | Must | Failed list displayed |
| US-604 | As a user, I want to see next scheduled conversion | Could | Schedule display |
6. Functional Requirements¶
6.1 Functional Requirements Matrix¶
| ID | Feature | Description | Priority | Release |
|---|---|---|---|---|
| Core Features | ||||
| FR-001 | H.264 Detection | Automatic video codec detection | P0 | v1.0 |
| FR-002 | H.265 Conversion | VideoToolbox hardware accelerated conversion | P0 | v1.0 |
| FR-003 | Software Conversion | libx265 high-quality conversion option | P1 | v1.0 |
| FR-004 | Progress Display | Real-time conversion progress | P1 | v1.0 |
| Photos Integration | ||||
| FR-101 | Photos Scan | Library scan with osxphotos | P0 | v1.0 |
| FR-102 | Video Filtering | Filter H.264 videos only | P0 | v1.0 |
| FR-103 | Video Export | Extract original video to temp | P0 | v1.0 |
| FR-104 | iCloud Download | Download cloud videos | P1 | v1.0 |
| FR-105 | Album Filter | Process specific albums only | P2 | v1.1 |
| Metadata | ||||
| FR-201 | Metadata Extraction | Full metadata extraction with ExifTool | P0 | v1.0 |
| FR-202 | Metadata Application | Restore metadata to converted file | P0 | v1.0 |
| FR-203 | GPS Preservation | Special handling for GPS coordinates | P0 | v1.0 |
| FR-204 | Timestamp Sync | File system time synchronization | P1 | v1.0 |
| Quality Management | ||||
| FR-301 | Integrity Check | File verification with FFprobe | P0 | v1.0 |
| FR-302 | Property Comparison | Resolution/framerate/duration comparison | P0 | v1.0 |
| FR-303 | Compression Check | Abnormal compression ratio warning | P1 | v1.0 |
| FR-304 | VMAF Measurement | Quality score calculation (optional) | P2 | v1.1 |
| Automation | ||||
| FR-401 | Scheduled Execution | launchd StartCalendarInterval | P0 | v1.0 |
| FR-402 | Folder Watch | launchd WatchPaths | P1 | v1.0 |
| FR-403 | Notification | macOS Notification Center | P1 | v1.0 |
| FR-404 | Service Management | launchctl wrapper | P1 | v1.0 |
| CLI | ||||
| FR-501 | Single Conversion | convert <input> <output> |
P0 | v1.0 |
| FR-502 | Batch Conversion | run --mode photos |
P0 | v1.0 |
| FR-503 | Status Query | status |
P1 | v1.0 |
| FR-504 | Stats Query | stats |
P2 | v1.0 |
| FR-505 | Service Install | install-service |
P0 | v1.0 |
| Safety | ||||
| FR-601 | Original Preservation | Move to processed folder | P0 | v1.0 |
| FR-602 | Retry Logic | 3 retries on failure | P0 | v1.0 |
| FR-603 | Failure Isolation | Failed files to separate folder | P0 | v1.0 |
| FR-604 | Checkpoint | Session state save/restore | P2 | v1.1 |
6.2 Feature Detailed Specifications¶
FR-002: H.265 Conversion (VideoToolbox)¶
Description: Hardware accelerated H.265 encoding using Apple Silicon's VideoToolbox
Input: - H.264 codec video file (.mp4, .mov, .m4v) - Quality setting (1-100, default 45)
Processing:
ffmpeg -i <input> \
-c:v hevc_videotoolbox \
-q:v <quality> \
-tag:v hvc1 \
-c:a copy \
-map_metadata 0 \
-movflags use_metadata_tags \
<output>
Output: - H.265/HEVC codec video file - QuickTime compatible tag (hvc1)
Success Criteria: - Conversion success rate 99%+ - Average compression ratio 50%+ - Conversion speed: 20x+ realtime (4K)
FR-203: GPS Preservation¶
Description: Perfect preservation of GPS coordinate information during conversion
Input: - Original video GPS metadata - QuickTime:GPSCoordinates - Keys:GPSCoordinates - XMP:GPSLatitude/Longitude
Processing:
1. Basic copy with FFmpeg -map_metadata 0
2. Detailed copy with ExifTool -tagsFromFile
3. Explicit GPS tag copy (-GPS*)
4. Post-copy verification
Output: - Same GPS coordinates on converted video
Success Criteria: - GPS preservation rate 100% - Accuracy maintained to 6 decimal places
7. Non-Functional Requirements¶
7.1 Performance Requirements¶
| ID | Requirement | Target | Measurement Method |
|---|---|---|---|
| NFR-P01 | 4K 30min video conversion time (HW) | Under 5 minutes | Benchmark test |
| NFR-P02 | 1080p 10min video conversion time (HW) | Under 30 seconds | Benchmark test |
| NFR-P03 | CPU usage (HW mode) | 30% or less | Activity Monitor |
| NFR-P04 | Memory usage | 1GB or less | Activity Monitor |
| NFR-P05 | Concurrent conversion support | 2 | Configurable |
7.2 Reliability Requirements¶
| ID | Requirement | Target | Measurement Method |
|---|---|---|---|
| NFR-R01 | Conversion success rate | 99%+ | Batch test |
| NFR-R02 | Metadata preservation rate | 100% | Auto verification |
| NFR-R03 | Service uptime (automation) | 99.9% | Log analysis |
| NFR-R04 | Error recovery success rate | 95%+ | Retry logs |
7.3 Usability Requirements¶
| ID | Requirement | Target | Measurement Method |
|---|---|---|---|
| NFR-U01 | Initial setup time | Under 5 minutes | User testing |
| NFR-U02 | CLI learning time | Under 10 minutes | User testing |
| NFR-U03 | Error message clarity | 90% comprehension | User feedback |
7.4 Compatibility Requirements¶
| ID | Requirement | Target | Notes |
|---|---|---|---|
| NFR-C01 | macOS version | 12.0+ (Monterey) | Apple Silicon required |
| NFR-C02 | Python version | 3.10+ | osxphotos requirement |
| NFR-C03 | FFmpeg version | 5.0+ | hevc_videotoolbox support |
| NFR-C04 | Video formats | .mp4, .mov, .m4v | H.264 codec |
7.5 Security Requirements¶
| ID | Requirement | Target | Implementation |
|---|---|---|---|
| NFR-S01 | Photos access permission | Minimum privilege | Read-only |
| NFR-S02 | Temp file security | Delete after use | Auto cleanup |
| NFR-S03 | Config file security | Store in user home | 0600 permission |
8. User Flows¶
8.1 Initial Setup Flow¶
┌─────────────────────────────────────────────────────────────────────┐
│ Initial Setup Flow │
└─────────────────────────────────────────────────────────────────────┘
[Start]
│
▼
┌─────────────────┐
│ 1. Run install │ ──▶ brew install, pip install
│ script │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 2. Dependency │ ──▶ ffmpeg, exiftool, osxphotos
│ check (auto) │
└────────┬────────┘
│
▼
┌─────────────────┐ ┌─────────────────┐
│ 3. Photos │ ──▶ │ Auto-navigate │
│ permission │ │ to System Prefs │
└────────┬────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ 4. Quality │ ──▶ Fast(HW) / Balanced(HW) / High Quality(SW)
│ preset │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 5. Schedule │ ──▶ Daily 3 AM (default)
│ setup │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 6. Service │ ──▶ launchctl load
│ registration │
└────────┬────────┘
│
▼
[Complete - Waiting for auto execution]
8.2 Auto Conversion Flow¶
┌─────────────────────────────────────────────────────────────────────┐
│ Auto Conversion Flow │
└─────────────────────────────────────────────────────────────────────┘
[Schedule Trigger - 3 AM]
│
▼
┌─────────────────┐
│ 1. Photos Scan │ ──▶ Query video list with osxphotos
│ │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 2. H.264 Filter │ ──▶ Exclude already HEVC videos
│ │ Exclude already converted
└────────┬────────┘
│
▼
┌─────────────────┐ ┌─────────────────┐
│ 3. No targets? │──Y──▶│ Log and exit │
│ │ │ │
└────────┬────────┘ └─────────────────┘
│N
▼
┌─────────────────┐
│ 4. Per-video │
│ loop │
│ ┌─────────────┐ │
│ │ 4a. Export │ │ ──▶ Extract to temp directory
│ └──────┬──────┘ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 4b. Convert │ │ ──▶ FFmpeg hevc_videotoolbox
│ └──────┬──────┘ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 4c. Verify │ │ ──▶ Integrity, property comparison
│ └──────┬──────┘ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 4d. Meta- │ │ ──▶ ExifTool metadata restore
│ │ data │ │
│ └──────┬──────┘ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 4e. Cleanup │ │ ──▶ Original → processed folder
│ └─────────────┘ │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 5. Generate │ ──▶ Success/failure/space saved
│ report │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 6. Send │ ──▶ macOS Notification Center
│ notification │
└────────┬────────┘
│
▼
[End]
8.3 Manual Conversion Flow (CLI)¶
[User command input]
│
▼
$ video-converter convert input.mp4 output.mp4 --mode hardware --quality 45
│
▼
┌─────────────────┐
│ 1. Input │ ──▶ File exists, codec check
│ validation │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 2. Execute │ ──▶ Progress bar display
│ conversion │ [████████░░░░░░░░] 50% (2:30 remaining)
└────────┬────────┘
│
▼
┌─────────────────┐
│ 3. Post- │ ──▶ Metadata, timestamps
│ processing │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 4. Output │ ──▶ ✅ Complete: 1.5GB → 680MB (54% saved)
│ result │
└─────────────────┘
9. UI/UX Requirements¶
9.1 CLI Interface¶
Command Structure¶
video-converter <command> [options]
Commands:
convert Single file conversion
run Batch conversion execution
status Service status check
stats Conversion statistics query
config Configuration management
install Service installation
uninstall Service removal
Global Options:
--config Config file path
--verbose Detailed log output
--quiet Minimal output
--help Show help
Output Format¶
Progress Display:
Completion Summary:
╭─────────────────────────────────────────────╮
│ Conversion Report │
├─────────────────────────────────────────────┤
│ Videos processed: 15 │
│ Success: 14 │
│ Failed: 1 │
│ Skipped: 3 (already HEVC) │
├─────────────────────────────────────────────┤
│ Original size: 35.2 GB │
│ Converted size: 15.8 GB │
│ Space saved: 19.4 GB (55%) │
├─────────────────────────────────────────────┤
│ Total time: 45 min 32 sec │
│ Average speed: 3.2x realtime │
╰─────────────────────────────────────────────╯
Error Display:
❌ Error: vacation_corrupted.mp4
Cause: Invalid data found when processing input
Solution: File is corrupted. Check original.
Location: ~/Videos/Failed/vacation_corrupted.mp4
9.2 macOS Notifications¶
Success Notification:
┌─────────────────────────────────┐
│ 🎬 Video Converter │
│ │
│ Conversion Complete │
│ 14 videos, 19.4GB saved │
│ │
│ [Details] [Close] │
└─────────────────────────────────┘
Error Notification:
┌─────────────────────────────────┐
│ ⚠️ Video Converter │
│ │
│ Conversion Failed │
│ Error during 1 video conversion │
│ │
│ [View Log] [Close] │
└─────────────────────────────────┘
9.3 Configuration File Format¶
{
"version": "0.1.0.0",
"encoding": {
"mode": "hardware",
"quality": 45,
"crf": 22,
"preset": "slow"
},
"paths": {
"output": "~/Videos/Converted",
"processed": "~/Videos/Processed",
"failed": "~/Videos/Failed"
},
"automation": {
"enabled": true,
"schedule": "daily",
"time": "03:00"
},
"photos": {
"include_albums": [],
"exclude_albums": ["Screenshots"],
"download_from_icloud": true
},
"processing": {
"max_concurrent": 2,
"validate_quality": true,
"preserve_original": true
},
"notification": {
"on_complete": true,
"on_error": true,
"daily_summary": false
}
}
10. Scope Definition¶
10.1 In Scope¶
v1.0 Scope¶
| Category | Included Items |
|---|---|
| Platform | macOS 12.0+ (Apple Silicon) |
| Source | Apple Photos library, local folders |
| Codec | H.264 → H.265 conversion |
| Encoder | VideoToolbox (HW), libx265 (SW) |
| Automation | launchd schedule/folder watch |
| Interface | CLI |
| Metadata | GPS, dates, camera info |
| Notification | macOS Notification Center |
10.2 Out of Scope¶
Excluded from v1.0¶
| Item | Reason | Future Plan |
|---|---|---|
| GUI app | Development complexity | v2.0 consideration |
| In-place Photos replacement | API limitations | Research needed |
| Windows/Linux | Platform-specific | TBD |
| iOS/iPadOS | Platform-specific | v3.0 consideration |
| AV1 codec | M3+ only | v1.x consideration |
| Real-time streaming | Different use case | Excluded |
| Video editing | Different use case | Excluded |
| Cloud storage | Complexity | v2.0 consideration |
10.3 Assumptions and Dependencies¶
Assumptions: - User uses macOS Photos app as primary video management tool - Has Apple Silicon Mac (hardware acceleration required) - Homebrew installable environment - Basic terminal usage ability
Dependencies: - FFmpeg: Core video conversion engine - osxphotos: Photos library access - ExifTool: Metadata processing - launchd: macOS automation infrastructure
11. Dependencies and Constraints¶
11.1 Technical Constraints¶
| Constraint | Impact | Mitigation |
|---|---|---|
| Cannot directly modify Photos library | Converted files stored separately | Clearly guide output folder |
| VideoToolbox quality limitations | Slightly larger files than SW | Provide quality presets |
| iCloud sync delays | Some videos not processable | Retry logic, wait option |
| Large file memory usage | System load on some systems | Streaming processing |
11.2 Operational Constraints¶
| Constraint | Impact | Mitigation |
|---|---|---|
| Power required (laptop) | Battery drain | Check power state |
| 2x storage needed | Space shortage during conversion | Pre-check space |
| Mac must be on for overnight | Schedule may be missed | Process on next run |
12. Success Metrics¶
12.1 Key Performance Indicators (KPIs)¶
| Metric | Target | Measurement Frequency | Data Source |
|---|---|---|---|
| Conversion success rate | 99%+ | Per batch | Execution logs |
| Average compression ratio | 50%+ | Per batch | Conversion results |
| Metadata preservation rate | 100% | Per file | Auto verification |
| VMAF quality score | 93+ | Sampling | VMAF measurement |
| User setup time | Under 5 min | Onboarding | User feedback |
12.2 Business Metrics¶
| Metric | Target | Measurement Method |
|---|---|---|
| Storage saved per user | 50GB+/month | Statistics aggregation |
| Daily active usage rate | 80%+ | Service logs |
| Error rate | Under 1% | Error logs |
| User satisfaction (NPS) | 50+ | Survey |
12.3 Quality Metrics¶
| Metric | Target | Measurement Method |
|---|---|---|
| Bug rate | Critical 0, Major ≤2/month | Issue tracking |
| Test coverage | 80%+ | pytest-cov |
| Code quality score | Grade A | CodeClimate |
13. Release Plan¶
13.1 Release Roadmap¶
Note: This project uses 0.x.x.x versioning to indicate active development status. Version 1.0.0.0 will be assigned when the project reaches production-ready stability.
2025 Q4 (Completed)
└── v0.1.0.0 (Initial Release) - 2025-12-22 ✅
└── Core conversion, Photos integration, automation, CLI
2026 Q1 (In Progress)
└── v0.2.0.0 (Feature Release) - In Development
├── VMAF quality verification
├── macOS Notification Center integration
├── Statistics and reporting
├── Concurrent processing support
├── Rich progress display
└── Error recovery and retry logic
2026 Q2
└── v0.3.0.0
└── GUI application (basic)
2026 Q3+
└── v0.4.0.0
└── AV1 codec support, advanced features
13.2 Feature Mapping by Version¶
| Version | Major Features | Target Users | Status |
|---|---|---|---|
| v0.1.0.0 | Core conversion, Photos integration, launchd automation, CLI | General users | ✅ Released |
| v0.2.0.0 | VMAF verification, notifications, statistics, concurrent processing, error recovery | General users | 🔄 In Development |
| v0.3.0.0 | Basic GUI application | General users | 📅 Planned |
| v0.4.0.0 | AV1 codec support, advanced features | All users | 📅 Planned |
13.3 Release Checklist¶
Pre-Release: - [ ] All P0 features implemented - [ ] Unit test 80%+ coverage - [ ] Integration tests passing - [ ] Performance benchmarks met - [ ] Security review complete
Release: - [ ] CHANGELOG updated - [ ] Version tag created - [ ] PyPI deployment - [ ] GitHub Release created - [ ] Documentation updated
Post-Release: - [ ] User feedback collection - [ ] Bug monitoring - [ ] Performance metrics verification
14. Appendix¶
14.1 Glossary¶
| Term | Definition |
|---|---|
| H.264 | AVC (Advanced Video Coding), video codec standardized in 2003 |
| H.265 | HEVC (High Efficiency Video Coding), standardized 2013, 50% efficiency improvement over H.264 |
| VideoToolbox | Apple's hardware video encoding/decoding framework |
| CRF | Constant Rate Factor, quality-based encoding setting (lower = higher quality) |
| VMAF | Video Multimethod Assessment Fusion, quality metric developed by Netflix (0-100) |
| launchd | macOS service management framework |
| osxphotos | Python-based Photos library access tool |
14.2 Reference Documents¶
Design Documents: - Software Requirements Specification (SRS) - Software Design Specification (SDS) - Technical design implementation of this PRD - Development Plan
Architecture Documents: - System Architecture - Sequence Diagrams - Data Flow - Processing Procedures
Reference Materials: - Codec Comparison - FFmpeg Guide - VideoToolbox Guide - Photos Access Methods - Automation Methods
14.3 Change History¶
| Version | Date | Author | Changes |
|---|---|---|---|
| 1.0.0 | 2025-12-21 | - | Initial creation |
| 1.1.0 | 2025-12-23 | - | Updated release roadmap to reflect v1.0.0 release and v1.1.0 development status |
Approval¶
| Role | Name | Signature | Date |
|---|---|---|---|
| Product Owner | |||
| Tech Lead | |||
| Design Lead |
This document is updated as the project progresses.