Files
jhonny-editor/bm/premiere-pro-mcp-main/docs/third-wave-uxp-workflows.md
T
João Henrique b541f502ba feat: initial commit - Jhonny Editor
- Adicionado estrutura completa do projeto
- Configurado MCP server para Premiere Pro
- Adicionado documentação e skills
- Configurado Gitignore para o projeto
2026-09-08 09:59:31 -04:00

298 lines
18 KiB
Markdown
Executable File

# Third-wave stable Premiere UXP workflows
- **Implementation baseline:** `@adobe/premierepro@26.3.0`
- **Prerelease policy:** APIs found only in 26.5 beta declarations remain excluded
- **Host policy:** capability probes from the connected Premiere process are authoritative
- **Evidence:** automated contracts are separate from real Premiere host verification
## PR 1 — Bounded host-event journal
`inspect_premiere_events_uxp` lists or briefly waits for redacted event receipts from
Adobe's documented `EventManager` surface. Project and sequence events continue to
invalidate the compact state snapshot. Encoder progress and operation-completion
events enter a separate 512-entry journal so noisy progress does not force a complete
project snapshot on every callback.
The journal provides monotonic revisions, category/name filters, a 256-result response
cap, a 60-second maximum wait, consecutive progress coalescing, and explicit overflow
signaling. Raw Adobe event objects never cross the bridge; only allowlisted scalar
state and progress fields can appear in a receipt.
On a compatible 26.3+ host, the documented root `SnapEvent` constants also register
six passive `timeline.snap.*` notifications: keyframe, track-item, guide, razor-to-
playhead, razor-to-marker, and playhead-to-track-item-edge. The panel registers only
non-empty documented constants it can probe, does not invalidate project state for
those notifications, and records the same bounded redacted receipt shape. It does
not infer that every host emits each notification or expose the native event object.
The same journal additionally registers the two stable root `OperationCompleteEvent`
notifications that are not already covered by the import/export/effect-drop completion
receipts: `operation.clip.extend.reached` and coalesced `operation.effect.drag.over`.
They remain passive bounded notifications, not success or completion attestations, and
the host payload is subject to the same scalar-only redaction.
Automated tests cover overflow, progress coalescing, filtering, timeouts, shutdown,
capability discovery, the exact SnapEvent and operation-boundary mappings and redaction, and the public MCP
schema. They do not establish that a real Premiere build emits every declared event.
Windows and macOS host runs must record the exact event names and payload shapes
before downstream workflows treat them as completion evidence.
## PR 2 — AME terminal receipts
`encode_media_uxp` now returns a bounded local job receipt when it submits a sequence,
project item, or file encode. Its `jobs` and `wait` actions expose queue, progress,
complete, error, and cancellation events without claiming that the requested file
exists or has the expected checksum.
Adobe's stable declarations expose encoder event names but no durable event-to-job
identifier. The bridge therefore attributes an event only when exactly one tracked
encode is non-terminal. With multiple active jobs the receipt is explicitly
unattributed and no job moves to a terminal state. An `operation_id` becomes the
preferred local job ID; otherwise the panel generates a session-local ID.
The existing delivery verifier remains the authority for output existence, size,
format, and checksum after an attributed terminal event. Live-host validation must
exercise overlapping AME and in-app queue jobs before event attribution can be
described as more than conservative single-job correlation.
## PR 3 — Host readiness gates
`wait_for_host_readiness_uxp` separates three phases that callers previously had to
approximate with polling:
- `snapshot` captures the current event revision and sequence analysis state before
a host operation is dispatched;
- `analysis` performs bounded, adaptive readback through
`Sequence.isDoneAnalyzingForVideoEffects()` with a stale-sequence guard; and
- `operation` waits after the captured revision for one import, export, effect-drop,
or generative-extend completion receipt.
Operation receipts report Adobe's success, cancellation, failure, or unknown state,
but remain event evidence rather than proof that the intended target changed. A wait
timeout returns a pending result and never retries the original operation. Analysis
waits cap at 60 seconds and back off from a minimum 100 ms interval to a maximum
configured interval.
## PR 4 — Safe multi-project sessions and branch copies
`manage_project_sessions_uxp` targets open projects by documented GUID instead of
assuming that the active Project view is the intended project. Listing is capped at
64 views, deduplicates projects, and redacts paths unless the caller explicitly asks
for them. Create, open, Save As, and branch destinations must pass the approved UXP
workspace's canonical-path check.
Every external write requires explicit confirmation. Existing Premiere project
destinations require a separate overwrite confirmation. Because Adobe documents that
`Project.saveAs()` retargets the current project handle, `branch_copies` saves one
copy at a time, verifies the new path, closes that saved view, and reopens the source
before continuing. Closing defaults to a confirmed save; discarding changes requires
an additional confirmation and is never inferred from a missing option.
Automated contracts cover path redaction, GUID targeting, confirmation gates, and
path readback. They do not replace Windows and macOS host tests for dialog behavior,
dirty-project prompts, Productions projects, or concurrent Project views.
## PR 5 — Lease-based growing-media control
`manage_growing_media_uxp` wraps `Project.pauseGrowing()` in an explicit pause lease
rather than exposing an indefinite toggle. A pause requires confirmation, defaults
to 60 seconds, and cannot exceed ten minutes. The panel records only the project GUID
and expiration time, schedules an automatic resume, and also attempts a resume when
the bridge disconnects or the panel is destroyed.
A small persistent recovery marker lets the next panel startup retry a resume after
an abnormal process exit. The marker is cleared only after Premiere returns success.
Adobe exposes no getter for the growing-media pause state, so status is clearly
labeled panel-local and both pause and resume stop at the host-return boundary. Real
host validation must still exercise growing files, crash recovery, project switching,
and both operating systems before this can be treated as state readback.
## PR 6 — Transactional workflow checkpoints
`manage_workflow_checkpoints_uxp` stores bounded scalar state on a targeted project
or sequence through Adobe's `Properties` API. Callers use an unprefixed 96-character
token; the panel owns the `premiereMcp.` namespace. Values are typed as string,
32-bit integer, finite float, or boolean, and strings are capped at 8 KiB.
Set and clear actions are created under `Project.lockedAccess()`, committed in one
`executeTransaction()`, and checked through typed value or absence readback. A stale
owner GUID guard prevents an active-sequence change from redirecting the write.
Session persistence is the default. Persistent properties may be shared with cloud
projects, so the public contract explicitly forbids secrets, native paths,
transcripts, and media names. Automated contracts do not prove cloud sync behavior
or cross-version property retention in a real Premiere host.
## PR 7 — Bounded media-health maintenance
`maintain_media_health_uxp` inspects 1-64 selected or explicitly identified media
items for offline, relink, proxy, merged-clip, and multicam capabilities. Media,
proxy, and originating-project paths remain absent unless the caller explicitly asks
for them. Project traversal is capped at 10,000 items and path-match results at 512.
`include_media_timing` is also opt-in and defaults to false. It reads source start
and duration only when `getMedia()` is available, accepts finite non-negative
TickTime seconds through the existing 86,400,000-second bound, and identifies the
stable `start`/`duration` property accessors used. This stays within the 26.3
declaration baseline. The beta-only callable `getStart()`/`getDuration()` APIs remain
excluded from production until Adobe ships them in a stable release and they pass the
licensed-host validation gate. Awaiting the stable properties also tolerates the beta
deprecated Promise<TickTime> shape; that declaration-drift compatibility is not a
beta-host support claim. Automated mocks do not prove licensed-host support.
Refresh calls run serially and return per-item acceptance plus offline-state
readback, so a partial batch is visible instead of being reported atomically. Setting
media offline requires confirmation, preflights every expected state, groups Adobe's
actions into one transaction, and verifies every item is offline afterward. The
documented API has no corresponding set-online action; relink remains a separate,
workspace-gated workflow. Automated contracts do not prove filesystem availability
or proxy health in a real host.
## PR 8 — Caption-aware track mute state
`manage_track_state_uxp` inspects audio, video, and caption tracks and can set mute
state for up to 64 tracks of one media type. It resolves an explicit sequence GUID,
checks an expected sequence and expected mute state before the first call, then uses
Adobe's direct `setMute()` promises serially and reads back every track. Partial
acceptance is returned per track; no transaction or undo boundary is claimed.
The panel also binds documented audio/video track change, info, and lock events on
the active sequence, rebinding after project or sequence lifecycle events. Receipts
contain only media type and track index. Adobe's `EventManager` target contract does
not include caption tracks, so caption event coverage is not claimed. Real-host tests
must validate rebind races, track deletion, and mute behavior on Windows and macOS.
## PR 9 — Transactional source trim and framing
`manage_source_clip_uxp` inspects and updates source-media in/out points for up to 64
explicit project-item IDs. Every current and expected time is read before mutation;
all Adobe actions are then created under `Project.lockedAccess()` and committed in one
named transaction. Requested in/out values are checked to microsecond tolerance after
the commit, and duplicate project-item IDs are rejected to avoid conflicting actions.
Adobe exposes only a set-true action for scale-to-frame and no getter for either that
setting or an unambiguous cleared-in/out sentinel. Those requests are returned as
`committed_unverified` even though the transaction committed; ordinary in/out sets
can return `verified` after exact readback. This workflow does not duplicate the
existing color-conformance surface. Real-host testing remains required for mixed
audio/video media and source-monitor behavior.
## PR 10 — Hybrid acceleration benchmark gate
The production panel still has no native-addon permission or binary. A deterministic
developer-only harness compares a pure JavaScript weighted-energy workload with an
optional SDK-built addon adapter, checks identical output, and records p50, p95, and
diagnostic heap snapshots. A separate verifier requires same-commit Release evidence
for Windows x64, macOS x64, and macOS arm64; both percentiles must improve by at least
30%, macOS binaries must be signed and notarized, and peak working-set regression may
not exceed 10%.
See [the benchmark and promotion procedure](uxp-hybrid-benchmark.md). No result from
one development machine can alter the production manifest or justify a native
performance claim.
## PR 11 — Guarded sequence range updates
`manage_sequence_range_uxp` inspects or updates the active sequence's in point,
out point, and zero point through Adobe's documented `Sequence` accessors and
action factories. An update requires the exact sequence GUID and a complete
in/out/zero-point/end snapshot returned by a prior inspection. The panel rejects a
changed sequence or range before creating an action, requires the final range to
satisfy `in <= out <= end`, and bounds all public times to 24 hours.
Requested actions are created synchronously inside `Project.lockedAccess()` and
added to one `Project.executeTransaction()` group. The panel then re-reads every
range field and reports `verified` only when the requested values match within a
microsecond tolerance. The action is idempotent within the panel's existing
operation-ID replay window; a failed UXP operation is never retried through CEP.
The workflow is an action/readback contract, not proof of Premiere's visible
timecode display, export-range behavior, persistence after reopening, or Undo on
a licensed host. Real-host validation must exercise one-field and all-field
updates, stale snapshots, a range at the sequence end, and Undo on Windows and
macOS.
## PR 12 — Guarded sequence playhead control
`manage_sequence_playhead_uxp` reads or sets the active sequence player position
through documented `Sequence.getPlayerPosition()` and `Sequence.setPlayerPosition()`
APIs. A set requires the exact active sequence GUID and player position returned by
an earlier inspection. TickTime construction occurs before the per-sequence guard;
inside that guard the panel re-reads both values, rejects stale state, invokes the
native setter, and then requires boolean acceptance plus microsecond-tolerant
position readback.
Requests with different operation IDs serialize per sequence, while the existing
operation-ID replay window coalesces retries of the same completed request. This
controls player/UI state only: it deliberately does not claim a project save,
timeline edit, Undo entry, visible timecode accuracy, or playback behavior. The
automated contract tests cover validation, stale preflight, concurrent setters,
replay, rejected setters, and failed readback. A licensed Premiere host must still
validate the behavior on Windows and macOS before it is described as host-verified.
## PR 13 — Guarded source-media start timing
`manage_source_media_timing_uxp` inspects one explicitly identified source clip's
media start and duration, then can change only its start time through Adobe's
documented `Media.createSetStartAction()`. Inspection returns the bounded project
item ID and timing scalars, never a display name, file path, metadata, selection,
or Project-panel traversal. The mutation requires that complete snapshot, an
explicit `confirm_set_start`, and an `operation_id` for replay-safe retries.
Updates serialize from snapshot preflight through post-transaction readback per
project GUID and project-item ID. Under `Project.lockedAccess()` the panel takes a
fresh synchronous stable-26.3 `Media.start`/`Media.duration` snapshot, rejects any
stale target before constructing the action, commits exactly one action in one
`Project.executeTransaction()`, and then requires both the requested start and an
unchanged duration to read back. A concurrent request with a different operation ID
therefore cannot apply an old timing snapshot to a changed clip.
The mutation deliberately relies on the stable 26.3 synchronous `Media.start` and
`Media.duration` declarations inside its action boundary. The later beta Promise
property shape and beta-only `getStart()`/`getDuration()` methods are not a mutation
fallback. Contract tests cover confirmation, stale preflight, serialization,
operation replay, one transaction, and post-readback; they do not prove a licensed
Premiere host accepted the action, displayed the new timecode, persisted it, or
provided a usable Undo entry.
## PR 14 — Guarded source-media interpretation overrides
`manage_source_media_overrides_uxp` inspects the effective frame rate and pixel
aspect ratio for one explicitly identified source clip, then can set one or both
explicit overrides using the dedicated documented
`ClipProjectItem.createSetOverrideFrameRateAction()` and
`createSetOverridePixelAspectRatioAction()` APIs. It never accepts a selected item
or name as the mutation target, does not read paths or Project-panel metadata, and
does not call CEP, QE, or raw evaluation.
An update requires the exact project GUID, project-item ID, frame-rate, and
pixel-aspect-ratio snapshot returned by `inspect`, an explicit
`confirm_media_interpretation: true`, and a bounded `operation_id`. It allows a
finite frame rate from 1 through 240 and a positive rational pixel-aspect ratio
from 0.01 through 100, with an integer numerator and denominator. The panel
serializes competing requests through this source-media timing/override protocol
per project and item, refreshes the asynchronous effective interpretation snapshot
immediately before action construction, rejects staleness, builds only requested
actions synchronously inside `Project.lockedAccess()`, commits one transaction,
and then re-reads both effective values.
Adobe does not document an explicit-override presence getter or a clear-override
action. Consequently, effective-value readback cannot show whether an explicit
override persists or distinguish it from matching file-native interpretation; the
tool deliberately offers no clear operation. The lock cannot exclude Premiere UI
or a separate workflow changing interpretation after the asynchronous snapshot.
Contract tests cover confirmation, operation replay, stale preflight, concurrent
different-ID rejection, one transaction, and effective-value readback; they do not
prove a licensed Premiere host accepted the action, persisted the override,
displayed the intended interpretation, or provided a usable Undo entry.
## Primary Adobe references
- [EventManager](https://developer.adobe.com/premiere-pro/uxp/ppro-reference/classes/eventmanager/)
- [Premiere UXP constants](https://developer.adobe.com/premiere-pro/uxp/ppro-reference/constants/)
- [EncoderManager](https://developer.adobe.com/premiere-pro/uxp/ppro-reference/classes/encodermanager/)
- [Project](https://developer.adobe.com/premiere-pro/uxp/ppro-reference/classes/project/)
- [ProjectUtils](https://developer.adobe.com/premiere-pro/uxp/ppro-reference/classes/projectutils/)
- [Properties](https://developer.adobe.com/premiere-pro/uxp/ppro-reference/classes/properties/)
- [Sequence](https://developer.adobe.com/premiere-pro/uxp/ppro-reference/classes/sequence/)
- [ClipProjectItem](https://developer.adobe.com/premiere-pro/uxp/ppro-reference/classes/clipprojectitem/)
- [Media](https://developer.adobe.com/premiere-pro/uxp/ppro-reference/classes/media/)