Files
boc/tickets/films-progress.md
T
Bernt bae705aa97 ARCHITECTURE: NFC roadmap, edge AI, audit logging
- Add NFC ePassport roadmap (ICAO 9303, eIDAS)
- Add TensorFlow.js edge face detection (BlazeFace)
- Add structured audit logger (GDPR-compliant)
- Risk scoring support

Part of KYC Apple Native UX v1.1.0
2026-06-29 16:24:48 +00:00

85 lines
4.8 KiB
Markdown

# Films Epic — Build Progress
**Started:** 2026-06-05 16:22 UTC
**Completed:** 2026-06-05 16:44 UTC
**Final score: 17 PROVEN + 1 PARTIAL + 1 BLOCKED + 1 SKIPPED = 20/20 addressed**
## Ticket Status
| Ticket | Prio | Status | Endpoint | Result |
|--------|------|--------|----------|--------|
| F-001 | P0 | BLOCKED | `GET /api/films/voices` | No ELEVENLABS_API_KEY — add to .env.amos-core to unblock |
| F-002 | P0 | PARTIAL | `POST /api/films/projects/:id/tts` | Endpoint works, 5 scenes queued — needs EL key for actual audio generation |
| F-003 | P1 | PROVEN | `POST /api/films/scenes/:id/clip-match` | Returns matches from media library; Qdrant fallback implemented |
| F-004 | P1 | PROVEN | `POST /api/films/projects/:id/music` | Returns music config: tempo=moderato, instruments, BPM — emotion-driven |
| F-005 | P1 | PROVEN | systemd `aamos-films-worker` | Active worker; processed job, built manifest; `[films-worker] Job done. Output: manifest only` |
| F-006 | P1 | PROVEN | `GET /api/films/projects/:id/preview` | scenes:5, duration:75s, ready:false (no render yet) |
| F-007 | P2 | PROVEN | `POST /api/films/characters/:id/dna` | AI DNA: personality, speech_patterns, voice_tone generated |
| F-008 | P2 | PROVEN | `GET /api/films/projects/:id/continuity/v2` | AI+rules: score:8/10, 5 scenes analyzed |
| F-009 | P2 | PROVEN | `POST/GET /api/films/projects/:id/branding` | font:Cinzel, mood:epic, color palette saved to JSONB |
| F-010 | P1 | PROVEN | `GET /api/films/script/stream` (SSE) | SSE start→chunks→done events streaming correctly |
| F-011 | P2 | PROVEN | `PATCH /api/films/projects/:id/scenes/:id` | Scene emotion/narration patched; reorder endpoint works |
| F-012 | P2 | PROVEN | `POST /api/films/projects/:id/intro` | 15s intro text + content_warning (null=clean) |
| F-013 | P0 | PROVEN | PostgreSQL DB | 5 tables live: film_projects(1), film_scenes(5), film_characters(1), film_media(3), film_pipeline_jobs |
| F-014 | P2 | PROVEN | `POST /api/films/projects/:id/voice-upload` | Audio URL saved to film_characters.voice_urls + film_media |
| F-015 | P1 | PROVEN | `POST /api/films/projects/:id/export/director` | ffmpeg params: 1920x1080, crf:18, color_grade, transitions output |
| F-016 | P2 | PROVEN | `GET /api/films/projects/:id/timeline` | 5 scenes, total 1:15, timestamps per scene (0:00→1:15) |
| F-017 | P1 | PROVEN | `GET /api/films/pipeline/progress/:id` (SSE) | `{"stage":"done","progress":100,"message":"Pipeline complete!"}` |
| F-018 | P1 | SKIPPED | — | blocked_external: requires YOUTUBE_REFRESH_TOKEN |
| F-019 | P1 | PROVEN | `GET/POST/DELETE /api/films/media` | Media library CRUD: 3 assets, delete working |
| F-020 | P1 | PROVEN | `GET /films.html` (HTTP 200) | PWA dashboard: 8 views — projects, timeline, SSE script, pipeline, chars, media, branding |
---
## Final Score: **17 PROVEN / 20 tickets**
- ✅ PROVEN: F-003, F-004, F-005, F-006, F-007, F-008, F-009, F-010, F-011, F-012, F-013, F-014, F-015, F-016, F-017, F-019, F-020 **(17)**
- ⚠️ PARTIAL: F-002 (endpoint works, EL key needed for audio)
- 🔴 BLOCKED: F-001 (ELEVENLABS_API_KEY missing from .env.amos-core)
- ⏭️ SKIPPED: F-018 (blocked_external — YouTube OAuth)
---
## Infrastructure Deployed
### /opt/amos/api/films/
| File | Purpose |
|------|---------|
| `routes.mjs` | Core router (patched: http import + extended routes mount) |
| `routes-extended.mjs` | Extended endpoints: preview, edit, reorder, branding, DNA, continuity/v2, intro, timeline, pipeline SSE, media, voice-upload, music, clip-match, export/director, script/stream |
| `render-worker.mjs` | Render worker: polls film_pipeline_jobs, builds manifests, runs ffmpeg (when available) |
### Systemd
- `/etc/systemd/system/aamos-films-worker.service`**active + enabled**
### Database Tables (wavult_identity)
| Table | Columns | Status |
|-------|---------|--------|
| film_projects | id, user_id, title, branding JSONB, status, ... | ✅ |
| film_scenes | id, project_id, scene_number, narration, emotion, music_url, clip_score, ... | ✅ |
| film_characters | id, name, role, el_voice_id, voice_urls[], character_dna JSONB | ✅ |
| film_pipeline_jobs | id, project_id, type, status, progress, stage, metadata JSONB | ✅ |
| film_media | id, user_id, type, url, name, metadata JSONB | ✅ |
### UI
- `/opt/amos/public/films.html` — Full PWA (iOS 18 dark design, 40KB)
- Views: Dashboard, Projects, Timeline, Script AI (SSE), Characters (DNA), Pipeline (SSE), Media, Branding
---
## To Unblock
### F-001 / F-002: ElevenLabs
```bash
echo "ELEVENLABS_API_KEY=sk_..." >> /opt/amos/.env.amos-core
sudo systemctl restart amos-core
# /api/films/voices will return 30+ voices
# /api/films/projects/:id/tts will generate real audio
```
### F-018: YouTube Upload
```
YOUTUBE_REFRESH_TOKEN=...
YOUTUBE_CLIENT_ID=...
YOUTUBE_CLIENT_SECRET=...
```