premiere-cli 0.2.0__tar.gz → 0.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. {premiere_cli-0.2.0/src/premiere_cli.egg-info → premiere_cli-0.3.1}/PKG-INFO +13 -8
  2. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/README.md +12 -7
  3. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/pyproject.toml +2 -1
  4. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/__init__.py +1 -1
  5. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/cli.py +18 -0
  6. premiere_cli-0.3.1/src/premiere_cli/init_project.py +73 -0
  7. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/.debug +1 -1
  8. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/CSXS/manifest.xml +3 -3
  9. premiere_cli-0.3.1/src/premiere_cli/panel/host/commands/export-frame.jsx +257 -0
  10. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/js/main.js +1 -1
  11. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel_install.py +1 -1
  12. premiere_cli-0.3.1/src/premiere_cli/templates/empty-project/Adobe Premiere Pro Auto-Save/Untitled--8627e8e5-eccf-e7ea-8c87-b4de7f17596a-2026-07-10_12-30-47.prproj +0 -0
  13. premiere_cli-0.3.1/src/premiere_cli/templates/empty-project/Untitled.prproj +0 -0
  14. {premiere_cli-0.2.0 → premiere_cli-0.3.1/src/premiere_cli.egg-info}/PKG-INFO +13 -8
  15. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli.egg-info/SOURCES.txt +3 -0
  16. premiere_cli-0.2.0/src/premiere_cli/panel/host/commands/export-frame.jsx +0 -381
  17. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/LICENSE +0 -0
  18. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/setup.cfg +0 -0
  19. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/log.py +0 -0
  20. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/css/style.css +0 -0
  21. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/add-adjustment-layer.jsx +0 -0
  22. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/add-audio-keyframes.jsx +0 -0
  23. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/add-custom-metadata-field.jsx +0 -0
  24. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/add-keyframe.jsx +0 -0
  25. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/add-marker-to-project-item.jsx +0 -0
  26. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/add-marker.jsx +0 -0
  27. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/add-text-overlay.jsx +0 -0
  28. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/add-to-render-queue.jsx +0 -0
  29. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/add-to-timeline.jsx +0 -0
  30. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/add-track.jsx +0 -0
  31. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/add-transition.jsx +0 -0
  32. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/adjust-audio-levels.jsx +0 -0
  33. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/apply-audio-effect.jsx +0 -0
  34. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/apply-effect.jsx +0 -0
  35. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/apply-lut.jsx +0 -0
  36. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/attach-custom-property.jsx +0 -0
  37. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/auto-reframe-sequence.jsx +0 -0
  38. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/batch-add-transitions.jsx +0 -0
  39. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/batch-apply-effect.jsx +0 -0
  40. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/batch-rename-clips.jsx +0 -0
  41. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/batch-set-clips-enabled.jsx +0 -0
  42. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/clear-item-in-out.jsx +0 -0
  43. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/clear-sequence-in-out.jsx +0 -0
  44. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/close-all-source-clips.jsx +0 -0
  45. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/close-sequence.jsx +0 -0
  46. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/close-source-monitor.jsx +0 -0
  47. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/color-correct.jsx +0 -0
  48. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/copy-effect-values.jsx +0 -0
  49. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/copy-effects-between-clips.jsx +0 -0
  50. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/create-bars-and-tone.jsx +0 -0
  51. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/create-bin.jsx +0 -0
  52. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/create-caption-track.jsx +0 -0
  53. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/create-sequence-from-clips.jsx +0 -0
  54. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/create-sequence-from-preset.jsx +0 -0
  55. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/create-sequence.jsx +0 -0
  56. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/create-smart-bin.jsx +0 -0
  57. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/create-subclip.jsx +0 -0
  58. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/create-subsequence.jsx +0 -0
  59. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/debug-qe-inspect.jsx +0 -0
  60. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/debug-qe-try-mutate.jsx +0 -0
  61. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/delete-marker.jsx +0 -0
  62. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/deselect-all-clips.jsx +0 -0
  63. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/detach-proxy.jsx +0 -0
  64. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/duplicate-clip.jsx +0 -0
  65. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/duplicate-sequence.jsx +0 -0
  66. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/encode-file.jsx +0 -0
  67. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/encode-project-item.jsx +0 -0
  68. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/export-aaf.jsx +0 -0
  69. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/export-fcp-xml.jsx +0 -0
  70. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/export-omf.jsx +0 -0
  71. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/export-sequence-as-project.jsx +0 -0
  72. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/export-sequence.jsx +0 -0
  73. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/extract-audio-track.jsx +0 -0
  74. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/extract-selection.jsx +0 -0
  75. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/find-items-by-media-path.jsx +0 -0
  76. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/freeze-frame.jsx +0 -0
  77. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-active-sequence.jsx +0 -0
  78. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-all-project-paths.jsx +0 -0
  79. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-bin-contents.jsx +0 -0
  80. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-clip-adjustment-layer.jsx +0 -0
  81. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-clip-at-playhead.jsx +0 -0
  82. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-clip-at-position.jsx +0 -0
  83. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-clip-links.jsx +0 -0
  84. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-clip-markers.jsx +0 -0
  85. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-clip-speed.jsx +0 -0
  86. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-color-label.jsx +0 -0
  87. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-color-space.jsx +0 -0
  88. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-duplicate-media.jsx +0 -0
  89. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-effect-properties.jsx +0 -0
  90. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-encoder-presets.jsx +0 -0
  91. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-export-file-extension.jsx +0 -0
  92. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-footage-interpretation.jsx +0 -0
  93. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-full-clip-info.jsx +0 -0
  94. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-full-project-overview.jsx +0 -0
  95. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-full-sequence-info.jsx +0 -0
  96. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-graphics-white-luminance.jsx +0 -0
  97. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-insertion-bin.jsx +0 -0
  98. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-item-metadata.jsx +0 -0
  99. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-keyframes.jsx +0 -0
  100. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-mogrt-component.jsx +0 -0
  101. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-next-edit-point.jsx +0 -0
  102. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-offline-media.jsx +0 -0
  103. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-open-projects.jsx +0 -0
  104. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-premiere-state.jsx +0 -0
  105. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-project-info.jsx +0 -0
  106. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-project-item-info.jsx +0 -0
  107. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-project-panel-metadata.jsx +0 -0
  108. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-qe-clip-info.jsx +0 -0
  109. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-render-queue-status.jsx +0 -0
  110. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-sequence-count.jsx +0 -0
  111. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-sequence-in-out.jsx +0 -0
  112. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-sequence-markers-by-type.jsx +0 -0
  113. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-source-monitor-info.jsx +0 -0
  114. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-source-monitor-position.jsx +0 -0
  115. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-target-tracks.jsx +0 -0
  116. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-timeline-gaps.jsx +0 -0
  117. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-timeline-summary.jsx +0 -0
  118. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-total-clip-count.jsx +0 -0
  119. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-track-info.jsx +0 -0
  120. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-unused-media.jsx +0 -0
  121. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-used-media-report.jsx +0 -0
  122. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-value-at-time.jsx +0 -0
  123. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-version-info.jsx +0 -0
  124. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-work-area.jsx +0 -0
  125. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-workspaces.jsx +0 -0
  126. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/get-xmp-metadata.jsx +0 -0
  127. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/import-ae-comps.jsx +0 -0
  128. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/import-fcp-xml.jsx +0 -0
  129. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/import-folder.jsx +0 -0
  130. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/import-image-sequence.jsx +0 -0
  131. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/import-media.jsx +0 -0
  132. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/import-mogrt-from-library.jsx +0 -0
  133. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/import-mogrt.jsx +0 -0
  134. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/import-sequences-from-project.jsx +0 -0
  135. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/insert-from-source.jsx +0 -0
  136. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/inspect-dom-object.jsx +0 -0
  137. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/invert-selection.jsx +0 -0
  138. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/is-work-area-enabled.jsx +0 -0
  139. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/lift-selection.jsx +0 -0
  140. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/link-selection.jsx +0 -0
  141. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/list-available-audio-effects.jsx +0 -0
  142. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/list-available-audio-transitions.jsx +0 -0
  143. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/list-available-effects.jsx +0 -0
  144. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/list-available-transitions.jsx +0 -0
  145. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/list-markers.jsx +0 -0
  146. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/list-project-items.jsx +0 -0
  147. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/lock-track.jsx +0 -0
  148. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/manage-proxies.jsx +0 -0
  149. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/match-frame.jsx +0 -0
  150. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/move-clip-to-track.jsx +0 -0
  151. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/move-clip.jsx +0 -0
  152. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/move-items-to-bin.jsx +0 -0
  153. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/move-playhead-to-edit.jsx +0 -0
  154. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/move-playhead.jsx +0 -0
  155. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/nest-clips.jsx +0 -0
  156. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/open-in-source.jsx +0 -0
  157. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/open-project.jsx +0 -0
  158. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/overwrite-clip-at.jsx +0 -0
  159. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/overwrite-from-source.jsx +0 -0
  160. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/play-source-monitor.jsx +0 -0
  161. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/play-timeline.jsx +0 -0
  162. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/razor-all-tracks.jsx +0 -0
  163. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/redo.jsx +0 -0
  164. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/refresh-media.jsx +0 -0
  165. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/relink-media.jsx +0 -0
  166. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/remove-all-effects.jsx +0 -0
  167. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/remove-effect-by-name.jsx +0 -0
  168. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/remove-effect.jsx +0 -0
  169. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/remove-from-timeline.jsx +0 -0
  170. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/remove-keyframe-range.jsx +0 -0
  171. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/remove-keyframe.jsx +0 -0
  172. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/remove-selected-clips.jsx +0 -0
  173. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/remove-track-intervals.jsx +0 -0
  174. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/remove-transition.jsx +0 -0
  175. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/rename-bin.jsx +0 -0
  176. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/rename-clip.jsx +0 -0
  177. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/rename-project-item.jsx +0 -0
  178. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/rename-track.jsx +0 -0
  179. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/replace-clip-media.jsx +0 -0
  180. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/replace-clip.jsx +0 -0
  181. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/reverse-clip.jsx +0 -0
  182. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/ripple-delete-clip.jsx +0 -0
  183. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/roll-edit.jsx +0 -0
  184. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/save-project-as.jsx +0 -0
  185. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/save-project.jsx +0 -0
  186. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/scene-edit-detection.jsx +0 -0
  187. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/search-project-items.jsx +0 -0
  188. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/select-all-clips.jsx +0 -0
  189. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/select-clips-by-color.jsx +0 -0
  190. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/select-clips-by-name.jsx +0 -0
  191. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/select-clips-in-range.jsx +0 -0
  192. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/select-disabled-clips.jsx +0 -0
  193. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/select-project-item.jsx +0 -0
  194. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-active-project.jsx +0 -0
  195. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-active-sequence.jsx +0 -0
  196. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-all-tracks-targeted.jsx +0 -0
  197. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-anti-alias-quality.jsx +0 -0
  198. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-blend-mode.jsx +0 -0
  199. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-clip-anchor-point.jsx +0 -0
  200. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-clip-enabled.jsx +0 -0
  201. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-clip-opacity.jsx +0 -0
  202. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-clip-pan.jsx +0 -0
  203. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-clip-position.jsx +0 -0
  204. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-clip-properties.jsx +0 -0
  205. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-clip-rotation.jsx +0 -0
  206. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-clip-scale.jsx +0 -0
  207. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-clip-selection.jsx +0 -0
  208. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-clip-speed.jsx +0 -0
  209. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-clip-volume.jsx +0 -0
  210. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-color-label.jsx +0 -0
  211. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-color-value.jsx +0 -0
  212. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-effect-property.jsx +0 -0
  213. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-footage-interpretation.jsx +0 -0
  214. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-frame-blend.jsx +0 -0
  215. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-graphics-white-luminance.jsx +0 -0
  216. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-item-in-out.jsx +0 -0
  217. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-item-metadata.jsx +0 -0
  218. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-item-offline.jsx +0 -0
  219. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-item-start-time.jsx +0 -0
  220. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-keyframe-interpolation.jsx +0 -0
  221. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-override-frame-rate.jsx +0 -0
  222. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-override-pixel-aspect-ratio.jsx +0 -0
  223. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-poster-frame.jsx +0 -0
  224. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-project-panel-metadata.jsx +0 -0
  225. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-scale-to-frame-size.jsx +0 -0
  226. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-scale-width-height.jsx +0 -0
  227. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-sequence-in-out.jsx +0 -0
  228. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-sequence-settings.jsx +0 -0
  229. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-source-in-out.jsx +0 -0
  230. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-target-track.jsx +0 -0
  231. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-time-interpolation.jsx +0 -0
  232. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-track-mute.jsx +0 -0
  233. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-track-visibility.jsx +0 -0
  234. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-transcode-on-ingest.jsx +0 -0
  235. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-uniform-scale.jsx +0 -0
  236. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-work-area.jsx +0 -0
  237. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-workspace.jsx +0 -0
  238. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/set-xmp-metadata.jsx +0 -0
  239. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/slide-edit.jsx +0 -0
  240. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/slip-edit.jsx +0 -0
  241. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/split-clip.jsx +0 -0
  242. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/stabilize-clip.jsx +0 -0
  243. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/stop-playback.jsx +0 -0
  244. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/trim-clip.jsx +0 -0
  245. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/undo.jsx +0 -0
  246. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/unlink-selection.jsx +0 -0
  247. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/unnest-sequence.jsx +0 -0
  248. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/commands/update-marker.jsx +0 -0
  249. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/index.jsx +0 -0
  250. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/host/presets/default-4k-25fps.sqpreset +0 -0
  251. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/index.html +0 -0
  252. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli/panel/js/cs-interface.js +0 -0
  253. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli.egg-info/dependency_links.txt +0 -0
  254. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli.egg-info/entry_points.txt +0 -0
  255. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli.egg-info/requires.txt +0 -0
  256. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/src/premiere_cli.egg-info/top_level.txt +0 -0
  257. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/tests/test_cli.py +0 -0
  258. {premiere_cli-0.2.0 → premiere_cli-0.3.1}/tests/test_log.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: premiere-cli
