# Phase 5: Frontend — Audio Processing Templates **Status:** ⬜ Not Started **Parent plan:** [PLAN.md](./PLAN.md) **Domain:** frontend ## Objective Build the frontend UI for managing Audio Processing Templates — list, create, edit, delete, with a filter editor and real-time preview. ## Tasks - [ ] Task 1: Create TypeScript module `static/js/features/audio-processing-templates.ts` - Fetch/cache audio processing templates via DataCache - CRUD operations using fetchWithAuth - CardSection for template list with reconciliation - [ ] Task 2: Create template editor modal - Name, description, tags fields - Ordered filter list with add/remove/reorder controls - Per-filter option controls (sliders, selects, toggles) driven by option schemas from `GET /api/v1/audio-filters` - Template composition support: `audio_filter_template` shows EntitySelect for sub-template - Dirty check via snapshotValues() - [ ] Task 3: Add Audio Processing Templates section to the Streams tab - New sub-tab or section alongside existing Audio Sources - CardSection rendering with template name, filter count, description - Create/Edit/Delete actions per card - [ ] Task 4: Real-time audio preview - "Test" button on template editor that opens a WebSocket connection - Shows spectrum visualization (reuse existing audio test pattern) - Applies template's filters to a selected source in real-time - Source picker (EntitySelect) for choosing input audio source - [ ] Task 5: Add i18n keys for all new UI strings (en.json, ru.json, zh.json) - Template section labels, filter names, option labels, buttons, errors - [ ] Task 6: Register module in `app.js` / global exports if needed for inline onclick handlers - [ ] Task 7: Fetch and cache audio filter registry data (for building filter option UIs) ## Files to Modify/Create - `static/js/features/audio-processing-templates.ts` — **create** — main module - `static/js/features/audio-processing-template-modal.ts` — **create** — editor modal - `static/css/dashboard.css` — **modify** — styles for template editor - `static/js/app.js` — **modify** — register module, add window exports - `templates/dashboard.html` (or relevant Jinja template) — **modify** — add section - `static/js/core/i18n/en.json` — **modify** — new keys - `static/js/core/i18n/ru.json` — **modify** — new keys - `static/js/core/i18n/zh.json` — **modify** — new keys ## Acceptance Criteria - Audio Processing Templates section visible in Streams tab - Templates can be created, edited, deleted - Filter editor shows all 11 available filters with correct option controls - Template composition (audio_filter_template) works via EntitySelect - Real-time preview shows filtered audio data - All strings are internationalized ## Notes - Follow existing patterns from postprocessing template UI - Use IconSelect for filter type selection (if icon set supports it) or a custom filter picker - NEVER use plain HTML `