initial comment
This commit is contained in:
268
FEATURE-SUMMARY.md
Normal file
268
FEATURE-SUMMARY.md
Normal file
@@ -0,0 +1,268 @@
|
||||
# encoderPro Dashboard - New Features Summary
|
||||
|
||||
## Overview
|
||||
|
||||
This document summarizes the new features added to the encoderPro dashboard to enable profile selection and individual movie re-encoding.
|
||||
|
||||
---
|
||||
|
||||
## Feature 1: Encoding Profile Selection in Settings
|
||||
|
||||
### What It Does
|
||||
Users can now select the default encoding profile directly from the dashboard's Encoding Settings panel, without manually editing the YAML configuration file.
|
||||
|
||||
### User Interface Changes
|
||||
- **Encoding Settings Panel** (formerly "Quality Settings")
|
||||
- New section: "📹 Encoding Profile"
|
||||
- Profile dropdown with all available profiles
|
||||
- Profile description area showing encoder, quality (CRF), preset, and description
|
||||
- Combined save button for both profile and quality check settings
|
||||
|
||||
### How It Works
|
||||
1. Dashboard loads available profiles from `/api/profiles` on page load
|
||||
2. Populates dropdown with profile names
|
||||
3. Shows default profile as pre-selected
|
||||
4. When profile is selected, displays detailed information about:
|
||||
- Encoder (e.g., `cpu_x265`, `nvidia_nvenc_h265`)
|
||||
- Quality (CRF value)
|
||||
- Preset (e.g., `slow`, `medium`, `fast`)
|
||||
- Description (if available)
|
||||
5. Clicking "💾 Save All Settings" updates the config file with the new default profile
|
||||
|
||||
### API Endpoint Used
|
||||
- `GET /api/profiles` - Get available profiles
|
||||
- `POST /api/config` - Save updated configuration
|
||||
|
||||
### Code Location
|
||||
- **Frontend:** `templates/dashboard.html` lines 411-480 (HTML), lines 927-968 (JavaScript)
|
||||
- **Backend:** Existing `/api/profiles` and `/api/config` endpoints
|
||||
|
||||
---
|
||||
|
||||
## Feature 2: Individual Movie Selection and Re-Encoding
|
||||
|
||||
### What It Does
|
||||
Users can select specific movies from the file quality table and queue them for re-encoding with a chosen profile. This allows targeted re-processing without re-encoding the entire library.
|
||||
|
||||
### User Interface Changes
|
||||
|
||||
#### File Quality Analysis Table
|
||||
- **New checkbox column** (first column)
|
||||
- "Select All" checkbox in header
|
||||
- Individual checkboxes for each file
|
||||
- Disabled for files currently processing
|
||||
|
||||
#### Selection Controls (above table)
|
||||
- **Selection counter:** Shows "X files selected"
|
||||
- **Profile dropdown:** Select encoding profile for re-encoding
|
||||
- **Re-encode button:** "🎬 Re-encode Selected"
|
||||
- Disabled when no files selected or no profile chosen
|
||||
- Enabled when both conditions are met
|
||||
|
||||
### How It Works
|
||||
|
||||
#### Selection Flow
|
||||
1. User views files in the quality table
|
||||
2. Can filter by state (all, pending, completed, failed)
|
||||
3. Checks boxes next to files they want to re-encode
|
||||
4. Selection count updates in real-time
|
||||
5. Uses "Select All" to select all visible files at once
|
||||
|
||||
#### Re-Encoding Flow
|
||||
1. User selects one or more files
|
||||
2. Chooses encoding profile from dropdown
|
||||
3. Clicks "🎬 Re-encode Selected"
|
||||
4. Confirmation dialog shows:
|
||||
- Number of files
|
||||
- Selected profile
|
||||
- Warning that state will be reset
|
||||
5. On confirmation:
|
||||
- Files reset from `completed`/`failed` to `pending`
|
||||
- Profile name assigned to each file
|
||||
- Success message shown
|
||||
- Table refreshes to show updated states
|
||||
|
||||
#### Background Process
|
||||
1. API endpoint `/api/jobs/reencode-selected` receives request
|
||||
2. Updates database:
|
||||
```sql
|
||||
UPDATE files
|
||||
SET state = 'pending',
|
||||
profile_name = ?,
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id IN (...)
|
||||
```
|
||||
3. Files are now queued for processing
|
||||
4. When user starts the encoding job, these files will be processed with their assigned profiles
|
||||
|
||||
### Use Cases
|
||||
- **Quality Upgrade:** Re-encode completed files with higher quality profile (lower CRF)
|
||||
- **Failed File Recovery:** Re-process failed files with different encoder or settings
|
||||
- **Profile Testing:** Test new profiles on specific files before batch processing
|
||||
- **Selective Compression:** Re-encode only large files with more aggressive compression
|
||||
- **Format Change:** Switch from CPU to GPU encoding for specific files
|
||||
|
||||
### API Endpoint
|
||||
**New Endpoint:** `POST /api/jobs/reencode-selected`
|
||||
|
||||
**Request:**
|
||||
```json
|
||||
{
|
||||
"file_ids": [1, 5, 12, 23],
|
||||
"profile": "quality_cpu"
|
||||
}
|
||||
```
|
||||
|
||||
**Response:**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"message": "4 files queued for re-encoding",
|
||||
"count": 4
|
||||
}
|
||||
```
|
||||
|
||||
### Code Location
|
||||
- **Frontend HTML:** `templates/dashboard.html` lines 482-531 (table structure)
|
||||
- **Frontend JavaScript:** `templates/dashboard.html` lines 1033-1189 (selection logic)
|
||||
- **Backend API:** `dashboard.py` lines 575-615 (new endpoint)
|
||||
- **Documentation:** `DASHBOARD-API.md` lines 310-340
|
||||
|
||||
---
|
||||
|
||||
## Technical Implementation Details
|
||||
|
||||
### JavaScript State Management
|
||||
```javascript
|
||||
let selectedFiles = new Set(); // Tracks selected file IDs
|
||||
let availableProfiles = {}; // Caches profile definitions
|
||||
```
|
||||
|
||||
### Key Functions
|
||||
|
||||
#### `loadEncodingProfiles()`
|
||||
- Fetches profiles from API
|
||||
- Populates both dropdowns (settings and re-encode)
|
||||
- Updates profile description
|
||||
|
||||
#### `toggleFileSelection(fileId)`
|
||||
- Adds/removes file ID from selection set
|
||||
- Updates selection counter
|
||||
|
||||
#### `toggleSelectAll()`
|
||||
- Selects/deselects all non-disabled checkboxes
|
||||
- Updates selection set
|
||||
|
||||
#### `updateSelectedCount()`
|
||||
- Updates "X files selected" text
|
||||
- Enables/disables re-encode button based on:
|
||||
- At least one file selected
|
||||
- Profile chosen
|
||||
|
||||
#### `reencodeSelected()`
|
||||
- Validates selection and profile
|
||||
- Confirms with user
|
||||
- Calls API endpoint
|
||||
- Refreshes table on success
|
||||
|
||||
### Database Changes
|
||||
The `/api/jobs/reencode-selected` endpoint updates the `files` table:
|
||||
- Sets `state` to `pending`
|
||||
- Sets `profile_name` to chosen profile
|
||||
- Updates `updated_at` timestamp
|
||||
|
||||
This allows the main encoding script to pick up these files and process them with the specified profile.
|
||||
|
||||
---
|
||||
|
||||
## User Workflow Example
|
||||
|
||||
### Scenario: Re-encode low-quality files with better settings
|
||||
|
||||
1. **Filter Files**
|
||||
- Select "Completed Only" from filter dropdown
|
||||
- Table shows all completed encodes
|
||||
|
||||
2. **Review Results**
|
||||
- User notices some files have poor quality scores
|
||||
- Or some files have large file sizes despite encoding
|
||||
|
||||
3. **Select Files**
|
||||
- Click checkboxes next to files needing re-encoding
|
||||
- Or click "Select All" to choose all visible files
|
||||
- Counter shows "5 files selected"
|
||||
|
||||
4. **Choose Profile**
|
||||
- Select "quality_cpu" from profile dropdown
|
||||
- (This profile uses CRF 19 for higher quality)
|
||||
|
||||
5. **Queue Re-Encoding**
|
||||
- Click "🎬 Re-encode Selected"
|
||||
- Confirm dialog: "Re-encode 5 file(s) using profile 'quality_cpu'?"
|
||||
- Click OK
|
||||
|
||||
6. **Processing**
|
||||
- Success message: "✅ 5 file(s) queued for re-encoding!"
|
||||
- Files now show as "pending" in table
|
||||
- User clicks "▶️ Start Processing" to begin encoding
|
||||
|
||||
7. **Monitoring**
|
||||
- Files process with new profile
|
||||
- Statistics update in real-time
|
||||
- Activity log shows progress
|
||||
|
||||
---
|
||||
|
||||
## Benefits
|
||||
|
||||
### For Users
|
||||
- **No YAML editing required** - Configure profiles through UI
|
||||
- **Granular control** - Re-encode specific files, not entire library
|
||||
- **Flexibility** - Test different profiles on different files
|
||||
- **Recovery** - Easy to retry failed files with different settings
|
||||
- **Efficiency** - No need to re-encode entire library to change quality
|
||||
|
||||
### For Workflow
|
||||
- **Iterative improvement** - Test and refine encoding settings
|
||||
- **Quality assurance** - Upgrade files that didn't meet quality standards
|
||||
- **Resource optimization** - Use GPU profiles for some files, CPU for others
|
||||
- **Error recovery** - Quickly retry failed encodes with different encoders
|
||||
|
||||
---
|
||||
|
||||
## Future Enhancements
|
||||
|
||||
Potential improvements for future versions:
|
||||
|
||||
1. **Bulk Profile Assignment**
|
||||
- Apply different profiles to different groups of files
|
||||
- Profile recommendations based on file characteristics
|
||||
|
||||
2. **Quality Preview**
|
||||
- Show estimated file size before re-encoding
|
||||
- Compare current vs. target quality scores
|
||||
|
||||
3. **Scheduled Re-Encoding**
|
||||
- Queue files for processing during off-peak hours
|
||||
- Priority queue for urgent re-encodes
|
||||
|
||||
4. **Batch Operations**
|
||||
- Reset multiple files to different states
|
||||
- Bulk delete from database
|
||||
- Export selection to CSV
|
||||
|
||||
5. **Advanced Filtering**
|
||||
- Filter by quality score, file size, encoder used
|
||||
- Save custom filter presets
|
||||
- Search by filename patterns
|
||||
|
||||
---
|
||||
|
||||
## Summary
|
||||
|
||||
These two features provide users with:
|
||||
1. **Easy profile management** through the UI
|
||||
2. **Precise control** over which files to re-encode
|
||||
3. **Flexible workflows** for quality improvement and error recovery
|
||||
|
||||
The implementation is fully integrated with the existing encoderPro system and requires no changes to the core encoding logic.
|
||||
Reference in New Issue
Block a user