3
- Version: 0.2.0
3
+ Version: 0.3.1
4
4
  Summary: Drive Adobe Premiere Pro from the command line: a Python CLI plus a bundled CEP bridge panel exposing Premiere's scripting APIs over local HTTP
5
5
  License: CC-BY-SA-4.0
6
6
  Project-URL: Repository, https://github.com/stefanwebb/premiere-cli
@@ -22,16 +22,17 @@ ExtendScript / QE scripting APIs as ~230 JSON-in/JSON-out commands —
22
22
  reading project/sequence/clip state, editing the timeline, applying
23
23
  effects, managing markers and bins, exporting media and frames, and more.
24
24
 
25
- It is also a **Claude Code plugin**: install it and Claude gets a skill
26
- documenting every command, so it can inspect and edit your open Premiere
27
- project for you.
25
+ The Claude Code skill for driving this CLI lives in the separate
26
+ [premiere-ai-skills](https://github.com/stefanwebb/premiere-ai-skills)
27
+ plugin, alongside the AI-assisted workflow skills — install that plugin
28
+ to give Claude the skill.
28
29
 
29
30
  ## Install
30
31
 
31
32
  ```bash
32
33
  # 1. The CLI (isolated, no dependencies)
33
- pipx install git+https://github.com/stefanwebb/premiere-cli
34
- # or: uv tool install git+https://github.com/stefanwebb/premiere-cli
34
+ pipx install premiere-cli
35
+ # or: uv tool install premiere-cli
35
36
 
36
37
  # 2. The CEP panel (copies it into Adobe's extensions dir + enables PlayerDebugMode)
37
38
  premiere-cli install-panel
@@ -42,6 +43,10 @@ premiere-cli install-panel
42
43
  premiere-cli doctor
43
44
  ```
44
45
 
46
+ `premiere-cli init-project <name> --base-dir <path>` scaffolds a fresh,
47
+ empty `.prproj` from a bundled template — no Premiere Pro session needed,
48
+ so it works before step 3.
49
+
45
50
  Supported: macOS and Windows (CEP does not exist on Linux). The panel
46
51
  targets Premiere Pro 2020+ (CEP 10-12); the API behavior notes in
47
52
  [docs/BUILD_FINDINGS.md](docs/BUILD_FINDINGS.md) were live-calibrated on
@@ -65,8 +70,8 @@ Every command prints a JSON object: `{"ok": true, "result": ...}` or
65
70
  ## Use from Claude Code
66
71
 
67
72
  ```
68
- /plugin marketplace add stefanwebb/premiere-cli
69
- /plugin install premiere-cli@premiere-cli
73
+ /plugin marketplace add stefanwebb/premiere-ai-skills
74
+ /plugin install premiere-ai-skills@premiere-ai-skills
70
75
  ```
71
76
 
72
77
  This gives Claude the `premiere-cli` skill — a complete, behavior-annotated
@@ -9,16 +9,17 @@ ExtendScript / QE scripting APIs as ~230 JSON-in/JSON-out commands —
9
9
  reading project/sequence/clip state, editing the timeline, applying
10
10
  effects, managing markers and bins, exporting media and frames, and more.
11
11
 
12
- It is also a **Claude Code plugin**: install it and Claude gets a skill
13
- documenting every command, so it can inspect and edit your open Premiere
14
- project for you.
12
+ The Claude Code skill for driving this CLI lives in the separate
13
+ [premiere-ai-skills](https://github.com/stefanwebb/premiere-ai-skills)
14
+ plugin, alongside the AI-assisted workflow skills — install that plugin
15
+ to give Claude the skill.
15
16
 
16
17
  ## Install
17
18
 
18
19
  ```bash
19
20
  # 1. The CLI (isolated, no dependencies)
20
- pipx install git+https://github.com/stefanwebb/premiere-cli
21
- # or: uv tool install git+https://github.com/stefanwebb/premiere-cli
21
+ pipx install premiere-cli
22
+ # or: uv tool install premiere-cli
22
23
 
23
24
  # 2. The CEP panel (copies it into Adobe's extensions dir + enables PlayerDebugMode)
24
25
  premiere-cli install-panel
@@ -29,6 +30,10 @@ premiere-cli install-panel
29
30
  premiere-cli doctor
30
31
  ```
31
32
 
33
+ `premiere-cli init-project <name> --base-dir <path>` scaffolds a fresh,
34
+ empty `.prproj` from a bundled template — no Premiere Pro session needed,
35
+ so it works before step 3.
36
+
32
37
  Supported: macOS and Windows (CEP does not exist on Linux). The panel
33
38
  targets Premiere Pro 2020+ (CEP 10-12); the API behavior notes in
34
39
  [docs/BUILD_FINDINGS.md](docs/BUILD_FINDINGS.md) were live-calibrated on
@@ -52,8 +57,8 @@ Every command prints a JSON object: `{"ok": true, "result": ...}` or
52
57
  ## Use from Claude Code
53
58
 
54
59
  ```
55
- /plugin marketplace add stefanwebb/premiere-cli
56
- /plugin install premiere-cli@premiere-cli
60
+ /plugin marketplace add stefanwebb/premiere-ai-skills
61
+ /plugin install premiere-ai-skills@premiere-ai-skills
57
62
  ```
58
63
 
59
64
  This gives Claude the `premiere-cli` skill — a complete, behavior-annotated
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
6
6
  name = "premiere-cli"
7
7
  # Keep in lockstep with premiere_cli.__version__ and PANEL_VERSION in
8
8
  # src/premiere_cli/panel/js/main.js.
9
- version = "0.2.0"
9
+ version = "0.3.1"
10
10
  description = "Drive Adobe Premiere Pro from the command line: a Python CLI plus a bundled CEP bridge panel exposing Premiere's scripting APIs over local HTTP"
11
11
  readme = "README.md"
12
12
  license = {text = "CC-BY-SA-4.0"}
@@ -34,4 +34,5 @@ where = ["src"]
34
34
  premiere_cli = [
35
35
  "panel/**/*",
36
36
  "panel/.debug",
37
+ "templates/**/*",
37
38
  ]
@@ -8,4 +8,4 @@ server (port 47823).
8
8
  # Kept in lockstep with PANEL_VERSION in panel/js/main.js and the version in
9
9
  # pyproject.toml — `premiere-cli doctor` compares the installed panel's
10
10
  # version against this one.
11
- __version__ = "0.2.0"
11
+ __version__ = "0.3.1"
@@ -104,6 +104,20 @@ def main() -> None:
104
104
  help="Diagnose the CLI -> panel -> Premiere chain: panel installed, panel reachable, versions matching, Premiere responding",
105
105
  )
106
106
 
107
+ init_project_parser = subparsers.add_parser(
108
+ "init-project",
109
+ help="Create a fresh, empty Premiere Pro project from the bundled empty-project template",
110
+ )
111
+ init_project_parser.add_argument("project_name", help="Name of the new project, e.g. project0002")
112
+ init_project_parser.add_argument(
113
+ "--series", default=None,
114
+ help="Optional series name; the project is nested under <base-dir>/<series>/<project_name>",
115
+ )
116
+ init_project_parser.add_argument(
117
+ "--base-dir", required=True,
118
+ help="Directory the project (or series) is created under",
119
+ )
120
+
107
121
  create_sequence_parser = subparsers.add_parser("create-sequence", help="Create a new sequence")
108
122
  create_sequence_parser.add_argument("--name", required=True, help="Name of the new sequence")
109
123
  create_sequence_parser.add_argument(
@@ -2155,6 +2169,10 @@ def main() -> None:
2155
2169
  from premiere_cli import panel_install
2156
2170
 
2157
2171
  sys.exit(panel_install.doctor(port=args.port))
2172
+ if args.subcommand == "init-project":
2173
+ from premiere_cli import init_project
2174
+
2175
+ sys.exit(init_project.init_project(args.project_name, args.series, args.base_dir))
2158
2176
 
2159
2177
  if args.subcommand == "create-sequence":
2160
2178
  command_args = {"name": args.name, "bin": args.bin, "fps": args.fps, "width": args.width, "height": args.height}
@@ -0,0 +1,73 @@
1
+ """Create a fresh, empty Premiere Pro project from the bundled empty-project
2
+ template.
3
+
4
+ The template (``premiere_cli/templates/empty-project/``) ships inside this
5
+ package, so ``premiere-cli init-project`` works from any checkout/install
6
+ without needing access to a shared drive.
7
+ """
8
+
9
+ import json
10
+ import os
11
+ import shutil
12
+ from importlib import resources
13
+
14
+
15
+ def _template_dir() -> str:
16
+ """Filesystem path of the empty-project template bundled inside this package."""
17
+ template = resources.files("premiere_cli") / "templates" / "empty-project"
18
+ path = str(template)
19
+ if not os.path.isdir(path):
20
+ raise RuntimeError(
21
+ f"bundled empty-project template not found at {path} — broken installation?"
22
+ )
23
+ return path
24
+
25
+
26
+ def create_project(project_name: str, dest_dir: str) -> str:
27
+ """Copy the bundled empty-project template into dest_dir and rename its
28
+ .prproj file to '<project_name>.prproj'. Returns dest_dir.
29
+
30
+ Raises RuntimeError if dest_dir already exists or the template doesn't
31
+ contain exactly one .prproj file.
32
+ """
33
+ template_dir = _template_dir()
34
+
35
+ if os.path.exists(dest_dir):
36
+ raise RuntimeError(f"destination already exists, refusing to overwrite: {dest_dir}")
37
+
38
+ shutil.copytree(template_dir, dest_dir)
39
+
40
+ # Copying across some filesystems (e.g. exFAT external drives) emits
41
+ # AppleDouble sidecar files (e.g. "._Untitled.prproj") for xattrs/resource
42
+ # forks. Strip them from the copy so they don't get mistaken for real files.
43
+ for root, _dirs, files in os.walk(dest_dir):
44
+ for f in files:
45
+ if f.startswith("._"):
46
+ os.remove(os.path.join(root, f))
47
+
48
+ prproj_files = [f for f in os.listdir(dest_dir) if f.endswith(".prproj")]
49
+ if len(prproj_files) != 1:
50
+ raise RuntimeError(
51
+ f"expected exactly one .prproj file in the template, found {len(prproj_files)}: {prproj_files}"
52
+ )
53
+
54
+ old_path = os.path.join(dest_dir, prproj_files[0])
55
+ new_path = os.path.join(dest_dir, f"{project_name}.prproj")
56
+ os.rename(old_path, new_path)
57
+
58
+ return dest_dir
59
+
60
+
61
+ def init_project(project_name: str, series_name: str | None, base_dir: str) -> int:
62
+ """CLI entry point: build the destination path and create the project,
63
+ printing a JSON result. Returns the process exit code."""
64
+ dest_dir = os.path.join(base_dir, series_name, project_name) if series_name else os.path.join(base_dir, project_name)
65
+
66
+ try:
67
+ create_project(project_name, dest_dir)
68
+ except RuntimeError as exc:
69
+ print(json.dumps({"ok": False, "error": str(exc)}))
70
+ return 1
71
+
72
+ print(json.dumps({"ok": True, "projectDir": dest_dir}))
73
+ return 0
@@ -1,6 +1,6 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <ExtensionList>
3
- <Extension Id="com.generativegamedev.premierebridge.panel">
3
+ <Extension Id="com.stefanwebb.premierecli.panel">
4
4
  <HostList>
5
5
  <Host Name="PPRO" Port="8088"/>
6
6
  </HostList>
@@ -1,7 +1,7 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <ExtensionManifest Version="7.0" ExtensionBundleId="com.generativegamedev.premierebridge" ExtensionBundleVersion="1.0.0" ExtensionBundleName="Premiere Bridge">
2
+ <ExtensionManifest Version="7.0" ExtensionBundleId="com.stefanwebb.premierecli" ExtensionBundleVersion="1.0.0" ExtensionBundleName="Premiere Bridge">
3
3
  <ExtensionList>
4
- <Extension Id="com.generativegamedev.premierebridge.panel" Version="1.0.0" />
4
+ <Extension Id="com.stefanwebb.premierecli.panel" Version="1.0.0" />
5
5
  </ExtensionList>
6
6
  <ExecutionEnvironment>
7
7
  <HostList>
@@ -15,7 +15,7 @@
15
15
  </RequiredRuntimeList>
16
16
  </ExecutionEnvironment>
17
17
  <DispatchInfoList>
18
- <Extension Id="com.generativegamedev.premierebridge.panel">
18
+ <Extension Id="com.stefanwebb.premierecli.panel">
19
19
  <DispatchInfo>
20
20
  <Resources>
21
21
  <MainPath>./index.html</MainPath>
@@ -0,0 +1,257 @@
1
+ // Command: export-frame → ppb_exportFrame
2
+ // Loaded lazily by ppb_dispatch (host/index.jsx) on first use, into the
3
+ // same global ExtendScript context — shared helpers (findSequenceByName,
4
+ // findBundledPresetByRelativePath, trySetSequenceRange, getSequenceFps,
5
+ // timecodeToSeconds, ...) are already defined there.
6
+
7
+ // A bundled still-image preset for the AME single-frame export below —
8
+ // confirmed present on this machine's Premiere Pro 2026 install at this
9
+ // relative path; re-verify after a Premiere version upgrade, same caveat
10
+ // as extract-audio-track's FORMAT_PRESET_RELATIVE_PATHS. "Match Source"
11
+ // means the preset inherits the sequence's own frame size, so no
12
+ // width/height override is needed when using it.
13
+ var STILL_IMAGE_PRESET_RELATIVE_PATH =
14
+ "Contents/MediaIO/systempresets/3F3F3F3F_504E4720/PNG Sequence (Match Source).epr";
15
+
16
+ // Premiere treats a still-image preset as a one-frame image *sequence*,
17
+ // appending a frame number to the base name ("frame.png" → "frame0.png",
18
+ // confirmed live; padding may vary by preset/duration). Finds whichever
19
+ // variant was actually written and renames it to the exact requested path
20
+ // so callers reliably get the file where they asked for it.
21
+ //
22
+ // Known variants are checked DIRECTLY by path, not found via a directory
23
+ // scan: enumerating the parent directory returns an empty list on this
24
+ // machine for some directories (e.g. /tmp — same macOS TCC/sandboxing
25
+ // behavior already documented for /Applications in
26
+ // findBundledPresetByRelativePath's notes in host/index.jsx) even though
27
+ // the files themselves are readable at their exact paths. A directory
28
+ // scan runs only as a last resort, for variant names not in the known
29
+ // list.
30
+ function locateAndNormalizeExportedFrame(outputPath) {
31
+ var exact = new File(outputPath);
32
+ if (exact.exists && exact.length > 0) {
33
+ return exact;
34
+ }
35
+
36
+ var fullName = decodeURI(exact.name);
37
+ var dot = fullName.lastIndexOf(".");
38
+ var base = dot === -1 ? fullName : fullName.substring(0, dot);
39
+ var ext = dot === -1 ? "" : fullName.substring(dot);
40
+ var parentPath = exact.path;
41
+
42
+ function normalize(produced) {
43
+ if (produced.length <= 0) {
44
+ return null;
45
+ }
46
+ try {
47
+ if (produced.fsName !== exact.fsName) {
48
+ produced.rename(fullName);
49
+ }
50
+ } catch (e) {
51
+ // rename best-effort — still report the file under whatever name it has
52
+ return produced;
53
+ }
54
+ return exact.exists ? exact : produced;
55
+ }
56
+
57
+ var knownVariants = [
58
+ parentPath + "/" + base + "0" + ext, // AME frame-number suffix
59
+ parentPath + "/" + base + "00" + ext,
60
+ parentPath + "/" + base + "000" + ext,
61
+ parentPath + "/" + base + "0000" + ext
62
+ ];
63
+ for (var v = 0; v < knownVariants.length; v++) {
64
+ var candidate = new File(knownVariants[v]);
65
+ if (candidate.exists && candidate.length > 0) {
66
+ return normalize(candidate);
67
+ }
68
+ }
69
+
70
+ // Last resort: scan the parent directory (returns nothing at all in
71
+ // enumeration-blocked directories — see comment above).
72
+ var dir = exact.parent;
73
+ if (!dir || !dir.exists) {
74
+ return null;
75
+ }
76
+
77
+ var matches = dir.getFiles(function (item) {
78
+ if (item instanceof Folder) {
79
+ return false;
80
+ }
81
+ var name = decodeURI(item.name);
82
+ if (name.indexOf(base) !== 0) {
83
+ return false;
84
+ }
85
+ var lowerExt = ext.toLowerCase();
86
+ return lowerExt === "" || name.toLowerCase().substring(name.length - lowerExt.length) === lowerExt;
87
+ });
88
+
89
+ if (!matches || matches.length === 0) {
90
+ return null;
91
+ }
92
+
93
+ return normalize(matches[0]);
94
+ }
95
+
96
+ // Exports a single frame of a sequence, at a given timecode, to a PNG file.
97
+ //
98
+ // qe.project.getActiveSequence().exportFramePNG was tried first in an
99
+ // earlier version of this command (guessing at its version-dependent arg
100
+ // order per PREMIERE_API_NOTES.md), judging success only by whether a file
101
+ // was produced. That check is NOT sufficient: confirmed live 2026-07-20
102
+ // that on this Premiere build, exportFramePNG ignores its position
103
+ // argument in every arg-order variant tried (ticksString, Time object,
104
+ // output-path-as-position, ticks-then-path, path-then-ticks) and always
105
+ // exports whatever frame is currently rendered in the Program Monitor,
106
+ // regardless of the requested timecode — while still writing a real file
107
+ // and returning normally, so the file-existence check reported false
108
+ // positives. Two exports requested 30 seconds apart came back
109
+ // pixel-identical. Neither seq.setPlayerPosition() (standard DOM) nor
110
+ // qeSequence.setCTI() (QE DOM) changed this.
111
+ //
112
+ // This command now exports exclusively via Adobe Media Encoder's
113
+ // exportAsMediaDirect() — the same documented, blocking mechanism
114
+ // ppb_extractAudioTrack already uses successfully — narrowing the
115
+ // sequence's in/out points to exactly one frame around the target
116
+ // timecode. Confirmed live to produce genuinely different, timecode-
117
+ // correct frames (verified via pixel diff, not just file existence).
118
+ function ppb_exportFrame(argsJson) {
119
+ try {
120
+ var args;
121
+ try {
122
+ args = JSON.parse(argsJson);
123
+ } catch (e) {
124
+ return JSON.stringify({ ok: false, error: "invalid args JSON: " + e.toString() });
125
+ }
126
+
127
+ if (!args.outputPath || typeof args.outputPath !== "string") {
128
+ return JSON.stringify({ ok: false, error: "outputPath is required" });
129
+ }
130
+ var timecodeRe = /^\d{2,3}:\d{2}:\d{2}$/;
131
+ if (!args.timecode || typeof args.timecode !== "string" || !timecodeRe.test(args.timecode)) {
132
+ return JSON.stringify({ ok: false, error: "timecode must be a \"MM:SS:FF\" string" });
133
+ }
134
+
135
+ if (!app.project) {
136
+ return JSON.stringify({ ok: false, error: "no project open" });
137
+ }
138
+
139
+ var seq = null;
140
+ if (args.sequenceName && typeof args.sequenceName === "string") {
141
+ seq = findSequenceByName(args.sequenceName);
142
+ if (!seq) {
143
+ return JSON.stringify({ ok: false, error: "no sequence named \"" + args.sequenceName + "\" is open" });
144
+ }
145
+ } else {
146
+ seq = app.project.activeSequence;
147
+ if (!seq) {
148
+ return JSON.stringify({ ok: false, error: "no active sequence, and no sequenceName given" });
149
+ }
150
+ }
151
+
152
+ if (app.project.activeSequence !== seq) {
153
+ app.project.activeSequence = seq;
154
+ }
155
+
156
+ var fps = getSequenceFps(seq);
157
+ var timeSeconds = timecodeToSeconds(args.timecode, fps);
158
+
159
+ var width = null;
160
+ var height = null;
161
+ try {
162
+ var settings = seq.getSettings();
163
+ width = settings.videoFrameWidth;
164
+ height = settings.videoFrameHeight;
165
+ } catch (e) {
166
+ // best-effort only — reported in the result, not required for export
167
+ }
168
+
169
+ var result = {
170
+ sequenceName: seq.name,
171
+ timecode: args.timecode,
172
+ timeSeconds: timeSeconds,
173
+ outputPath: args.outputPath,
174
+ width: width,
175
+ height: height
176
+ };
177
+
178
+ // Clear any stale leftover from an earlier failed run — the exact
179
+ // requested path plus every known frame-numbered variant Premiere
180
+ // might write it under (see locateAndNormalizeExportedFrame) — so a
181
+ // leftover file's mere existence can't be mistaken for this run's
182
+ // output.
183
+ for (var staleRound = 0; staleRound < 8; staleRound++) {
184
+ var stale = locateAndNormalizeExportedFrame(args.outputPath);
185
+ if (stale === null) {
186
+ break;
187
+ }
188
+ try {
189
+ stale.remove();
190
+ } catch (e) {
191
+ // best-effort — a failed cleanup doesn't block the export attempt
192
+ break;
193
+ }
194
+ }
195
+
196
+ var amePresetPath = findBundledPresetByRelativePath(STILL_IMAGE_PRESET_RELATIVE_PATH);
197
+ if (!amePresetPath) {
198
+ return JSON.stringify({
199
+ ok: false,
200
+ error: "no bundled still-image preset found for the Media Encoder export"
201
+ });
202
+ }
203
+
204
+ var originalInPoint = null;
205
+ var originalOutPoint = null;
206
+ try {
207
+ originalInPoint = seq.getInPoint();
208
+ originalOutPoint = seq.getOutPoint();
209
+ } catch (e) {
210
+ // best-effort only — if these can't be read, we simply won't restore them
211
+ }
212
+
213
+ var frameDurationSeconds = 1 / fps;
214
+ var ameProducedFile = null;
215
+ var ameError = null;
216
+
217
+ try {
218
+ var rangeOutcome = trySetSequenceRange(seq, timeSeconds, timeSeconds + frameDurationSeconds);
219
+ if (!rangeOutcome.ok) {
220
+ ameError = "could not set sequence in/out points with any known argument form (seconds, ticks string, Time object)";
221
+ } else {
222
+ try {
223
+ seq.exportAsMediaDirect(args.outputPath, amePresetPath, 1 /* ENCODE_IN_TO_OUT */);
224
+ } catch (e) {
225
+ ameError = "exportAsMediaDirect failed: " + e.toString();
226
+ }
227
+ }
228
+ } finally {
229
+ if (originalInPoint !== null && originalOutPoint !== null) {
230
+ try {
231
+ trySetSequenceRange(seq, originalInPoint.seconds, originalOutPoint.seconds);
232
+ } catch (e) {
233
+ // best-effort
234
+ }
235
+ }
236
+ }
237
+
238
+ if (ameError === null) {
239
+ ameProducedFile = locateAndNormalizeExportedFrame(args.outputPath);
240
+ }
241
+
242
+ if (ameProducedFile === null) {
243
+ return JSON.stringify({
244
+ ok: false,
245
+ error: "Media Encoder export failed" + (ameError ? ": " + ameError : " (no file produced)")
246
+ });
247
+ }
248
+
249
+ result.method = "ame";
250
+ result.presetPath = amePresetPath;
251
+ result.fileSizeBytes = ameProducedFile.length;
252
+
253
+ return JSON.stringify({ ok: true, result: result });
254
+ } catch (e) {
255
+ return JSON.stringify({ ok: false, error: e.toString() });
256
+ }
257
+ }
@@ -5,7 +5,7 @@ const PORT = 47823;
5
5
  // Kept in lockstep with the premiere-cli Python package version —
6
6
  // `premiere-cli doctor` compares the two and warns when the installed
7
7
  // panel is stale relative to the CLI that ships it.
8
- const PANEL_VERSION = '0.2.0';
8
+ const PANEL_VERSION = '0.3.1';
9
9
  const VALID_LEVELS = ['info', 'warn', 'error'];
10
10
 
11
11
  // main.js is loaded via a plain <script src="js/main.js"> tag, not
@@ -16,7 +16,7 @@ import urllib.error
16
16
  import urllib.request
17
17
  from importlib import resources
18
18
 
19
- EXTENSION_ID = "com.generativegamedev.premierebridge"
19
+ EXTENSION_ID = "com.stefanwebb.premierecli"
20
20
  DEFAULT_PORT = 47823
21
21
 
22
22
  # CSXS major versions to enable PlayerDebugMode for. Premiere 2020-2022 use
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: premiere-cli
3
- Version: 0.2.0
3
+ Version: 0.3.1
4
4
  Summary: Drive Adobe Premiere Pro from the command line: a Python CLI plus a bundled CEP bridge panel exposing Premiere's scripting APIs over local HTTP
5
5
  License: CC-BY-SA-4.0
6
6
  Project-URL: Repository, https://github.com/stefanwebb/premiere-cli
@@ -22,16 +22,17 @@ ExtendScript / QE scripting APIs as ~230 JSON-in/JSON-out commands —
22
22
  reading project/sequence/clip state, editing the timeline, applying
23
23
  effects, managing markers and bins, exporting media and frames, and more.
24
24
 
25
- It is also a **Claude Code plugin**: install it and Claude gets a skill
26
- documenting every command, so it can inspect and edit your open Premiere
27
- project for you.
25
+ The Claude Code skill for driving this CLI lives in the separate
26
+ [premiere-ai-skills](https://github.com/stefanwebb/premiere-ai-skills)
27
+ plugin, alongside the AI-assisted workflow skills — install that plugin
28
+ to give Claude the skill.
28
29
 
29
30
  ## Install
30
31
 
31
32
  ```bash
32
33
  # 1. The CLI (isolated, no dependencies)
33
- pipx install git+https://github.com/stefanwebb/premiere-cli
34
- # or: uv tool install git+https://github.com/stefanwebb/premiere-cli
34
+ pipx install premiere-cli
35
+ # or: uv tool install premiere-cli
35
36
 
36
37
  # 2. The CEP panel (copies it into Adobe's extensions dir + enables PlayerDebugMode)
37
38
  premiere-cli install-panel
@@ -42,6 +43,10 @@ premiere-cli install-panel
42
43
  premiere-cli doctor
43
44
  ```
44
45
 
46
+ `premiere-cli init-project <name> --base-dir <path>` scaffolds a fresh,
47
+ empty `.prproj` from a bundled template — no Premiere Pro session needed,
48
+ so it works before step 3.
49
+
45
50
  Supported: macOS and Windows (CEP does not exist on Linux). The panel
46
51
  targets Premiere Pro 2020+ (CEP 10-12); the API behavior notes in
47
52
  [docs/BUILD_FINDINGS.md](docs/BUILD_FINDINGS.md) were live-calibrated on
@@ -65,8 +70,8 @@ Every command prints a JSON object: `{"ok": true, "result": ...}` or
65
70
  ## Use from Claude Code
66
71
 
67
72
  ```
68
- /plugin marketplace add stefanwebb/premiere-cli
69
- /plugin install premiere-cli@premiere-cli
73
+ /plugin marketplace add stefanwebb/premiere-ai-skills
74
+ /plugin install premiere-ai-skills@premiere-ai-skills
70
75
  ```
71
76
 
72
77
  This gives Claude the `premiere-cli` skill — a complete, behavior-annotated
@@ -3,6 +3,7 @@ README.md
3
3
  pyproject.toml
4
4
  src/premiere_cli/__init__.py
5
5
  src/premiere_cli/cli.py
6
+ src/premiere_cli/init_project.py
6
7
  src/premiere_cli/log.py
7
8
  src/premiere_cli/panel_install.py
8
9
  src/premiere_cli.egg-info/PKG-INFO
@@ -248,5 +249,7 @@ src/premiere_cli/panel/host/commands/update-marker.jsx
248
249
  src/premiere_cli/panel/host/presets/default-4k-25fps.sqpreset
249
250
  src/premiere_cli/panel/js/cs-interface.js
250
251
  src/premiere_cli/panel/js/main.js
252
+ src/premiere_cli/templates/empty-project/Untitled.prproj
253
+ src/premiere_cli/templates/empty-project/Adobe Premiere Pro Auto-Save/Untitled--8627e8e5-eccf-e7ea-8c87-b4de7f17596a-2026-07-10_12-30-47.prproj
251
254
  tests/test_cli.py
252
255
  tests/test_log.py