2026-04-07 22:05:46 -04:00
<!DOCTYPE html>
< html lang = "en" >
< head >
< meta charset = "UTF-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
< title > Wild Dragon MAM< / title >
< link rel = "stylesheet" href = "css/styles.css" >
< / head >
< body >
< div id = "panel-container" >
<!-- Connection Bar -->
< div class = "connection-bar" >
fix(premiere-plugin): v1.0.1 — actually load + connect under CEP 12
End-to-end debugging against a live Premiere Pro 2025 + auth-enabled mam-api
surfaced four real bugs that made v1.0.0 install cleanly but never load,
plus the missing auth flow. All four are fixed and the panel is verified
connected (status dot green, Reconnect button shown, project list populated).
- manifest.xml: a comment in the <Resources> block contained "--" (inside
"--enable-nodejs"/"--mixed-context"), which is illegal per the XML spec.
CEP 12's strict parser logged
ERROR XPATH Double hyphen within comment
and skipped the panel entirely. Comment rewritten without double hyphens.
- manifest.xml: lacked the Version="X.Y" attribute on <ExtensionManifest>
and used a non-standard AbstractionLayers/empty <ExtensionList/>
structure. CEP rejected it with
Unsupported Manifest version ''
Manifest rewritten to the standard CSXS 7.0 schema (ExtensionList +
DispatchInfoList + RequiredRuntimeList), matching the working AMPP
panel template.
- main.js: re-declared `const csInterface = new CSInterface()` at top
level even though CSInterface.js already declared the same binding.
CEP 12 shares script-realm lexical scope across <script> tags, so the
second const threw
Identifier 'csInterface' has already been declared
The throw fired before setupEventListeners(), so the Connect button's
click handler was never attached. This is the root cause of the
original "clicking Connect does nothing" symptom; everything else was
secondary. Removed the duplicate declaration; main.js now uses the
binding from CSInterface.js.
- No auth support against AUTH_ENABLED=true servers. mam-api supports
Bearer tokens (POST /api/v1/tokens), so added:
• API token input field (password-masked) next to Server URL
• localStorage persistence on every keystroke
• window.fetch monkey-patch that injects
Authorization: Bearer <token>
on every request whose URL starts with the configured server.
Signed S3 download URLs are NOT touched.
Drive-by fixes that came out of the same debugging pass:
- Server URL input listener was 'change' (fires on blur); switched to
'input' so typing-then-clicking-Connect immediately commits.
- restoreSettings() now strips trailing slashes from the stored URL so
older saved values like 'http://host/' stop producing //api/v1 404s.
- CSS selector `input[type="text"].server-url` didn't match the new
password input → the token field was unstyled and effectively invisible.
Generalized to `input.server-url`; restructured the connection bar into
`.connection-controls--stacked` (flex column) of two `.server-input-row`
rows so two input fields fit cleanly.
- Build scripts now parse ExtensionBundleVersion from both element form
(<ExtensionBundleVersion>X</...>) and attribute form
(ExtensionBundleVersion="X"), since the manifest rewrite switched
schemas.
Version bumped 1.0.0 → 1.0.1. New artifacts committed at
services/premiere-plugin/build/releases/v1.0.1/ (.exe 2 MB, .zxp 35 KB).
v1.0.0 left in place so editors who downloaded it can verify they're on
the broken version.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 19:24:10 -04:00
< div class = "connection-controls connection-controls--stacked" >
< div class = "server-input-row" >
2026-04-07 22:05:46 -04:00
< input
type="text"
id="server-url"
class="server-url"
fix(premiere-plugin): v1.0.1 — actually load + connect under CEP 12
End-to-end debugging against a live Premiere Pro 2025 + auth-enabled mam-api
surfaced four real bugs that made v1.0.0 install cleanly but never load,
plus the missing auth flow. All four are fixed and the panel is verified
connected (status dot green, Reconnect button shown, project list populated).
- manifest.xml: a comment in the <Resources> block contained "--" (inside
"--enable-nodejs"/"--mixed-context"), which is illegal per the XML spec.
CEP 12's strict parser logged
ERROR XPATH Double hyphen within comment
and skipped the panel entirely. Comment rewritten without double hyphens.
- manifest.xml: lacked the Version="X.Y" attribute on <ExtensionManifest>
and used a non-standard AbstractionLayers/empty <ExtensionList/>
structure. CEP rejected it with
Unsupported Manifest version ''
Manifest rewritten to the standard CSXS 7.0 schema (ExtensionList +
DispatchInfoList + RequiredRuntimeList), matching the working AMPP
panel template.
- main.js: re-declared `const csInterface = new CSInterface()` at top
level even though CSInterface.js already declared the same binding.
CEP 12 shares script-realm lexical scope across <script> tags, so the
second const threw
Identifier 'csInterface' has already been declared
The throw fired before setupEventListeners(), so the Connect button's
click handler was never attached. This is the root cause of the
original "clicking Connect does nothing" symptom; everything else was
secondary. Removed the duplicate declaration; main.js now uses the
binding from CSInterface.js.
- No auth support against AUTH_ENABLED=true servers. mam-api supports
Bearer tokens (POST /api/v1/tokens), so added:
• API token input field (password-masked) next to Server URL
• localStorage persistence on every keystroke
• window.fetch monkey-patch that injects
Authorization: Bearer <token>
on every request whose URL starts with the configured server.
Signed S3 download URLs are NOT touched.
Drive-by fixes that came out of the same debugging pass:
- Server URL input listener was 'change' (fires on blur); switched to
'input' so typing-then-clicking-Connect immediately commits.
- restoreSettings() now strips trailing slashes from the stored URL so
older saved values like 'http://host/' stop producing //api/v1 404s.
- CSS selector `input[type="text"].server-url` didn't match the new
password input → the token field was unstyled and effectively invisible.
Generalized to `input.server-url`; restructured the connection bar into
`.connection-controls--stacked` (flex column) of two `.server-input-row`
rows so two input fields fit cleanly.
- Build scripts now parse ExtensionBundleVersion from both element form
(<ExtensionBundleVersion>X</...>) and attribute form
(ExtensionBundleVersion="X"), since the manifest rewrite switched
schemas.
Version bumped 1.0.0 → 1.0.1. New artifacts committed at
services/premiere-plugin/build/releases/v1.0.1/ (.exe 2 MB, .zxp 35 KB).
v1.0.0 left in place so editors who downloaded it can verify they're on
the broken version.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 19:24:10 -04:00
placeholder="http://10.0.0.25:47434"
2026-04-07 22:05:46 -04:00
title="MAM server URL"
>
< div class = "status-indicator" id = "status-indicator" > < / div >
< / div >
fix(premiere-plugin): v1.0.1 — actually load + connect under CEP 12
End-to-end debugging against a live Premiere Pro 2025 + auth-enabled mam-api
surfaced four real bugs that made v1.0.0 install cleanly but never load,
plus the missing auth flow. All four are fixed and the panel is verified
connected (status dot green, Reconnect button shown, project list populated).
- manifest.xml: a comment in the <Resources> block contained "--" (inside
"--enable-nodejs"/"--mixed-context"), which is illegal per the XML spec.
CEP 12's strict parser logged
ERROR XPATH Double hyphen within comment
and skipped the panel entirely. Comment rewritten without double hyphens.
- manifest.xml: lacked the Version="X.Y" attribute on <ExtensionManifest>
and used a non-standard AbstractionLayers/empty <ExtensionList/>
structure. CEP rejected it with
Unsupported Manifest version ''
Manifest rewritten to the standard CSXS 7.0 schema (ExtensionList +
DispatchInfoList + RequiredRuntimeList), matching the working AMPP
panel template.
- main.js: re-declared `const csInterface = new CSInterface()` at top
level even though CSInterface.js already declared the same binding.
CEP 12 shares script-realm lexical scope across <script> tags, so the
second const threw
Identifier 'csInterface' has already been declared
The throw fired before setupEventListeners(), so the Connect button's
click handler was never attached. This is the root cause of the
original "clicking Connect does nothing" symptom; everything else was
secondary. Removed the duplicate declaration; main.js now uses the
binding from CSInterface.js.
- No auth support against AUTH_ENABLED=true servers. mam-api supports
Bearer tokens (POST /api/v1/tokens), so added:
• API token input field (password-masked) next to Server URL
• localStorage persistence on every keystroke
• window.fetch monkey-patch that injects
Authorization: Bearer <token>
on every request whose URL starts with the configured server.
Signed S3 download URLs are NOT touched.
Drive-by fixes that came out of the same debugging pass:
- Server URL input listener was 'change' (fires on blur); switched to
'input' so typing-then-clicking-Connect immediately commits.
- restoreSettings() now strips trailing slashes from the stored URL so
older saved values like 'http://host/' stop producing //api/v1 404s.
- CSS selector `input[type="text"].server-url` didn't match the new
password input → the token field was unstyled and effectively invisible.
Generalized to `input.server-url`; restructured the connection bar into
`.connection-controls--stacked` (flex column) of two `.server-input-row`
rows so two input fields fit cleanly.
- Build scripts now parse ExtensionBundleVersion from both element form
(<ExtensionBundleVersion>X</...>) and attribute form
(ExtensionBundleVersion="X"), since the manifest rewrite switched
schemas.
Version bumped 1.0.0 → 1.0.1. New artifacts committed at
services/premiere-plugin/build/releases/v1.0.1/ (.exe 2 MB, .zxp 35 KB).
v1.0.0 left in place so editors who downloaded it can verify they're on
the broken version.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 19:24:10 -04:00
< div class = "server-input-row" >
< input
type="password"
id="api-token"
class="server-url"
placeholder="API token (wd_…)"
feat: implement advanced features (conform, auto-relink, GUI redesign, docs, tests)
- #30 FCP XML Export & Conform: slide panel UI, preset system, FCP XML generation,
conform job submission with progress polling via BullMQ
- #31 Hi-Res Auto-Relink: clip list with checkboxes, batch-trim server endpoint,
trimWorker with frame-accurate FFmpeg trimming, auto-relink in Premiere via
ExtendScript, temp segment signed URL endpoint
- #32 GUI Redesign: complete rewrite with Wild Dragon OKLCH design tokens
(accent oklch(45% 0.20 266)), slide panels, preset cards, chip components
- #34 Cleanup Task: existing task validated and properly registered
- #35 Testing: comprehensive 33-scenario E2E test plan
- #36 Documentation: advanced features guide with workflows, troubleshooting,
presets table, and architecture overview
- #24 PR merge: verified mergeable
All server endpoints, worker queues, and ExtendScript functions wired together
2026-05-24 13:19:24 -04:00
title="API token"
fix(premiere-plugin): v1.0.1 — actually load + connect under CEP 12
End-to-end debugging against a live Premiere Pro 2025 + auth-enabled mam-api
surfaced four real bugs that made v1.0.0 install cleanly but never load,
plus the missing auth flow. All four are fixed and the panel is verified
connected (status dot green, Reconnect button shown, project list populated).
- manifest.xml: a comment in the <Resources> block contained "--" (inside
"--enable-nodejs"/"--mixed-context"), which is illegal per the XML spec.
CEP 12's strict parser logged
ERROR XPATH Double hyphen within comment
and skipped the panel entirely. Comment rewritten without double hyphens.
- manifest.xml: lacked the Version="X.Y" attribute on <ExtensionManifest>
and used a non-standard AbstractionLayers/empty <ExtensionList/>
structure. CEP rejected it with
Unsupported Manifest version ''
Manifest rewritten to the standard CSXS 7.0 schema (ExtensionList +
DispatchInfoList + RequiredRuntimeList), matching the working AMPP
panel template.
- main.js: re-declared `const csInterface = new CSInterface()` at top
level even though CSInterface.js already declared the same binding.
CEP 12 shares script-realm lexical scope across <script> tags, so the
second const threw
Identifier 'csInterface' has already been declared
The throw fired before setupEventListeners(), so the Connect button's
click handler was never attached. This is the root cause of the
original "clicking Connect does nothing" symptom; everything else was
secondary. Removed the duplicate declaration; main.js now uses the
binding from CSInterface.js.
- No auth support against AUTH_ENABLED=true servers. mam-api supports
Bearer tokens (POST /api/v1/tokens), so added:
• API token input field (password-masked) next to Server URL
• localStorage persistence on every keystroke
• window.fetch monkey-patch that injects
Authorization: Bearer <token>
on every request whose URL starts with the configured server.
Signed S3 download URLs are NOT touched.
Drive-by fixes that came out of the same debugging pass:
- Server URL input listener was 'change' (fires on blur); switched to
'input' so typing-then-clicking-Connect immediately commits.
- restoreSettings() now strips trailing slashes from the stored URL so
older saved values like 'http://host/' stop producing //api/v1 404s.
- CSS selector `input[type="text"].server-url` didn't match the new
password input → the token field was unstyled and effectively invisible.
Generalized to `input.server-url`; restructured the connection bar into
`.connection-controls--stacked` (flex column) of two `.server-input-row`
rows so two input fields fit cleanly.
- Build scripts now parse ExtensionBundleVersion from both element form
(<ExtensionBundleVersion>X</...>) and attribute form
(ExtensionBundleVersion="X"), since the manifest rewrite switched
schemas.
Version bumped 1.0.0 → 1.0.1. New artifacts committed at
services/premiere-plugin/build/releases/v1.0.1/ (.exe 2 MB, .zxp 35 KB).
v1.0.0 left in place so editors who downloaded it can verify they're on
the broken version.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 19:24:10 -04:00
autocomplete="off"
>
feat: implement advanced features (conform, auto-relink, GUI redesign, docs, tests)
- #30 FCP XML Export & Conform: slide panel UI, preset system, FCP XML generation,
conform job submission with progress polling via BullMQ
- #31 Hi-Res Auto-Relink: clip list with checkboxes, batch-trim server endpoint,
trimWorker with frame-accurate FFmpeg trimming, auto-relink in Premiere via
ExtendScript, temp segment signed URL endpoint
- #32 GUI Redesign: complete rewrite with Wild Dragon OKLCH design tokens
(accent oklch(45% 0.20 266)), slide panels, preset cards, chip components
- #34 Cleanup Task: existing task validated and properly registered
- #35 Testing: comprehensive 33-scenario E2E test plan
- #36 Documentation: advanced features guide with workflows, troubleshooting,
presets table, and architecture overview
- #24 PR merge: verified mergeable
All server endpoints, worker queues, and ExtendScript functions wired together
2026-05-24 13:19:24 -04:00
< button id = "connect-btn" class = "connect-btn btn btn-primary btn-sm" > Connect< / button >
fix(premiere-plugin): v1.0.1 — actually load + connect under CEP 12
End-to-end debugging against a live Premiere Pro 2025 + auth-enabled mam-api
surfaced four real bugs that made v1.0.0 install cleanly but never load,
plus the missing auth flow. All four are fixed and the panel is verified
connected (status dot green, Reconnect button shown, project list populated).
- manifest.xml: a comment in the <Resources> block contained "--" (inside
"--enable-nodejs"/"--mixed-context"), which is illegal per the XML spec.
CEP 12's strict parser logged
ERROR XPATH Double hyphen within comment
and skipped the panel entirely. Comment rewritten without double hyphens.
- manifest.xml: lacked the Version="X.Y" attribute on <ExtensionManifest>
and used a non-standard AbstractionLayers/empty <ExtensionList/>
structure. CEP rejected it with
Unsupported Manifest version ''
Manifest rewritten to the standard CSXS 7.0 schema (ExtensionList +
DispatchInfoList + RequiredRuntimeList), matching the working AMPP
panel template.
- main.js: re-declared `const csInterface = new CSInterface()` at top
level even though CSInterface.js already declared the same binding.
CEP 12 shares script-realm lexical scope across <script> tags, so the
second const threw
Identifier 'csInterface' has already been declared
The throw fired before setupEventListeners(), so the Connect button's
click handler was never attached. This is the root cause of the
original "clicking Connect does nothing" symptom; everything else was
secondary. Removed the duplicate declaration; main.js now uses the
binding from CSInterface.js.
- No auth support against AUTH_ENABLED=true servers. mam-api supports
Bearer tokens (POST /api/v1/tokens), so added:
• API token input field (password-masked) next to Server URL
• localStorage persistence on every keystroke
• window.fetch monkey-patch that injects
Authorization: Bearer <token>
on every request whose URL starts with the configured server.
Signed S3 download URLs are NOT touched.
Drive-by fixes that came out of the same debugging pass:
- Server URL input listener was 'change' (fires on blur); switched to
'input' so typing-then-clicking-Connect immediately commits.
- restoreSettings() now strips trailing slashes from the stored URL so
older saved values like 'http://host/' stop producing //api/v1 404s.
- CSS selector `input[type="text"].server-url` didn't match the new
password input → the token field was unstyled and effectively invisible.
Generalized to `input.server-url`; restructured the connection bar into
`.connection-controls--stacked` (flex column) of two `.server-input-row`
rows so two input fields fit cleanly.
- Build scripts now parse ExtensionBundleVersion from both element form
(<ExtensionBundleVersion>X</...>) and attribute form
(ExtensionBundleVersion="X"), since the manifest rewrite switched
schemas.
Version bumped 1.0.0 → 1.0.1. New artifacts committed at
services/premiere-plugin/build/releases/v1.0.1/ (.exe 2 MB, .zxp 35 KB).
v1.0.0 left in place so editors who downloaded it can verify they're on
the broken version.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 19:24:10 -04:00
< / div >
2026-04-07 22:05:46 -04:00
< / div >
< / div >
2026-05-26 12:39:44 -04:00
<!-- Tab Navigation -->
< div class = "tab-nav" >
< button id = "tab-library" class = "tab-btn active" >
< svg width = "12" height = "12" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor" stroke-width = "2" stroke-linecap = "round" stroke-linejoin = "round" >
< path d = "M4 19.5A2.5 2.5 0 0 1 6.5 17H20" / >
< path d = "M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z" / >
< / svg >
Library
< / button >
< button id = "tab-growing" class = "tab-btn" >
< svg width = "12" height = "12" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor" stroke-width = "2" stroke-linecap = "round" stroke-linejoin = "round" >
< path d = "M23 7l-7 5 7 5V7z" / >
< rect x = "1" y = "5" width = "15" height = "14" rx = "2" ry = "2" / >
< / svg >
Growing
2026-05-26 12:40:47 -04:00
< span id = "growing-count" class = "badge" style = "display:none;" > 0< / span >
2026-05-26 12:39:44 -04:00
< / button >
< / div >
2026-04-07 22:05:46 -04:00
<!-- Search and Filter Area -->
< div class = "search-filter-area" >
< div class = "search-bar" >
< input
type="text"
id="search-input"
class="search-input"
placeholder="Search assets..."
>
< / div >
< div class = "filter-controls" >
< select id = "project-filter" title = "Filter by project" >
< option value = "all" > All Projects< / option >
< / select >
< / div >
< / div >
feat: implement advanced features (conform, auto-relink, GUI redesign, docs, tests)
- #30 FCP XML Export & Conform: slide panel UI, preset system, FCP XML generation,
conform job submission with progress polling via BullMQ
- #31 Hi-Res Auto-Relink: clip list with checkboxes, batch-trim server endpoint,
trimWorker with frame-accurate FFmpeg trimming, auto-relink in Premiere via
ExtendScript, temp segment signed URL endpoint
- #32 GUI Redesign: complete rewrite with Wild Dragon OKLCH design tokens
(accent oklch(45% 0.20 266)), slide panels, preset cards, chip components
- #34 Cleanup Task: existing task validated and properly registered
- #35 Testing: comprehensive 33-scenario E2E test plan
- #36 Documentation: advanced features guide with workflows, troubleshooting,
presets table, and architecture overview
- #24 PR merge: verified mergeable
All server endpoints, worker queues, and ExtendScript functions wired together
2026-05-24 13:19:24 -04:00
<!-- Active Sequence Info Bar -->
2026-05-20 00:38:09 -04:00
< div id = "seq-info-bar" class = "seq-info-bar hidden" >
feat: implement advanced features (conform, auto-relink, GUI redesign, docs, tests)
- #30 FCP XML Export & Conform: slide panel UI, preset system, FCP XML generation,
conform job submission with progress polling via BullMQ
- #31 Hi-Res Auto-Relink: clip list with checkboxes, batch-trim server endpoint,
trimWorker with frame-accurate FFmpeg trimming, auto-relink in Premiere via
ExtendScript, temp segment signed URL endpoint
- #32 GUI Redesign: complete rewrite with Wild Dragon OKLCH design tokens
(accent oklch(45% 0.20 266)), slide panels, preset cards, chip components
- #34 Cleanup Task: existing task validated and properly registered
- #35 Testing: comprehensive 33-scenario E2E test plan
- #36 Documentation: advanced features guide with workflows, troubleshooting,
presets table, and architecture overview
- #24 PR merge: verified mergeable
All server endpoints, worker queues, and ExtendScript functions wired together
2026-05-24 13:19:24 -04:00
< span class = "seq-info-label chip chip--good" > < span class = "chip-dot" > < / span > SEQ< / span >
2026-05-20 00:38:09 -04:00
< span id = "seq-info-name" class = "seq-info-name" > < / span >
feat: implement advanced features (conform, auto-relink, GUI redesign, docs, tests)
- #30 FCP XML Export & Conform: slide panel UI, preset system, FCP XML generation,
conform job submission with progress polling via BullMQ
- #31 Hi-Res Auto-Relink: clip list with checkboxes, batch-trim server endpoint,
trimWorker with frame-accurate FFmpeg trimming, auto-relink in Premiere via
ExtendScript, temp segment signed URL endpoint
- #32 GUI Redesign: complete rewrite with Wild Dragon OKLCH design tokens
(accent oklch(45% 0.20 266)), slide panels, preset cards, chip components
- #34 Cleanup Task: existing task validated and properly registered
- #35 Testing: comprehensive 33-scenario E2E test plan
- #36 Documentation: advanced features guide with workflows, troubleshooting,
presets table, and architecture overview
- #24 PR merge: verified mergeable
All server endpoints, worker queues, and ExtendScript functions wired together
2026-05-24 13:19:24 -04:00
< button id = "seq-refresh-btn" class = "seq-refresh-btn btn btn-ghost btn-sm" title = "Refresh active sequence" > ↻ < / button >
2026-05-20 00:38:09 -04:00
< / div >
2026-04-07 22:05:46 -04:00
<!-- Main Content Area -->
< div class = "content-area" >
2026-05-26 12:39:44 -04:00
<!-- Library Grid -->
< div class = "asset-grid-container" id = "library-container" >
2026-04-07 22:05:46 -04:00
< div id = "asset-grid" class = "asset-grid" >
< div id = "empty-state" class = "empty-state" >
feat: implement advanced features (conform, auto-relink, GUI redesign, docs, tests)
- #30 FCP XML Export & Conform: slide panel UI, preset system, FCP XML generation,
conform job submission with progress polling via BullMQ
- #31 Hi-Res Auto-Relink: clip list with checkboxes, batch-trim server endpoint,
trimWorker with frame-accurate FFmpeg trimming, auto-relink in Premiere via
ExtendScript, temp segment signed URL endpoint
- #32 GUI Redesign: complete rewrite with Wild Dragon OKLCH design tokens
(accent oklch(45% 0.20 266)), slide panels, preset cards, chip components
- #34 Cleanup Task: existing task validated and properly registered
- #35 Testing: comprehensive 33-scenario E2E test plan
- #36 Documentation: advanced features guide with workflows, troubleshooting,
presets table, and architecture overview
- #24 PR merge: verified mergeable
All server endpoints, worker queues, and ExtendScript functions wired together
2026-05-24 13:19:24 -04:00
< div class = "empty-state-icon" >
< svg width = "40" height = "40" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor" stroke-width = "1.5" >
< path d = "M21 12a9 9 0 11-18 0 9 9 0 0118 0z" / >
< path d = "M9 9a3 3 0 116 0m-6 3h6m-3 3h.01" / >
< / svg >
< / div >
< div class = "empty-state-title" > No assets< / div >
< div class = "empty-state-body" > Connect to server and load assets< / div >
2026-04-07 22:05:46 -04:00
< / div >
< / div >
< / div >
2026-05-26 12:39:44 -04:00
<!-- Growing Grid -->
< div class = "asset-grid-container hidden" id = "growing-container" >
< div id = "growing-grid" class = "asset-grid" >
< div id = "growing-empty-state" class = "empty-state" >
< div class = "empty-state-icon" >
< svg width = "40" height = "40" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor" stroke-width = "1.5" >
< rect x = "2" y = "2" width = "20" height = "20" rx = "2.18" ry = "2.18" / >
< line x1 = "7" y1 = "2" x2 = "7" y2 = "22" / >
< line x1 = "17" y1 = "2" x2 = "17" y2 = "22" / >
< line x1 = "2" y1 = "12" x2 = "22" y2 = "12" / >
< line x1 = "2" y1 = "7" x2 = "7" y2 = "7" / >
< line x1 = "2" y1 = "17" x2 = "7" y2 = "17" / >
< line x1 = "17" y1 = "17" x2 = "22" y2 = "17" / >
< line x1 = "17" y1 = "7" x2 = "22" y2 = "7" / >
< / svg >
< / div >
< div class = "empty-state-title" > No growing files< / div >
< div class = "empty-state-body" > Active recordings will appear here< / div >
< / div >
< / div >
< / div >
2026-04-07 22:05:46 -04:00
<!-- Details Panel -->
< div id = "details-panel" class = "details-panel hidden" >
feat: implement advanced features (conform, auto-relink, GUI redesign, docs, tests)
- #30 FCP XML Export & Conform: slide panel UI, preset system, FCP XML generation,
conform job submission with progress polling via BullMQ
- #31 Hi-Res Auto-Relink: clip list with checkboxes, batch-trim server endpoint,
trimWorker with frame-accurate FFmpeg trimming, auto-relink in Premiere via
ExtendScript, temp segment signed URL endpoint
- #32 GUI Redesign: complete rewrite with Wild Dragon OKLCH design tokens
(accent oklch(45% 0.20 266)), slide panels, preset cards, chip components
- #34 Cleanup Task: existing task validated and properly registered
- #35 Testing: comprehensive 33-scenario E2E test plan
- #36 Documentation: advanced features guide with workflows, troubleshooting,
presets table, and architecture overview
- #24 PR merge: verified mergeable
All server endpoints, worker queues, and ExtendScript functions wired together
2026-05-24 13:19:24 -04:00
< div class = "details-header" >
< span class = "details-header-label" > Asset Info< / span >
< / div >
2026-04-07 22:05:46 -04:00
< div class = "details-section" >
< div class = "details-label" > Filename< / div >
< div id = "details-filename" class = "details-value truncate-lines-2" > < / div >
< / div >
< div class = "divider" > < / div >
< div class = "details-section" >
< div class = "details-label" > Codec< / div >
< div id = "details-codec" class = "details-value" > < / div >
< / div >
< div class = "details-section" >
< div class = "details-label" > Resolution< / div >
< div id = "details-resolution" class = "details-value" > < / div >
< / div >
< div class = "details-section" >
< div class = "details-label" > Frame Rate< / div >
< div id = "details-fps" class = "details-value" > < / div >
< / div >
< div class = "details-section" >
< div class = "details-label" > Duration< / div >
< div id = "details-duration" class = "details-value" > < / div >
< / div >
< div class = "details-section" >
< div class = "details-label" > File Size< / div >
< div id = "details-size" class = "details-value" > < / div >
< / div >
< div class = "divider" > < / div >
< div class = "details-section" >
< div class = "details-label" > Tags< / div >
< div id = "details-tags" class = "tags-list" > < / div >
< / div >
< / div >
< / div >
<!-- Progress Indicator -->
< div id = "progress-container" class = "progress-container" >
< div class = "progress-label" id = "progress-label" > Downloading...< / div >
< div class = "progress-bar" >
< div id = "progress-fill" class = "progress-fill" > < / div >
< / div >
< / div >
feat: implement advanced features (conform, auto-relink, GUI redesign, docs, tests)
- #30 FCP XML Export & Conform: slide panel UI, preset system, FCP XML generation,
conform job submission with progress polling via BullMQ
- #31 Hi-Res Auto-Relink: clip list with checkboxes, batch-trim server endpoint,
trimWorker with frame-accurate FFmpeg trimming, auto-relink in Premiere via
ExtendScript, temp segment signed URL endpoint
- #32 GUI Redesign: complete rewrite with Wild Dragon OKLCH design tokens
(accent oklch(45% 0.20 266)), slide panels, preset cards, chip components
- #34 Cleanup Task: existing task validated and properly registered
- #35 Testing: comprehensive 33-scenario E2E test plan
- #36 Documentation: advanced features guide with workflows, troubleshooting,
presets table, and architecture overview
- #24 PR merge: verified mergeable
All server endpoints, worker queues, and ExtendScript functions wired together
2026-05-24 13:19:24 -04:00
<!-- Export Panel - - Push Timeline to MAM -->
2026-05-20 00:38:09 -04:00
< div id = "export-panel" class = "export-panel hidden" >
< div class = "export-panel-title" > Push Timeline to MAM< / div >
< input
type="text"
id="export-seq-name"
feat: implement advanced features (conform, auto-relink, GUI redesign, docs, tests)
- #30 FCP XML Export & Conform: slide panel UI, preset system, FCP XML generation,
conform job submission with progress polling via BullMQ
- #31 Hi-Res Auto-Relink: clip list with checkboxes, batch-trim server endpoint,
trimWorker with frame-accurate FFmpeg trimming, auto-relink in Premiere via
ExtendScript, temp segment signed URL endpoint
- #32 GUI Redesign: complete rewrite with Wild Dragon OKLCH design tokens
(accent oklch(45% 0.20 266)), slide panels, preset cards, chip components
- #34 Cleanup Task: existing task validated and properly registered
- #35 Testing: comprehensive 33-scenario E2E test plan
- #36 Documentation: advanced features guide with workflows, troubleshooting,
presets table, and architecture overview
- #24 PR merge: verified mergeable
All server endpoints, worker queues, and ExtendScript functions wired together
2026-05-24 13:19:24 -04:00
class="input"
2026-05-20 00:38:09 -04:00
placeholder="Sequence name"
title="Name this sequence will have in the MAM"
>
< select id = "export-proj-select" title = "Target project in MAM" >
< option value = "" > — Select project —< / option >
< / select >
< div id = "export-clip-info" class = "export-clip-info" > < / div >
< div class = "export-panel-actions" >
feat: implement advanced features (conform, auto-relink, GUI redesign, docs, tests)
- #30 FCP XML Export & Conform: slide panel UI, preset system, FCP XML generation,
conform job submission with progress polling via BullMQ
- #31 Hi-Res Auto-Relink: clip list with checkboxes, batch-trim server endpoint,
trimWorker with frame-accurate FFmpeg trimming, auto-relink in Premiere via
ExtendScript, temp segment signed URL endpoint
- #32 GUI Redesign: complete rewrite with Wild Dragon OKLCH design tokens
(accent oklch(45% 0.20 266)), slide panels, preset cards, chip components
- #34 Cleanup Task: existing task validated and properly registered
- #35 Testing: comprehensive 33-scenario E2E test plan
- #36 Documentation: advanced features guide with workflows, troubleshooting,
presets table, and architecture overview
- #24 PR merge: verified mergeable
All server endpoints, worker queues, and ExtendScript functions wired together
2026-05-24 13:19:24 -04:00
< button id = "export-confirm-btn" class = "btn btn-primary" > Push to MAM< / button >
< button id = "export-cancel-btn" class = "btn btn-secondary" > Cancel< / button >
< / div >
< / div >
<!-- Advanced Section: FCP XML Export & Hi - Res Auto - Relink -->
< div class = "advanced-section" >
< div class = "advanced-section-title" > Advanced< / div >
< div class = "advanced-row" >
< button id = "export-conform-btn" class = "btn btn-primary btn-sm" disabled title = "Export timeline as FCP XML and start conform job" >
< svg width = "12" height = "12" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor" stroke-width = "2" stroke-linecap = "round" stroke-linejoin = "round" >
< path d = "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" / >
< polyline points = "7 10 12 15 17 10" / >
< line x1 = "12" y1 = "15" x2 = "12" y2 = "3" / >
< / svg >
Export & Conform
< / button >
< button id = "fetch-relink-btn" class = "btn btn-secondary btn-sm" disabled title = "Fetch hi-res media for all timeline clips and auto-relink" >
< svg width = "12" height = "12" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor" stroke-width = "2" stroke-linecap = "round" stroke-linejoin = "round" >
< circle cx = "11" cy = "11" r = "8" / >
< line x1 = "21" y1 = "21" x2 = "16.65" y2 = "16.65" / >
< / svg >
Fetch & Relink All
< / button >
2026-05-20 00:38:09 -04:00
< / div >
< / div >
2026-04-07 22:05:46 -04:00
<!-- Action Bar -->
< div class = "action-bar" >
2026-05-20 00:38:09 -04:00
< div class = "action-row" >
feat: implement advanced features (conform, auto-relink, GUI redesign, docs, tests)
- #30 FCP XML Export & Conform: slide panel UI, preset system, FCP XML generation,
conform job submission with progress polling via BullMQ
- #31 Hi-Res Auto-Relink: clip list with checkboxes, batch-trim server endpoint,
trimWorker with frame-accurate FFmpeg trimming, auto-relink in Premiere via
ExtendScript, temp segment signed URL endpoint
- #32 GUI Redesign: complete rewrite with Wild Dragon OKLCH design tokens
(accent oklch(45% 0.20 266)), slide panels, preset cards, chip components
- #34 Cleanup Task: existing task validated and properly registered
- #35 Testing: comprehensive 33-scenario E2E test plan
- #36 Documentation: advanced features guide with workflows, troubleshooting,
presets table, and architecture overview
- #24 PR merge: verified mergeable
All server endpoints, worker queues, and ExtendScript functions wired together
2026-05-24 13:19:24 -04:00
< button id = "import-btn" class = "btn btn-primary" disabled title = "Download proxy and import into Premiere" > Import Proxy< / button >
< button id = "import-hires-btn" class = "btn btn-secondary" disabled title = "Download original hi-res and import into Premiere" > Hi-Res< / button >
2026-05-20 00:38:09 -04:00
< / div >
feat: live HLS preview, proxy worker fixes, Settings tabs, growing-files + Premier panel
- worker/proxy: scale-to-even filter, analyzeduration 100M, skip images, hasAudio
- worker/promotion: SMB landing zone -> S3 on idle, queues proxy job, status='ready'
- web-ui screens-ingest: HlsPreview component replaces fake LiveStrip/FauxFrame
- web-ui screens-admin: functional Settings tabs (S3, GPU, Growing, SDI, AMPP)
- mam-api /settings/growing: GET/PUT growing-files config
- mam-api /assets/:id/live-path: SMB UNC/POSIX path for live growing assets
- capture-manager: GROWING_ENABLED -> write hires to /growing instead of S3 stream
- recorders.js: pass GROWING_ENABLED to capture container, bind /growing mount
- docker-compose: mount /mnt/NVME/MAM/wild-dragon-growing on mam-api + worker
- premiere-plugin: Mount Live button, Relink-to-HiRes, live->ready status poll
2026-05-22 19:12:53 -04:00
< div class = "action-row" >
feat: implement advanced features (conform, auto-relink, GUI redesign, docs, tests)
- #30 FCP XML Export & Conform: slide panel UI, preset system, FCP XML generation,
conform job submission with progress polling via BullMQ
- #31 Hi-Res Auto-Relink: clip list with checkboxes, batch-trim server endpoint,
trimWorker with frame-accurate FFmpeg trimming, auto-relink in Premiere via
ExtendScript, temp segment signed URL endpoint
- #32 GUI Redesign: complete rewrite with Wild Dragon OKLCH design tokens
(accent oklch(45% 0.20 266)), slide panels, preset cards, chip components
- #34 Cleanup Task: existing task validated and properly registered
- #35 Testing: comprehensive 33-scenario E2E test plan
- #36 Documentation: advanced features guide with workflows, troubleshooting,
presets table, and architecture overview
- #24 PR merge: verified mergeable
All server endpoints, worker queues, and ExtendScript functions wired together
2026-05-24 13:19:24 -04:00
< button id = "mount-live-btn" class = "btn btn-secondary" disabled title = "Open the live file directly from the SMB share" > Mount Live< / button >
< button id = "relink-btn" class = "btn btn-secondary" disabled title = "Relink the imported clip from proxy to the finalized hi-res original" > Relink to Hi-Res< / button >
feat: live HLS preview, proxy worker fixes, Settings tabs, growing-files + Premier panel
- worker/proxy: scale-to-even filter, analyzeduration 100M, skip images, hasAudio
- worker/promotion: SMB landing zone -> S3 on idle, queues proxy job, status='ready'
- web-ui screens-ingest: HlsPreview component replaces fake LiveStrip/FauxFrame
- web-ui screens-admin: functional Settings tabs (S3, GPU, Growing, SDI, AMPP)
- mam-api /settings/growing: GET/PUT growing-files config
- mam-api /assets/:id/live-path: SMB UNC/POSIX path for live growing assets
- capture-manager: GROWING_ENABLED -> write hires to /growing instead of S3 stream
- recorders.js: pass GROWING_ENABLED to capture container, bind /growing mount
- docker-compose: mount /mnt/NVME/MAM/wild-dragon-growing on mam-api + worker
- premiere-plugin: Mount Live button, Relink-to-HiRes, live->ready status poll
2026-05-22 19:12:53 -04:00
< / div >
2026-05-20 00:38:09 -04:00
< div class = "action-row" >
feat: implement advanced features (conform, auto-relink, GUI redesign, docs, tests)
- #30 FCP XML Export & Conform: slide panel UI, preset system, FCP XML generation,
conform job submission with progress polling via BullMQ
- #31 Hi-Res Auto-Relink: clip list with checkboxes, batch-trim server endpoint,
trimWorker with frame-accurate FFmpeg trimming, auto-relink in Premiere via
ExtendScript, temp segment signed URL endpoint
- #32 GUI Redesign: complete rewrite with Wild Dragon OKLCH design tokens
(accent oklch(45% 0.20 266)), slide panels, preset cards, chip components
- #34 Cleanup Task: existing task validated and properly registered
- #35 Testing: comprehensive 33-scenario E2E test plan
- #36 Documentation: advanced features guide with workflows, troubleshooting,
presets table, and architecture overview
- #24 PR merge: verified mergeable
All server endpoints, worker queues, and ExtendScript functions wired together
2026-05-24 13:19:24 -04:00
< button id = "import-all-btn" class = "btn btn-secondary" title = "Import all visible assets as proxy" > Import All< / button >
< button id = "export-timeline-btn" class = "btn btn-secondary" title = "Push the current Premiere sequence to MAM" > Export Timeline ↑ < / button >
< / div >
< / div >
< / div >
<!-- FCP XML Export & Conform Slide Panel -->
< div id = "export-conform-overlay" class = "slide-overlay" > < / div >
< div id = "export-conform-panel" class = "slide-panel" >
< div class = "slide-panel-header" >
< span class = "slide-panel-title" > Export & Conform< / span >
< button id = "export-conform-close-btn" class = "btn btn-ghost btn-sm" title = "Close" >
< svg width = "14" height = "14" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor" stroke-width = "2" stroke-linecap = "round" stroke-linejoin = "round" >
< line x1 = "18" y1 = "6" x2 = "6" y2 = "18" / >
< line x1 = "6" y1 = "6" x2 = "18" y2 = "18" / >
< / svg >
< / button >
< / div >
< div class = "slide-panel-body" >
<!-- Preset Selection -->
< div class = "form-group" >
< span class = "form-label" > Preset< / span >
< div id = "preset-cards" class = "preset-grid" >
< div class = "preset-card selected" data-preset = "broadcast" >
< div class = "preset-card-title" > Broadcast< / div >
< div class = "preset-card-desc" > ProRes 422 HQ, 1920x1080, 48kHz< / div >
< / div >
< div class = "preset-card" data-preset = "web" >
< div class = "preset-card-title" > Web< / div >
< div class = "preset-card-desc" > H.264, 1920x1080, AAC 320kbps< / div >
< / div >
< div class = "preset-card" data-preset = "archive" >
< div class = "preset-card-title" > Archive< / div >
< div class = "preset-card-desc" > ProRes 4444, UHD, 48kHz< / div >
< / div >
< div class = "preset-card" data-preset = "custom" >
< div class = "preset-card-title" > Custom< / div >
< div class = "preset-card-desc" > Manual settings< / div >
< / div >
< / div >
< / div >
<!-- Codec -->
< div class = "form-group" >
< span class = "form-label" > Codec< / span >
< select id = "conform-codec" >
< option value = "prores_hq" > ProRes 422 HQ< / option >
< option value = "prores_4444" > ProRes 4444< / option >
< option value = "h264" > H.264< / option >
< option value = "h265" > H.265 / HEVC< / option >
< option value = "dnxhr_hq" > DNxHR HQ< / option >
< / select >
< / div >
<!-- Quality -->
< div class = "form-group" >
< span class = "form-label" > Quality< / span >
< select id = "conform-quality" >
< option value = "high" > High< / option >
< option value = "medium" selected > Medium< / option >
< option value = "low" > Low< / option >
< option value = "custom" > Custom< / option >
< / select >
< / div >
<!-- Resolution -->
< div class = "form-group" >
< span class = "form-label" > Resolution< / span >
< select id = "conform-resolution" >
< option value = "uhd" > UHD (3840x2160)< / option >
< option value = "1080p" selected > Full HD (1920x1080)< / option >
< option value = "720p" > HD (1280x720)< / option >
< option value = "source" > Source< / option >
< / select >
< / div >
<!-- Audio Preset -->
< div class = "form-group" >
< span class = "form-label" > Audio Preset< / span >
< select id = "conform-audio" >
< option value = "broadcast" > Broadcast (48kHz, 24-bit, PCM)< / option >
< option value = "web" > Web (44.1kHz, AAC 320kbps)< / option >
< option value = "archive" > Archive (96kHz, 24-bit, PCM)< / option >
< option value = "custom" > Custom< / option >
< / select >
< / div >
<!-- Timeline Clip Summary -->
< div class = "form-group" >
< span class = "form-label" > Timeline Clips< / span >
< div id = "conform-clip-info" class = "export-clip-info" > < / div >
< / div >
< / div >
< div class = "slide-panel-footer" >
< button id = "export-conform-cancel-btn" class = "btn btn-secondary" > Cancel< / button >
< button id = "export-conform-start-btn" class = "btn btn-primary" > Start Conform< / button >
< / div >
< / div >
<!-- Hi - Res Relink Slide Panel -->
< div id = "relink-overlay" class = "slide-overlay" > < / div >
< div id = "relink-panel" class = "slide-panel" >
< div class = "slide-panel-header" >
< span class = "slide-panel-title" > Fetch & Relink Hi-Res< / span >
< button id = "relink-close-btn" class = "btn btn-ghost btn-sm" title = "Close" >
< svg width = "14" height = "14" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor" stroke-width = "2" stroke-linecap = "round" stroke-linejoin = "round" >
< line x1 = "18" y1 = "6" x2 = "6" y2 = "18" / >
< line x1 = "6" y1 = "6" x2 = "18" y2 = "18" / >
< / svg >
< / button >
< / div >
< div class = "slide-panel-body" >
< div class = "form-group" >
< span class = "form-label" > Select clips to relink< / span >
< span class = "form-hint" > Clips matched to MAM assets will be listed below. Check the ones you want to upgrade to hi-res.< / span >
2026-05-20 00:38:09 -04:00
< / div >
feat: implement advanced features (conform, auto-relink, GUI redesign, docs, tests)
- #30 FCP XML Export & Conform: slide panel UI, preset system, FCP XML generation,
conform job submission with progress polling via BullMQ
- #31 Hi-Res Auto-Relink: clip list with checkboxes, batch-trim server endpoint,
trimWorker with frame-accurate FFmpeg trimming, auto-relink in Premiere via
ExtendScript, temp segment signed URL endpoint
- #32 GUI Redesign: complete rewrite with Wild Dragon OKLCH design tokens
(accent oklch(45% 0.20 266)), slide panels, preset cards, chip components
- #34 Cleanup Task: existing task validated and properly registered
- #35 Testing: comprehensive 33-scenario E2E test plan
- #36 Documentation: advanced features guide with workflows, troubleshooting,
presets table, and architecture overview
- #24 PR merge: verified mergeable
All server endpoints, worker queues, and ExtendScript functions wired together
2026-05-24 13:19:24 -04:00
< div id = "clip-list-container" class = "clip-list-container" >
< div id = "clip-list" class = "clip-list" >
<!-- populated by JS -->
< / div >
< / div >
< div id = "relink-summary" class = "relink-summary hidden" >
< div class = "relink-summary-icon" >
< svg width = "20" height = "20" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor" stroke-width = "2" stroke-linecap = "round" stroke-linejoin = "round" >
< path d = "M22 11.08V12a10 10 0 1 1-5.93-9.14" / >
< polyline points = "22 4 12 14.01 9 11.01" / >
< / svg >
< / div >
< div class = "relink-summary-text" id = "relink-summary-text" > < / div >
< div class = "relink-summary-detail" id = "relink-summary-detail" > < / div >
< / div >
< / div >
< div class = "slide-panel-footer" >
< button id = "relink-cancel-btn" class = "btn btn-secondary" > Cancel< / button >
< button id = "relink-start-btn" class = "btn btn-primary" disabled > Start Relink< / button >
2026-04-07 22:05:46 -04:00
< / div >
< / div >
<!-- Adobe CSInterface Library -->
< script src = "js/CSInterface.js" > < / script >
<!-- Main Panel Script -->
< script src = "js/main.js" > < / script >
< / body >
< / html >