Update all documentation with latest features and installation methods

Updates:
- Comprehensive README with all new features (mute controls, video specs, warnings)
- Both Standard and MAMP installation methods clearly documented
- Updated QUICKSTART with both setup methods and new features
- Updated START_WITH_MAMP with latest feature descriptions
- Added troubleshooting for both installation methods
- Documented aspect ratio warning system (yellow and red indicators)
- Added video specifications display details
- Production deployment guidance
- Performance expectations and file size reduction targets

All documentation now reflects current v1.0 feature set.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
DJP 2025-10-16 18:14:13 -04:00
parent 5e3d921f06
commit 64f1fd6f80
3 changed files with 690 additions and 137 deletions

View file

@ -2,13 +2,33 @@
## 🚀 Get Started in 3 Steps
Choose your preferred setup method:
---
## Method 1: Standard Setup (Recommended)
### 1. Start the Application
**Option A - One Command:**
```bash
./start.sh
```
This will start both the backend (port 5000) and frontend (port 8000).
**Option B - Manual (Two Terminals):**
**Terminal 1 - Backend:**
```bash
cd backend
source ../venv/bin/activate
python app.py
```
**Terminal 2 - Frontend:**
```bash
cd frontend
python3 -m http.server 8000
```
### 2. Open Your Browser
@ -17,10 +37,38 @@ Navigate to: **http://localhost:8000**
### 3. Upload and Convert
1. **Drag & drop** a video file onto the upload area
2. **Select platform** (e.g., TikTok, Meta, YouTube)
3. **Select aspect ratio** (e.g., 1:1, 16:9, 9:16)
4. Click **"Convert Video"**
5. **Compare** side-by-side and download optimized file
2. **Select platform** (e.g., TikTok, Meta, YouTube) - or let filename auto-detect
3. **Select aspect ratio** (e.g., 1:1, 16:9, 9:16) - or let filename auto-detect
4. ⚠️ **Check for yellow warning** if aspect ratio differs from original
5. Click **"Convert Video"**
6. **Compare** side-by-side and download optimized file
---
## Method 2: MAMP Setup
### 1. Start Python Backend
```bash
cd backend
source ../venv/bin/activate
python app.py
```
**Keep this terminal running!**
### 2. Configure MAMP
1. Open **MAMP** application
2. **Preferences** → **Web Server**
3. Set **Document Root** to: `[path-to]/Loreal-File-Reduction/frontend`
4. Click **"Start Servers"**
### 3. Open Your Browser
Navigate to: **http://localhost:8888/index.html**
(Or your MAMP port)
---
@ -28,24 +76,33 @@ Navigate to: **http://localhost:8000**
Name your files with these patterns for automatic detection:
**Examples:**
- `summer_campaign_tiktok_9x16.mp4` → Auto-detects TikTok + 9:16
- `product_ad_meta_1x1_v2.mov` → Auto-detects Meta + 1:1
- `youtube_16x9_final.mp4` → Auto-detects YouTube + 16:9
### Examples
**Platform Keywords:**
- TikTok: `_tiktok_`, `_tt_`
- Meta: `_meta_`, `_fb_`, `_ig_`
- YouTube: `_youtube_`, `_yt_`
- Pinterest: `_pinterest_`, `_pin_`
- Snapchat: `_snapchat_`, `_snap_`
| Filename | Auto-Detects |
|----------|-------------|
| `summer_campaign_tiktok_9x16.mp4` | TikTok + 9:16 |
| `product_ad_meta_1x1_v2.mov` | Meta + 1:1 |
| `youtube_ctv_16x9_final.mp4` | YouTube CTV + 16:9 |
| `pinterest_2x3_inspiration.mp4` | Pinterest + 2:3 |
**Aspect Ratio Keywords:**
- 1:1 → `_1x1_`, `_square_`
- 16:9 → `_16x9_`, `_landscape_`
- 9:16 → `_9x16_`, `_vertical_`, `_portrait_`
- 4:5 → `_4x5_`
- 2:3 → `_2x3_`
### Platform Keywords
- **TikTok:** `_tiktok_`, `_tt_`
- **Meta:** `_meta_`, `_fb_`, `_ig_`
- **YouTube:** `_youtube_`, `_yt_`
- **YouTube CTV:** `_youtube_ctv_`, `_yt_ctv_`, `_ctv_`
- **Pinterest:** `_pinterest_`, `_pin_`
- **Snapchat:** `_snapchat_`, `_snap_`
- **Amazon Prime:** `_prime_`, `_amazon_prime_`
- **Amazon Freevee:** `_freevee_`, `_amazon_freevee_`
### Aspect Ratio Keywords
- **1:1**`_1x1_`, `_square_`
- **16:9**`_16x9_`, `_landscape_`
- **9:16**`_9x16_`, `_vertical_`, `_portrait_`
- **4:5**`_4x5_`
- **2:3**`_2x3_`
---
@ -58,18 +115,60 @@ Name your files with these patterns for automatic detection:
| **YouTube** | Quality focus | VP9 | 1280×720, 1920×1080 |
| **Pinterest** | Inspiration | H264 | 1000×1500 (2:3) |
| **Snapchat** | Stories | H264 | 720×1280 |
| **Amazon** | CTV/Streaming | H264 | 1920×1080 |
---
## ✨ Key Features
### During Configuration:
- ⚠️ **Yellow Warning** - Shows when aspect ratio differs from original
- **Auto-detection** - Platform and aspect ratio from filename
- **Bitrate recommendations** - Optimal ranges shown for each platform
### During Comparison:
- 🔴 **Red Warning** - Indicates aspect ratio was changed
- 🔴 **Red Outline** - On optimized video when aspect ratio differs
- **Video Specs** - Complete details for both videos shown below players
- **Mute Controls** - Independent audio control for each video
- **Sync Playback** - Play both videos simultaneously
- **File Size Stats** - Shows reduction percentage
### Video Specifications Shown:
- Platform (target platform for optimized)
- Resolution (e.g., 1920×1080)
- Aspect Ratio (e.g., 16:9)
- Codec (H264, H265, VP9)
- Bitrate (e.g., 1500k)
- Duration
- File Size
---
## 🛠 Troubleshooting
**Backend won't start?**
### Backend won't start?
**Check if something is on port 5000:**
```bash
source venv/bin/activate
pip install -r backend/requirements.txt
lsof -ti:5000
```
**FFmpeg not found?**
**Kill it:**
```bash
lsof -ti:5000 | xargs kill
```
**Then restart:**
```bash
cd backend
source ../venv/bin/activate
python app.py
```
### FFmpeg not found?
**Install FFmpeg:**
```bash
# macOS
brew install ffmpeg
@ -78,24 +177,54 @@ brew install ffmpeg
sudo apt-get install ffmpeg
```
**Port already in use?**
**Verify installation:**
```bash
ffmpeg -version
```
### Port already in use?
**Standard Setup - Port 8000:**
```bash
# Kill processes on port 5000 or 8000
lsof -ti:5000 | xargs kill
lsof -ti:8000 | xargs kill
```
**MAMP - Port 8888:**
Check MAMP settings or change port in Preferences
### "Failed to fetch" error?
**Checklist:**
1. ✅ Backend running? (`curl http://localhost:5000/api/health`)
2. ✅ Frontend accessible? (Open http://localhost:8000)
3. ✅ Check browser console (F12) for errors
4. ✅ Verify `frontend/config.js` has correct API_BASE
---
## 📊 File Size Expectations
## 📊 Expected Results
Typical reduction rates based on L'Oréal documentation:
### File Size Reduction
- **TikTok 9:16**: 30-40% reduction (using H265)
- **Meta 1:1**: 25-35% reduction
- **YouTube 16:9**: 20-30% reduction (VP9 is efficient)
Typical results:
*Actual results vary based on source quality and content complexity*
| Platform | Reduction |
|----------|-----------|
| **TikTok** (H265) | 30-40% |
| **Meta** (H264) | 25-35% |
| **YouTube** (VP9) | 20-30% |
### Conversion Times
For 1 minute 1080p video:
| Platform | Time |
|----------|------|
| **Meta/Pinterest** | 20-40 seconds |
| **TikTok** | 40-80 seconds |
| **YouTube** | 60-120 seconds |
*Times vary based on hardware*
---
@ -107,4 +236,39 @@ Typical reduction rates based on L'Oréal documentation:
---
## 📚 More Information
- **README.md** - Complete documentation
- **MAMP_SETUP.md** - Detailed MAMP configuration
- **START_WITH_MAMP.md** - Quick MAMP instructions
- **TESTING.md** - Testing procedures
---
## 🚦 Status Indicators
### Yellow Warning (Configuration Page)
- Appears when selected aspect ratio ≠ original
- Prevents accidental distortion
- Shows **before** conversion
### Red Warning (Comparison Page)
- Appears when aspect ratio **was** changed
- Red outline on optimized video
- Visual alert for quality check
---
## 💡 Tips
1. **Use descriptive filenames** with platform and aspect ratio for auto-detection
2. **Check yellow warning** before converting to avoid distortion
3. **Use mute controls** to compare audio quality
4. **Compare videos side-by-side** before downloading
5. **Watch for red indicators** if aspect ratio was changed
---
**Need help?** Check the full README.md for detailed documentation.
**Repository:** https://bitbucket.org/zlalani/loreal-video-optimizer

513
README.md
View file

@ -1,28 +1,39 @@
# Video Optimizer for Social Media Platforms
L'Oréal Creative Optimization Tool - Based on Impact Plus Documentation v1.1
L'Oréal Creative Optimization Tool - Based on L'Oréal CDMO Creative Optimization Documentation v1.1
## Overview
This application optimizes video files for various social media platforms using platform-specific codecs and bitrate recommendations. It features:
This application optimizes video files for various social media platforms using platform-specific codecs and bitrate recommendations to minimize file sizes while maintaining quality.
- **21 Platform Configurations** across 8 platforms
### Key Features
- **21 Platform Configurations** across 8 social media platforms
- **Automatic filename detection** for platform and aspect ratio
- **Side-by-side video comparison** for quality assurance
- **Side-by-side video comparison** with synchronized playback
- **Independent mute controls** for each video player
- **Detailed video specifications** display (codec, bitrate, resolution, etc.)
- **Aspect ratio mismatch warnings** with visual indicators
- **FFmpeg-powered conversion** with optimal codec settings
- **File size reduction tracking** with percentage display
- **Drag & drop interface** with progress indication
---
## Supported Platforms
| Platform | Codec | Aspect Ratios | Notes |
|----------|-------|---------------|-------|
| **Meta (Facebook/Instagram)** | H264 | 1:1, 16:9, 4:5, 9:16 | - |
| **Pinterest** | H264 | 1:1, 16:9, 2:3, 4:5, 9:16 | 2:3 not fully tested |
| **Snapchat** | H264 | 16:9, 9:16 | - |
| **TikTok** | H265 | 1:1, 16:9, 9:16 | Recommended for quality |
| **YouTube & DV360** | VP9 | 1:1, 16:9, 4:5, 9:16 | All devices |
| **YouTube CTV** | VP9 | 16:9 | Connected TV specific |
| **Amazon Prime** | H264 | 16:9 | 15Mbit/s minimum |
| **Amazon Freevee** | H264 | 16:9 | CTV specific |
| Platform | Codec | Aspect Ratios | Bitrate Range | Notes |
|----------|-------|---------------|---------------|-------|
| **Meta (Facebook/Instagram)** | H264 | 1:1, 16:9, 4:5, 9:16 | 840-1400 kbps | Mobile optimized |
| **Pinterest** | H264 | 1:1, 16:9, 2:3, 4:5, 9:16 | 1100-1690 kbps | 2:3 for inspiration boards |
| **Snapchat** | H264 | 16:9, 9:16 | 1100-1400 kbps | Stories format |
| **TikTok** | H265 | 1:1, 16:9, 9:16 | 840-1300 kbps | Recommended for quality |
| **YouTube & DV360** | VP9 | 1:1, 16:9, 4:5, 9:16 | 1300-2000 kbps | All devices |
| **YouTube CTV** | VP9 | 16:9 | 3300-7000 kbps | Connected TV specific |
| **Amazon Prime** | H264 | 16:9 | 15000 kbps | Minimum bitrate required |
| **Amazon Freevee** | H264 | 16:9 | 4500-7000 kbps | CTV specific |
---
## Installation
@ -31,7 +42,7 @@ This application optimizes video files for various social media platforms using
1. **Python 3.8+**
2. **FFmpeg** - Required for video processing
#### Install FFmpeg:
#### Install FFmpeg
**macOS:**
```bash
@ -45,92 +56,195 @@ sudo apt-get install ffmpeg
```
**Windows:**
Download from [ffmpeg.org](https://ffmpeg.org/download.html)
Download from [ffmpeg.org](https://ffmpeg.org/download.html) and add to PATH
### Setup
---
1. **Clone or navigate to the project directory**
## Quick Start (Standard Setup)
### Option 1: One-Command Start
2. **Create and activate virtual environment:**
```bash
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
./start.sh
```
3. **Install Python dependencies:**
```bash
pip install -r backend/requirements.txt
```
## Running the Application
### Start the Backend Server
This starts both backend (port 5000) and frontend (port 8000) automatically.
### Option 2: Manual Start
**Terminal 1 - Backend:**
```bash
# Activate virtual environment
source venv/bin/activate # On Windows: venv\Scripts\activate
# Start backend
cd backend
python app.py
```
The backend will start on `http://localhost:5000`
### Open the Frontend
Open `frontend/index.html` in your web browser, or serve it with a simple HTTP server:
**Terminal 2 - Frontend:**
```bash
# Serve frontend
cd frontend
python3 -m http.server 8000
```
Then navigate to `http://localhost:8000`
Then open: **http://localhost:8000**
## Usage
---
## MAMP Setup
For users who prefer MAMP for frontend hosting:
### 1. Start Python Backend
```bash
cd backend
source ../venv/bin/activate
python app.py
```
**Keep this terminal running!** Backend must be active on port 5000.
### 2. Configure MAMP
1. Open **MAMP** application
2. Go to **Preferences** → **Web Server**
3. Set **Document Root** to:
```
/Users/[your-path]/Loreal-File-Reduction/frontend
```
4. Click **Start Servers**
### 3. Access Application
Navigate to: **http://localhost:8888/index.html**
(Or use your MAMP port if different)
**See MAMP_SETUP.md for detailed MAMP configuration and troubleshooting.**
---
## Usage Guide
### 1. Upload Video
- Drag and drop a video file onto the upload area
- Or click to browse and select a file
- Supported formats: MP4, MOV, AVI, MKV, WEBM, FLV, WMV, M4V
### 2. Filename Auto-Detection
- **Drag and drop** a video file onto the upload area
- Or **click to browse** and select a file
- Supported formats: **MP4, MOV, AVI, MKV, WEBM, FLV, WMV, M4V**
- Max file size: **500MB** (configurable in backend/app.py)
The app can auto-detect platform and aspect ratio from filename patterns:
### 2. Automatic Detection
**Platform patterns:**
- Meta: `_meta_`, `_fb_`, `_ig_`, `_facebook_`, `_instagram_`
- Pinterest: `_pinterest_`, `_pin_`
- Snapchat: `_snapchat_`, `_snap_`
- TikTok: `_tiktok_`, `_tt_`
- YouTube: `_youtube_`, `_yt_`
- YouTube CTV: `_youtube_ctv_`, `_yt_ctv_`, `_ctv_`
- Amazon Prime: `_prime_`, `_amazon_prime_`
- Amazon Freevee: `_freevee_`, `_amazon_freevee_`
The app auto-detects platform and aspect ratio from filename patterns:
**Aspect ratio patterns:**
- 1:1 - `_1x1_`, `_square_`, `_1-1_`
- 16:9 - `_16x9_`, `_landscape_`, `_16-9_`
- 4:5 - `_4x5_`, `_4-5_`
- 9:16 - `_9x16_`, `_vertical_`, `_9-16_`, `_portrait_`
- 2:3 - `_2x3_`, `_2-3_`
#### Platform Patterns
- **Meta:** `_meta_`, `_fb_`, `_ig_`, `_facebook_`, `_instagram_`
- **Pinterest:** `_pinterest_`, `_pin_`
- **Snapchat:** `_snapchat_`, `_snap_`
- **TikTok:** `_tiktok_`, `_tt_`
- **YouTube:** `_youtube_`, `_yt_`
- **YouTube CTV:** `_youtube_ctv_`, `_yt_ctv_`, `_ctv_`
- **Amazon Prime:** `_prime_`, `_amazon_prime_`
- **Amazon Freevee:** `_freevee_`, `_amazon_freevee_`
**Example filenames:**
- `summer_ad_tiktok_9x16.mp4` → Auto-detects TikTok, 9:16
- `product_launch_meta_1x1_final.mov` → Auto-detects Meta, 1:1
#### Aspect Ratio Patterns
- **1:1** - `_1x1_`, `_square_`, `_1-1_`
- **16:9** - `_16x9_`, `_landscape_`, `_16-9_`
- **4:5** - `_4x5_`, `_4-5_`
- **9:16** - `_9x16_`, `_vertical_`, `_9-16_`, `_portrait_`
- **2:3** - `_2x3_`, `_2-3_`
#### Example Filenames
- `summer_campaign_tiktok_9x16.mp4` → Auto-detects **TikTok** + **9:16**
- `product_ad_meta_1x1_final.mov` → Auto-detects **Meta** + **1:1**
- `youtube_16x9_v2.mp4` → Auto-detects **YouTube** + **16:9**
### 3. Configure Settings
- Select platform (if not auto-detected)
- Select aspect ratio (if not auto-detected)
- Optionally override bitrate (recommended values are shown)
### 4. Convert
- Click "Convert Video"
- Wait for FFmpeg to process
- Select **platform** (if not auto-detected)
- Select **aspect ratio** (if not auto-detected)
- ⚠️ **Yellow warning** appears if aspect ratio differs from original
- Optionally override **bitrate** (recommended values shown)
- View platform specifications and codec requirements
### 4. Convert Video
- Click **"Convert Video"** button
- Progress bar shows conversion status
- FFmpeg processes video with optimal settings
### 5. Compare & Download
- View both videos side-by-side
- Check file size reduction
- Use sync playback to compare quality
- Download optimized version
#### Video Comparison Features:
- **Side-by-side playback** of original and optimized videos
- **Detailed specifications** for each video:
- Platform, Resolution, Aspect Ratio
- Codec, Bitrate, Duration, File Size
- **File size reduction** percentage displayed
- **Independent mute controls** for each player
- **Synchronized playback** button to play both simultaneously
- **Pause both** button for simultaneous pause
#### Aspect Ratio Changed Indicators:
- 🔴 **Red warning message** appears at top of comparison
- 🔴 **Red outline** with glow effect on optimized video
- Clear indication when video was converted to different aspect ratio
#### Download Options:
- Download **original** video
- Download **optimized** video
- Upload new file to start over
---
## Features in Detail
### Aspect Ratio Mismatch Warnings
**Configuration Page (Yellow Warning):**
- Appears when selected aspect ratio differs from original
- Warns about potential distortion before conversion
- Helps prevent accidental aspect ratio changes
**Comparison Page (Red Warning):**
- Red warning message at top of comparison section
- Red outline and glow effect on optimized video player
- Clear visual indication that aspect ratio was modified
- Alerts user to check for distortion, stretching, or cropping
### Video Specifications Display
Below each video player, detailed specifications are shown:
**Original Video:**
- Platform: Unknown
- Resolution (e.g., 1920×1080)
- Aspect Ratio (e.g., 16:9)
- Codec (e.g., H264)
- Bitrate (e.g., 5000 kbps)
- Duration
- File Size
**Optimized Video:**
- Target Platform (e.g., TikTok)
- Output Resolution
- Aspect Ratio
- Codec used
- Applied Bitrate
- Duration
- File Size
### Mute Controls
- Independent **Mute/Unmute** button for each video
- Listen to one video at a time or both together
- Useful for audio quality comparison
- Visual indication (button changes when muted)
---
## API Endpoints
@ -140,31 +254,45 @@ The app can auto-detect platform and aspect ratio from filename patterns:
| `/api/platforms` | GET | Get all platform specifications |
| `/api/detect` | POST | Detect platform from filename |
| `/api/upload` | POST | Upload video file |
| `/api/convert` | POST | Convert video |
| `/api/convert` | POST | Convert video to target format |
| `/api/stream/<type>/<id>` | GET | Stream video for playback |
| `/api/download/<type>/<id>` | GET | Download file |
| `/api/cleanup/<id>` | DELETE | Delete files |
| `/api/download/<type>/<id>` | GET | Download original or optimized file |
| `/api/cleanup/<id>` | DELETE | Delete uploaded and converted files |
---
## Project Structure
```
Loreal-File-Reduction/
├── venv/ # Virtual environment
├── backend/
│ ├── app.py # Flask application
│ ├── video_processor.py # FFmpeg processing logic
│ ├── platform_specs.py # Platform configurations
│ ├── app.py # Flask REST API server
│ ├── video_processor.py # FFmpeg conversion engine
│ ├── platform_specs.py # 21 platform configurations
│ ├── requirements.txt # Python dependencies
│ ├── uploads/ # Uploaded files (auto-created)
│ └── outputs/ # Converted files (auto-created)
│ ├── uploads/ # Temporary upload storage
│ └── outputs/ # Converted video output
├── frontend/
│ ├── index.html # Main UI
│ ├── style.css # Styling (Black + #FFC407)
│ └── app.js # Frontend logic
└── README.md # This file
│ ├── index.html # Main user interface
│ ├── style.css # Black + #FFC407 theme
│ ├── app.js # Frontend application logic
│ └── config.js # API endpoint configuration
├── venv/ # Python virtual environment
├── docs/
│ ├── README.md # This file
│ ├── QUICKSTART.md # Quick start guide
│ ├── MAMP_SETUP.md # Detailed MAMP setup
│ ├── START_WITH_MAMP.md # Quick MAMP guide
│ ├── TESTING.md # Testing procedures
│ └── PROJECT_SUMMARY.md # Project overview
├── .gitignore
├── start.sh # One-command startup script
└── Impact Plus PDF # Source documentation
```
## Technical Details
---
## Technical Specifications
### Codec Settings
@ -185,44 +313,227 @@ Loreal-File-Reduction/
- Row-mt: enabled
### Audio Settings
- AAC codec (128 kbps for mobile, 192 kbps for CTV)
- Opus codec for VP9/YouTube (128-192 kbps)
- **AAC codec:** 128 kbps for mobile, 192 kbps for CTV
- **Opus codec:** 128-192 kbps for VP9/YouTube
---
## Configuration
### Change API Endpoint
Edit `frontend/config.js`:
```javascript
const CONFIG = {
API_BASE: 'http://localhost:5000/api', // ← Change this
MAX_FILE_SIZE: 500 * 1024 * 1024,
DEBUG: true
};
```
### Adjust File Size Limit
Edit `backend/app.py`:
```python
MAX_FILE_SIZE = 500 * 1024 * 1024 # Change this value (bytes)
```
---
## Troubleshooting
### FFmpeg Not Found
```bash
# Verify FFmpeg installation
ffmpeg -version
### Backend Won't Start
# If not installed, install it:
# macOS:
**Issue:** Port 5000 already in use
**Solution:**
```bash
# Find and kill process on port 5000
lsof -ti:5000 | xargs kill
# Or use a different port
python app.py --port 5001 # Then update frontend/config.js
```
### FFmpeg Not Found
**Verify installation:**
```bash
ffmpeg -version
```
**If not installed:**
```bash
# macOS
brew install ffmpeg
# Ubuntu/Debian:
# Ubuntu/Debian
sudo apt-get install ffmpeg
# Windows - Download from ffmpeg.org and add to PATH
```
### CORS Issues
If frontend and backend are on different ports/domains, ensure Flask-CORS is installed and configured.
### Upload Fails
### Large File Uploads
Default max file size is 500MB. To change, edit `app.py`:
**Check:**
1. File size under 500MB (or configured limit)
2. Backend server is running
3. `backend/uploads/` folder exists and is writable
4. File format is supported (MP4, MOV, etc.)
### CORS Errors
**Verify** `backend/app.py` has:
```python
MAX_FILE_SIZE = 500 * 1024 * 1024 # Change this value
from flask_cors import CORS
CORS(app)
```
Already included! If issues persist, check browser console for details.
### Video Won't Play
**Try:**
1. Refresh page
2. Check backend logs for conversion errors
3. Verify FFmpeg is installed and working
4. Try a different browser (Chrome/Firefox/Safari)
---
## Design
- **Colors:** Black (#000000) + Yellow (#FFC407)
- **Font:** Montserrat (Google Fonts)
- **Theme:** Dark UI with yellow accents
- **Layout:** Responsive, mobile-friendly design
---
## Performance
### Expected Conversion Times
1 minute 1080p video (varies by hardware):
| Platform | Codec | Expected Time |
|----------|-------|---------------|
| Meta/Pinterest | H264 | 20-40 seconds |
| TikTok | H265 | 40-80 seconds |
| YouTube | VP9 | 60-120 seconds |
### File Size Reduction
Typical reduction rates:
| Platform | Expected Reduction |
|----------|-------------------|
| TikTok (H265) | 30-40% |
| Meta (H264) | 25-35% |
| YouTube (VP9) | 20-30% |
*Actual results vary based on source quality and content complexity*
---
## Documentation
- **README.md** - Complete documentation (this file)
- **QUICKSTART.md** - 3-step start guide
- **MAMP_SETUP.md** - Detailed MAMP configuration
- **START_WITH_MAMP.md** - Quick MAMP instructions
- **TESTING.md** - Testing procedures and validation
- **PROJECT_SUMMARY.md** - Project overview and stats
---
## Based On
**L'Oréal CDMO Creative Optimization Documentation v1.1**
All platform specifications, codecs, and bitrate recommendations are sourced from official L'Oréal documentation for creative optimization and environmental impact reduction.
---
## Repository
**Bitbucket:** https://bitbucket.org/zlalani/loreal-video-optimizer
---
## Development
### Running in Development Mode
Backend with debug mode:
```bash
cd backend
source ../venv/bin/activate
python app.py # Debug mode is enabled by default
```
Frontend with hot reload - use your preferred tool or simple HTTP server.
### Adding New Platforms
Edit `backend/platform_specs.py`:
1. Add platform configuration to `PLATFORM_SPECS` dictionary
2. Add filename patterns to `FILENAME_PATTERNS`
3. Backend will automatically expose via API
---
## Production Deployment
For production use:
1. **Use production WSGI server** (Gunicorn, uWSGI)
```bash
gunicorn -w 4 -b 0.0.0.0:5000 app:app
```
2. **Set up reverse proxy** (Nginx, Apache)
3. **Configure SSL/HTTPS**
4. **Disable debug mode** in `backend/app.py`:
```python
app.run(debug=False, host='0.0.0.0', port=5000)
```
5. **Implement authentication** if needed
6. **Set up file cleanup cron job** for uploads/outputs folders
7. **Configure proper CORS** restrictions for production domain
---
## Credits
Based on **L'Oréal CDMO Creative Optimization Documentation v1.1**
Impact Plus - March 2025
- **Repository Owner:** zlalani (Bitbucket)
- **Built with:** Claude Code
- **Backend:** Python + Flask + FFmpeg
- **Frontend:** HTML + JavaScript + CSS
- **Documentation Source:** L'Oréal CDMO Creative Optimization Documentation v1.1
---
## License
Internal tool for L'Oréal creative optimization workflows.
---
## Version
**Current Version:** 1.0
**Last Updated:** October 2025
**Recent Updates:**
- ✅ Independent mute controls for video comparison
- ✅ Detailed video specifications display
- ✅ Aspect ratio mismatch warnings (yellow + red)
- ✅ Red outline indicator for aspect ratio changes
- ✅ Platform field alignment in specifications
- ✅ Enhanced user experience and visual feedback

View file

@ -53,6 +53,48 @@ Go to: **http://localhost:8888/index.html**
- You see the black page with yellow "Video Optimizer" title
- You can drag & drop a video file
- After uploading, you see platform options (Meta, TikTok, YouTube, etc.)
- Video specifications display below each player after conversion
- Mute buttons work independently for each video
---
## ✨ New Features You'll See
### 1. Aspect Ratio Warnings
**Yellow Warning (Page 1 - Configuration):**
- Shows when you select an aspect ratio different from your original video
- Helps prevent accidental distortion **before** converting
**Red Warning (Page 2 - Comparison):**
- Shows when aspect ratio **was** changed during conversion
- Red outline with glow effect around optimized video
- Visual alert to check for distortion
### 2. Video Specifications
Below each video player:
- **Platform** - Shows target platform (Optimized) or "Unknown" (Original)
- **Resolution** - Exact pixel dimensions
- **Aspect Ratio** - Format ratio (16:9, 1:1, etc.)
- **Codec** - Video codec used (H264, H265, VP9)
- **Bitrate** - Video bitrate in kbps
- **Duration** - Video length
- **File Size** - Total file size
### 3. Mute Controls
- **🔊 Mute/🔇 Unmute** button for each video
- Listen to one video at a time or both together
- Great for comparing audio quality
- Button highlights when muted
### 4. File Size Reduction
At the top of comparison page:
- Original file size
- Optimized file size
- **Reduction percentage** (typically 20-40%)
---
@ -93,7 +135,7 @@ curl http://localhost:5000/api/platforms
Should show a JSON response with platform data.
### Test Frontend:
Open http://localhost:8888/index.html in browser - page should load.
Open http://localhost:8888/index.html in browser - page should load with black background and yellow title.
---
@ -117,9 +159,45 @@ Click "Stop Servers" in MAMP application
## Current Status
✅ Python backend is **running** on port 5000
✅ Python backend is ready (activate venv and run app.py)
✅ All platform configurations loaded (21 total)
✅ FFmpeg is installed and detected
✅ Ready to accept requests from MAMP frontend
✅ New features: Mute controls, video specs, aspect ratio warnings
**Next:** Configure MAMP and open http://localhost:8888/index.html
---
## 🎯 Usage Flow
1. **Upload** - Drag & drop video file
2. **Detect** - Filename auto-detection works (or manual selection)
3. **Warn** - Yellow warning if aspect ratio will change
4. **Convert** - Click button, watch progress bar
5. **Compare** - See both videos side-by-side with full specs
6. **Alert** - Red warning and outline if aspect ratio was changed
7. **Listen** - Use mute controls to compare audio
8. **Download** - Get optimized file
---
## 💡 Tips for MAMP Users
1. **Always start backend first** before opening MAMP
2. **Check terminal** for backend logs and errors
3. **Use browser console (F12)** to debug frontend issues
4. **Verify document root** is set to `frontend` folder
5. **Port 5000** must be available for backend
---
## 📚 Need More Help?
- **MAMP_SETUP.md** - Detailed MAMP setup and troubleshooting
- **README.md** - Complete application documentation
- **TESTING.md** - Testing procedures
---
**Repository:** https://bitbucket.org/zlalani/loreal-video-optimizer