Spaces:
Runtime error
Runtime error
File size: 3,679 Bytes
6c576f2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | # Cloud Extraction & Product Detection Guide
This document details the configuration, implementation, and safeguards that ensure successful video frame extraction and product identification in the cloud environment.
## 1. Cloud Video Extraction (`server.js`)
**Problem**: Cloud IPs (Hugging Face/AWS/GCP) are aggressively blocked by YouTube, causing `403 Forbidden` or `Sign in to confirm you're not a bot` errors.
**Solution**:
- **Authentication**: We use browser cookies exported via `YT_DLP_COOKIES_BASE64` environment variable. This authenticates the request as a legitimate user session.
- **Failover Logic**:
1. **Primary**: Attempt direct extraction with `yt-dlp` using cookies.
2. **Fallback**: If direct extraction fails (e.g., age-gated or heavy throttling), the system falls back to downloading the highest quality thumbnail available (`maxresdefault` -> `sddefault` -> `hqdefault`).
3. **IPv4 Forcing**: While previously discussed, specific IP forcing is less critical than valid cookies.
**Configuration Requirements**:
- `YT_DLP_COOKIES_BASE64`: Required env var containing base64-encoded Netscape format cookies.
- `yt-dlp` binary must act as a mobile client (User-Agent spoofing handles this internally in some versions, but cookies are key).
## 2. Product Detection & Thumbnails
**Problem**: Detected objects sometimes lacked cropped images (e.g., bounding box failures or `sharp` errors), leading to empty cards in the UI.
**Solution**:
- **Vision Model**: We utilize `Qwen/Qwen2.5-VL-7B-Instruct` for its strong multi-modal understanding and JSON output reliability.
- **Thumbnail Guarantee**:
- The system attempts to crop the detected object from the frame.
- **Regression Fix**: If the crop fails or detection comes from a full-frame analysis (fallback mode), the system **automatically uploads the full frame** as the product thumbnail.
- This guarantees 100% image coverage for every detected product.
## 3. Data Privacy & Diagnostics
**Problem**: Diagnostic logs (e.g., "Extracted 4 frames") were appearing as "products" in the public or moderation UI, confusing users.
**Solution**:
- **Status Segregation**:
- Valid Products: `status = 'pending_review'` (default) or `approved`.
- Diagnostics/Errors: `status = 'rejected'`.
- **Database Hygiene**:
- All internal logging (e.g., `logDiag`) explicitly sets `status='rejected'`.
- Error catches in major workflows (e.g., `extractFrames`) log errors to DB with `rejected` status for debugging without polluting the UI.
- **Frontend Filtering**:
- `ShowcaseService` explicitly filters out `status='rejected'` items from both the **Public Showcase** and **Moderation Queue**.
- This ensures that even if a diagnostic log is generated, it remains invisible to the end-user.
## 4. Infrastructure & Deployment
**Problem**: Server timeouts or cold starts on serverless platforms (Vercel) caused extraction to fail mid-process.
**Solution**:
- **Persistent Worker**: We deploy the heavy extraction worker on **Hugging Face Spaces** (Docker/Node.js) which allows for long-running processes (up to 48 hours).
- **Inngest Coordination**: The Vercel app triggers the job via Inngest, but the heavy lifting happens on the dedicated worker, communicating back status updates.
## 5. Maintenance & Monitoring
- **Health Check**: The `/health` endpoint returns the current git version timestamp (e.g., `2026-02-07T19:30:00Z`) to verify successful deployments.
- **Database Cleanup**: Occasional SQL cleanup of old diagnostic logs can keep table size manageable:
```sql
DELETE FROM detected_objects WHERE status = 'rejected' AND created_at < NOW() - INTERVAL '7 days';
```
|