dragonflight/services/premiere-plugin-uxp/README.md
Claude 91e4691230 feat(premiere-plugin-uxp): v2.0.0 — UXP port replacing CEP for import
CEP `csInterface.evalScript` callback is broken in Premiere Pro 26.0.x —
nothing called from the panel ever returns, so importFiles deadlocks. Adobe's
path forward is UXP. This is the minimum viable port that restores the
Import Proxy / Import Hi-Res workflow.

Scope (v2.0.0):
- Connect to a Dragonflight server (URL + Bearer token; persisted)
- Asset library (search, refresh, grid with thumbnails)
- Import Proxy via streamed download → Project.importFiles
- Import Hi-Res via presigned S3 URL → Project.importFiles

Layout:
  manifest.json     UXP v5, host=premierepro, minVersion=26.0.0
  index.html        Panel shell
  styles.css        Mirrors web UI dark tokens
  src/ui.js         DOM helpers, toast, progress, formatting
  src/api.js        HTTP client (Bearer; manual redirect-follow drops auth
                    when hopping to a different host per UXP security policy)
  src/library.js    Asset grid render + selection
  src/import-flow.js  Streaming download (fs.createWriteStream) +
                      premierepro.Project.importFiles into rootBin
  src/main.js       Bootstrap, event wiring
  build/pack.mjs    Packs into .ccx; installs via UnifiedPluginInstallerAgent

Coexists with services/premiere-plugin/ (CEP) — keeps the CEP panel for any
features that still work there while running v2.0.0 for import. Future v2.x
will add live preview, conform, timeline export, settings.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 00:19:28 -04:00

89 lines
3.4 KiB
Markdown

# Dragonflight MAM — Premiere Pro UXP panel (v2.0.0)
The successor to the CEP panel at `services/premiere-plugin/`.
**Why this exists:** Premiere Pro 26.0.x broke `csInterface.evalScript`'s
return-value callback — it no longer fires. That deadlocks any CEP panel
that needs to call back into Premiere (importFiles, sequence access, etc).
Adobe's path forward is UXP; this panel is the minimum viable port that
restores the Import Proxy / Import Hi-Res workflow.
## Scope (v2.0.0)
In:
- Connect to a Dragonflight server (URL + Bearer token, persisted in localStorage)
- Browse the asset library (search, refresh, grid with thumbnails)
- **Import Proxy** — downloads the proxy MP4 and adds it to the active project
- **Import Hi-Res** — downloads the original from S3 (presigned URL) and imports
Out (carried over from the CEP panel later, as v2.x):
- Mount Live (SMB live preview)
- Conform / Auto-Relink / Batch Trim
- Timeline export
- Settings tabs (Account, Tokens, S3) — use the web UI for now
## Project layout
```
manifest.json UXP manifest v5 (host=premierepro, minVersion=26.0.0)
index.html Panel shell (vanilla HTML)
styles.css Mirrors the web UI's dark design tokens
src/
ui.js DOM helpers, toast, progress, formatting
api.js Dragonflight HTTP client (Bearer auth, redirect handling)
library.js Asset grid render + selection
import-flow.js Download (streamed) + Premiere importFiles
main.js Bootstrap, event wiring
icons/ DarkIcon.png + LightIcon.png (23x23, optional)
build/pack.mjs Pack into .ccx for install
```
## Build
Requires Node 18+.
```bash
cd services/premiere-plugin-uxp
node build/pack.mjs
# → build/dist/dragonflight-mam-2.0.0.ccx
```
(Uses system `zip`. On Windows hosts use Compress-Archive — error message
shows the exact command.)
## Install on Windows
Prerequisite: **Premiere Pro Preferences > Plugins > Enable developer mode**
must be toggled on (one-time, per machine). This is required for any UXP
plugin not distributed via Creative Cloud Marketplace.
```powershell
& "C:\Program Files\Common Files\Adobe\Adobe Desktop Common\RemoteComponents\UPI\UnifiedPluginInstallerAgent\UnifiedPluginInstallerAgent.exe" /install "C:\path\to\dragonflight-mam-2.0.0.ccx"
```
That writes to `%APPDATA%\Adobe\UXP\Plugins\External\net.wilddragon.dragonflight.uxp\` and registers the plugin with UPIA.
To uninstall:
```powershell
& "...\UnifiedPluginInstallerAgent.exe" /remove net.wilddragon.dragonflight.uxp
```
Open the panel in Premiere via **Window > Extensions > Dragonflight MAM**.
## Development loop (Adobe UXP Developer Tool)
For iterative dev without rebuilding+reinstalling:
1. Install **Adobe UXP Developer Tool** ("UDT") from Creative Cloud.
2. UDT → Add Plugin → point at this folder.
3. Load → opens the panel in Premiere with hot-reload.
## Known limits
- Adobe strips `Authorization` headers on cross-origin redirects. `import-flow.js`
uses `redirect: 'manual'` and drops the Bearer when hopping to a different
host (e.g. when the server 302s us to the S3 endpoint).
- `Project.importFiles()` returns a `boolean`, not the new `ProjectItem`. To
locate the imported item, `Import.locateImported(project, filename)` does a
rootItem.getItems() diff after import.
- UXP's `os.tmpdir()` resolves to Windows `%TEMP%` which is cleared by Disk
Cleanup. For long-lived downloads, persist explicitly elsewhere.