premiere-cli 0.3.0__tar.gz → 0.4.0__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 (264) hide show
  1. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/PKG-INFO +34 -1
  2. premiere_cli-0.3.0/src/premiere_cli.egg-info/PKG-INFO → premiere_cli-0.4.0/README.md +29 -13
  3. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/pyproject.toml +9 -1
  4. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/__init__.py +1 -1
  5. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/cli.py +118 -0
  6. premiere_cli-0.4.0/src/premiere_cli/desktop_driver.py +738 -0
  7. premiere_cli-0.4.0/src/premiere_cli/desktop_overlay.py +150 -0
  8. premiere_cli-0.4.0/src/premiere_cli/notify_daemon.py +102 -0
  9. premiere_cli-0.4.0/src/premiere_cli/panel/host/commands/apply-lut.jsx +195 -0
  10. premiere_cli-0.4.0/src/premiere_cli/panel/host/commands/export-frame.jsx +257 -0
  11. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/js/main.js +1 -1
  12. premiere_cli-0.3.0/README.md → premiere_cli-0.4.0/src/premiere_cli.egg-info/PKG-INFO +46 -0
  13. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli.egg-info/SOURCES.txt +4 -0
  14. premiere_cli-0.4.0/src/premiere_cli.egg-info/requires.txt +8 -0
  15. premiere_cli-0.4.0/tests/test_desktop_driver.py +41 -0
  16. premiere_cli-0.3.0/src/premiere_cli/panel/host/commands/apply-lut.jsx +0 -107
  17. premiere_cli-0.3.0/src/premiere_cli/panel/host/commands/export-frame.jsx +0 -381
  18. premiere_cli-0.3.0/src/premiere_cli.egg-info/requires.txt +0 -3
  19. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/LICENSE +0 -0
  20. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/setup.cfg +0 -0
  21. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/init_project.py +0 -0
  22. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/log.py +0 -0
  23. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/.debug +0 -0
  24. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/CSXS/manifest.xml +0 -0
  25. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/css/style.css +0 -0
  26. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/add-adjustment-layer.jsx +0 -0
  27. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/add-audio-keyframes.jsx +0 -0
  28. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/add-custom-metadata-field.jsx +0 -0
  29. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/add-keyframe.jsx +0 -0
  30. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/add-marker-to-project-item.jsx +0 -0
  31. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/add-marker.jsx +0 -0
  32. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/add-text-overlay.jsx +0 -0
  33. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/add-to-render-queue.jsx +0 -0
  34. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/add-to-timeline.jsx +0 -0
  35. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/add-track.jsx +0 -0
  36. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/add-transition.jsx +0 -0
  37. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/adjust-audio-levels.jsx +0 -0
  38. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/apply-audio-effect.jsx +0 -0
  39. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/apply-effect.jsx +0 -0
  40. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/attach-custom-property.jsx +0 -0
  41. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/auto-reframe-sequence.jsx +0 -0
  42. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/batch-add-transitions.jsx +0 -0
  43. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/batch-apply-effect.jsx +0 -0
  44. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/batch-rename-clips.jsx +0 -0
  45. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/batch-set-clips-enabled.jsx +0 -0
  46. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/clear-item-in-out.jsx +0 -0
  47. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/clear-sequence-in-out.jsx +0 -0
  48. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/close-all-source-clips.jsx +0 -0
  49. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/close-sequence.jsx +0 -0
  50. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/close-source-monitor.jsx +0 -0
  51. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/color-correct.jsx +0 -0
  52. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/copy-effect-values.jsx +0 -0
  53. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/copy-effects-between-clips.jsx +0 -0
  54. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/create-bars-and-tone.jsx +0 -0
  55. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/create-bin.jsx +0 -0
  56. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/create-caption-track.jsx +0 -0
  57. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/create-sequence-from-clips.jsx +0 -0
  58. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/create-sequence-from-preset.jsx +0 -0
  59. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/create-sequence.jsx +0 -0
  60. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/create-smart-bin.jsx +0 -0
  61. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/create-subclip.jsx +0 -0
  62. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/create-subsequence.jsx +0 -0
  63. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/debug-qe-inspect.jsx +0 -0
  64. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/debug-qe-try-mutate.jsx +0 -0
  65. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/delete-marker.jsx +0 -0
  66. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/deselect-all-clips.jsx +0 -0
  67. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/detach-proxy.jsx +0 -0
  68. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/duplicate-clip.jsx +0 -0
  69. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/duplicate-sequence.jsx +0 -0
  70. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/encode-file.jsx +0 -0
  71. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/encode-project-item.jsx +0 -0
  72. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/export-aaf.jsx +0 -0
  73. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/export-fcp-xml.jsx +0 -0
  74. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/export-omf.jsx +0 -0
  75. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/export-sequence-as-project.jsx +0 -0
  76. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/export-sequence.jsx +0 -0
  77. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/extract-audio-track.jsx +0 -0
  78. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/extract-selection.jsx +0 -0
  79. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/find-items-by-media-path.jsx +0 -0
  80. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/freeze-frame.jsx +0 -0
  81. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-active-sequence.jsx +0 -0
  82. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-all-project-paths.jsx +0 -0
  83. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-bin-contents.jsx +0 -0
  84. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-clip-adjustment-layer.jsx +0 -0
  85. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-clip-at-playhead.jsx +0 -0
  86. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-clip-at-position.jsx +0 -0
  87. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-clip-links.jsx +0 -0
  88. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-clip-markers.jsx +0 -0
  89. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-clip-speed.jsx +0 -0
  90. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-color-label.jsx +0 -0
  91. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-color-space.jsx +0 -0
  92. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-duplicate-media.jsx +0 -0
  93. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-effect-properties.jsx +0 -0
  94. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-encoder-presets.jsx +0 -0
  95. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-export-file-extension.jsx +0 -0
  96. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-footage-interpretation.jsx +0 -0
  97. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-full-clip-info.jsx +0 -0
  98. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-full-project-overview.jsx +0 -0
  99. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-full-sequence-info.jsx +0 -0
  100. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-graphics-white-luminance.jsx +0 -0
  101. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-insertion-bin.jsx +0 -0
  102. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-item-metadata.jsx +0 -0
  103. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-keyframes.jsx +0 -0
  104. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-mogrt-component.jsx +0 -0
  105. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-next-edit-point.jsx +0 -0
  106. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-offline-media.jsx +0 -0
  107. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-open-projects.jsx +0 -0
  108. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-premiere-state.jsx +0 -0
  109. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-project-info.jsx +0 -0
  110. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-project-item-info.jsx +0 -0
  111. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-project-panel-metadata.jsx +0 -0
  112. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-qe-clip-info.jsx +0 -0
  113. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-render-queue-status.jsx +0 -0
  114. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-sequence-count.jsx +0 -0
  115. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-sequence-in-out.jsx +0 -0
  116. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-sequence-markers-by-type.jsx +0 -0
  117. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-source-monitor-info.jsx +0 -0
  118. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-source-monitor-position.jsx +0 -0
  119. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-target-tracks.jsx +0 -0
  120. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-timeline-gaps.jsx +0 -0
  121. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-timeline-summary.jsx +0 -0
  122. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-total-clip-count.jsx +0 -0
  123. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-track-info.jsx +0 -0
  124. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-unused-media.jsx +0 -0
  125. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-used-media-report.jsx +0 -0
  126. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-value-at-time.jsx +0 -0
  127. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-version-info.jsx +0 -0
  128. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-work-area.jsx +0 -0
  129. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-workspaces.jsx +0 -0
  130. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/get-xmp-metadata.jsx +0 -0
  131. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/import-ae-comps.jsx +0 -0
  132. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/import-fcp-xml.jsx +0 -0
  133. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/import-folder.jsx +0 -0
  134. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/import-image-sequence.jsx +0 -0
  135. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/import-media.jsx +0 -0
  136. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/import-mogrt-from-library.jsx +0 -0
  137. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/import-mogrt.jsx +0 -0
  138. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/import-sequences-from-project.jsx +0 -0
  139. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/insert-from-source.jsx +0 -0
  140. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/inspect-dom-object.jsx +0 -0
  141. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/invert-selection.jsx +0 -0
  142. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/is-work-area-enabled.jsx +0 -0
  143. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/lift-selection.jsx +0 -0
  144. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/link-selection.jsx +0 -0
  145. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/list-available-audio-effects.jsx +0 -0
  146. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/list-available-audio-transitions.jsx +0 -0
  147. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/list-available-effects.jsx +0 -0
  148. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/list-available-transitions.jsx +0 -0
  149. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/list-markers.jsx +0 -0
  150. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/list-project-items.jsx +0 -0
  151. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/lock-track.jsx +0 -0
  152. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/manage-proxies.jsx +0 -0
  153. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/match-frame.jsx +0 -0
  154. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/move-clip-to-track.jsx +0 -0
  155. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/move-clip.jsx +0 -0
  156. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/move-items-to-bin.jsx +0 -0
  157. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/move-playhead-to-edit.jsx +0 -0
  158. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/move-playhead.jsx +0 -0
  159. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/nest-clips.jsx +0 -0
  160. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/open-in-source.jsx +0 -0
  161. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/open-project.jsx +0 -0
  162. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/overwrite-clip-at.jsx +0 -0
  163. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/overwrite-from-source.jsx +0 -0
  164. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/play-source-monitor.jsx +0 -0
  165. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/play-timeline.jsx +0 -0
  166. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/razor-all-tracks.jsx +0 -0
  167. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/redo.jsx +0 -0
  168. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/refresh-media.jsx +0 -0
  169. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/relink-media.jsx +0 -0
  170. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/remove-all-effects.jsx +0 -0
  171. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/remove-effect-by-name.jsx +0 -0
  172. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/remove-effect.jsx +0 -0
  173. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/remove-from-timeline.jsx +0 -0
  174. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/remove-keyframe-range.jsx +0 -0
  175. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/remove-keyframe.jsx +0 -0
  176. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/remove-selected-clips.jsx +0 -0
  177. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/remove-track-intervals.jsx +0 -0
  178. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/remove-transition.jsx +0 -0
  179. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/rename-bin.jsx +0 -0
  180. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/rename-clip.jsx +0 -0
  181. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/rename-project-item.jsx +0 -0
  182. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/rename-track.jsx +0 -0
  183. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/replace-clip-media.jsx +0 -0
  184. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/replace-clip.jsx +0 -0
  185. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/reverse-clip.jsx +0 -0
  186. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/ripple-delete-clip.jsx +0 -0
  187. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/roll-edit.jsx +0 -0
  188. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/save-project-as.jsx +0 -0
  189. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/save-project.jsx +0 -0
  190. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/scene-edit-detection.jsx +0 -0
  191. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/search-project-items.jsx +0 -0
  192. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/select-all-clips.jsx +0 -0
  193. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/select-clips-by-color.jsx +0 -0
  194. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/select-clips-by-name.jsx +0 -0
  195. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/select-clips-in-range.jsx +0 -0
  196. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/select-disabled-clips.jsx +0 -0
  197. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/select-project-item.jsx +0 -0
  198. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-active-project.jsx +0 -0
  199. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-active-sequence.jsx +0 -0
  200. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-all-tracks-targeted.jsx +0 -0
  201. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-anti-alias-quality.jsx +0 -0
  202. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-blend-mode.jsx +0 -0
  203. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-clip-anchor-point.jsx +0 -0
  204. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-clip-enabled.jsx +0 -0
  205. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-clip-opacity.jsx +0 -0
  206. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-clip-pan.jsx +0 -0
  207. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-clip-position.jsx +0 -0
  208. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-clip-properties.jsx +0 -0
  209. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-clip-rotation.jsx +0 -0
  210. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-clip-scale.jsx +0 -0
  211. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-clip-selection.jsx +0 -0
  212. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-clip-speed.jsx +0 -0
  213. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-clip-volume.jsx +0 -0
  214. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-color-label.jsx +0 -0
  215. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-color-value.jsx +0 -0
  216. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-effect-property.jsx +0 -0
  217. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-footage-interpretation.jsx +0 -0
  218. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-frame-blend.jsx +0 -0
  219. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-graphics-white-luminance.jsx +0 -0
  220. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-item-in-out.jsx +0 -0
  221. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-item-metadata.jsx +0 -0
  222. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-item-offline.jsx +0 -0
  223. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-item-start-time.jsx +0 -0
  224. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-keyframe-interpolation.jsx +0 -0
  225. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-override-frame-rate.jsx +0 -0
  226. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-override-pixel-aspect-ratio.jsx +0 -0
  227. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-poster-frame.jsx +0 -0
  228. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-project-panel-metadata.jsx +0 -0
  229. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-scale-to-frame-size.jsx +0 -0
  230. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-scale-width-height.jsx +0 -0
  231. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-sequence-in-out.jsx +0 -0
  232. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-sequence-settings.jsx +0 -0
  233. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-source-in-out.jsx +0 -0
  234. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-target-track.jsx +0 -0
  235. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-time-interpolation.jsx +0 -0
  236. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-track-mute.jsx +0 -0
  237. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-track-visibility.jsx +0 -0
  238. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-transcode-on-ingest.jsx +0 -0
  239. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-uniform-scale.jsx +0 -0
  240. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-work-area.jsx +0 -0
  241. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-workspace.jsx +0 -0
  242. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/set-xmp-metadata.jsx +0 -0
  243. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/slide-edit.jsx +0 -0
  244. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/slip-edit.jsx +0 -0
  245. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/split-clip.jsx +0 -0
  246. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/stabilize-clip.jsx +0 -0
  247. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/stop-playback.jsx +0 -0
  248. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/trim-clip.jsx +0 -0
  249. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/undo.jsx +0 -0
  250. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/unlink-selection.jsx +0 -0
  251. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/unnest-sequence.jsx +0 -0
  252. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/commands/update-marker.jsx +0 -0
  253. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/index.jsx +0 -0
  254. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/host/presets/default-4k-25fps.sqpreset +0 -0
  255. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/index.html +0 -0
  256. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel/js/cs-interface.js +0 -0
  257. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/panel_install.py +0 -0
  258. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/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
  259. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli/templates/empty-project/Untitled.prproj +0 -0
  260. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli.egg-info/dependency_links.txt +0 -0
  261. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli.egg-info/entry_points.txt +0 -0
  262. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/src/premiere_cli.egg-info/top_level.txt +0 -0
  263. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/tests/test_cli.py +0 -0
  264. {premiere_cli-0.3.0 → premiere_cli-0.4.0}/tests/test_log.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: premiere-cli
3
- Version: 0.3.0
3
+ Version: 0.4.0
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
@@ -9,6 +9,10 @@ Description-Content-Type: text/markdown
9
9
  License-File: LICENSE
10
10
  Provides-Extra: dev
11
11
  Requires-Dist: pytest; extra == "dev"
12
+ Provides-Extra: macos-desktop
13
+ Requires-Dist: pyobjc-framework-Cocoa; extra == "macos-desktop"
14
+ Requires-Dist: pyobjc-framework-ApplicationServices; extra == "macos-desktop"
15
+ Requires-Dist: pyobjc-framework-Quartz; extra == "macos-desktop"
12
16
  Dynamic: license-file
13
17
 
14
18
  # premiere-cli
@@ -53,6 +57,35 @@ targets Premiere Pro 2020+ (CEP 10-12); the API behavior notes in
53
57
  **Premiere Pro 26.3.0 (macOS)** — Premiere's undocumented QE APIs vary by
54
58
  build, so re-verify build-sensitive commands on other versions.
55
59
 
60
+ ### macOS desktop automation (optional)
61
+
62
+ Generic UI-automation primitives for driving Premiere's native UI directly
63
+ (Accessibility API + synthetic key/mouse events) — for actions ExtendScript
64
+ can't do on this build: `desktop-take-screenshot`, `desktop-press-key`,
65
+ `desktop-enter-text`, `desktop-enter-text-with-validate`,
66
+ `desktop-move-mouse`, `desktop-click-mouse` — plus a persistent on-screen
67
+ notification (`desktop-notify` / `desktop-dismiss-notifications`)
68
+ independent of any one command's own process. All confirm Premiere is
69
+ frontmost before sending input. macOS only; needs a separate extra so the
70
+ base CLI stays zero-dependency:
71
+
72
+ ```bash
73
+ pip install "premiere-cli[macos-desktop]"
74
+ ```
75
+
76
+ The terminal (or whatever process runs the CLI) needs the **Accessibility**
77
+ permission: System Settings > Privacy & Security > Accessibility. Grant it
78
+ to the actual process running `premiere-cli` (Terminal, iTerm, etc.), not
79
+ Premiere Pro.
80
+
81
+ This command **posts real keyboard input to whatever app is frontmost** —
82
+ keep Premiere Pro active and hands off the keyboard/mouse while it runs,
83
+ or the input lands in the wrong app. It refuses to run if it can't confirm
84
+ Premiere is frontmost, or if more than one clip is selected (driving the
85
+ LUT picker with multiple clips selected applies the change to all of
86
+ them). See [docs/DESKTOP_DRIVER_NOTES.md](docs/DESKTOP_DRIVER_NOTES.md)
87
+ for the full set of findings behind how this works.
88
+
56
89
  ## Use from the command line
57
90
 
58
91
  ```bash
@@ -1,16 +1,3 @@
1
- Metadata-Version: 2.4
2
- Name: premiere-cli
3
- Version: 0.3.0
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
- License: CC-BY-SA-4.0
6
- Project-URL: Repository, https://github.com/stefanwebb/premiere-cli
7
- Requires-Python: >=3.10
8
- Description-Content-Type: text/markdown
9
- License-File: LICENSE
10
- Provides-Extra: dev
11
- Requires-Dist: pytest; extra == "dev"
12
- Dynamic: license-file
13
-
14
1
  # premiere-cli
15
2
 
16
3
  Drive Adobe Premiere Pro from the command line.
@@ -53,6 +40,35 @@ targets Premiere Pro 2020+ (CEP 10-12); the API behavior notes in
53
40
  **Premiere Pro 26.3.0 (macOS)** — Premiere's undocumented QE APIs vary by
54
41
  build, so re-verify build-sensitive commands on other versions.
55
42
 
43
+ ### macOS desktop automation (optional)
44
+
45
+ Generic UI-automation primitives for driving Premiere's native UI directly
46
+ (Accessibility API + synthetic key/mouse events) — for actions ExtendScript
47
+ can't do on this build: `desktop-take-screenshot`, `desktop-press-key`,
48
+ `desktop-enter-text`, `desktop-enter-text-with-validate`,
49
+ `desktop-move-mouse`, `desktop-click-mouse` — plus a persistent on-screen
50
+ notification (`desktop-notify` / `desktop-dismiss-notifications`)
51
+ independent of any one command's own process. All confirm Premiere is
52
+ frontmost before sending input. macOS only; needs a separate extra so the
53
+ base CLI stays zero-dependency:
54
+
55
+ ```bash
56
+ pip install "premiere-cli[macos-desktop]"
57
+ ```
58
+
59
+ The terminal (or whatever process runs the CLI) needs the **Accessibility**
60
+ permission: System Settings > Privacy & Security > Accessibility. Grant it
61
+ to the actual process running `premiere-cli` (Terminal, iTerm, etc.), not
62
+ Premiere Pro.
63
+
64
+ This command **posts real keyboard input to whatever app is frontmost** —
65
+ keep Premiere Pro active and hands off the keyboard/mouse while it runs,
66
+ or the input lands in the wrong app. It refuses to run if it can't confirm
67
+ Premiere is frontmost, or if more than one clip is selected (driving the
68
+ LUT picker with multiple clips selected applies the change to all of
69
+ them). See [docs/DESKTOP_DRIVER_NOTES.md](docs/DESKTOP_DRIVER_NOTES.md)
70
+ for the full set of findings behind how this works.
71
+
56
72
  ## Use from the command line
57
73
 
58
74
  ```bash
@@ -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.3.0"
9
+ version = "0.4.0"
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"}
@@ -24,6 +24,14 @@ premiere-log = "premiere_cli.log:main"
24
24
 
25
25
  [project.optional-dependencies]
26
26
  dev = ["pytest"]
27
+ # Only needed for `desktop-set-input-lut` (macOS only) — kept out of the base
28
+ # install so `pipx install premiere-cli` stays zero-dependency for everyone
29
+ # who doesn't need UI automation.
30
+ macos-desktop = [
31
+ "pyobjc-framework-Cocoa",
32
+ "pyobjc-framework-ApplicationServices",
33
+ "pyobjc-framework-Quartz",
34
+ ]
27
35
 
28
36
  [tool.setuptools.packages.find]
29
37
  where = ["src"]
@@ -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.3.0"
11
+ __version__ = "0.4.0"
@@ -2,6 +2,7 @@
2
2
 
3
3
  import argparse
4
4
  import json
5
+ import platform
5
6
  import re
6
7
  import sys
7
8
  import urllib.error
@@ -27,6 +28,32 @@ def _validate_response(parsed_json) -> dict:
27
28
  _INTERVAL_LINE_RE = re.compile(r"^(\d{2,3}:\d{2}:\d{2})\s*-\s*(\d{2,3}:\d{2}:\d{2})$")
28
29
 
29
30
 
31
+ def _load_desktop_driver(subcommand: str):
32
+ """Import `desktop_driver`, or exit with a well-formed JSON error if
33
+ this isn't macOS or the `macos-desktop` extra isn't installed — the
34
+ same two-check preamble every `desktop-*` subcommand needs before it
35
+ can do anything."""
36
+ if platform.system() != "Darwin":
37
+ print(
38
+ json.dumps({"ok": False, "error": f"{subcommand} is macOS only (drives the native Accessibility API)"}),
39
+ file=sys.stderr,
40
+ )
41
+ sys.exit(1)
42
+ try:
43
+ from premiere_cli import desktop_driver
44
+ except ImportError as exc:
45
+ print(
46
+ json.dumps({
47
+ "ok": False,
48
+ "error": f"missing the macOS desktop-driver extra ({exc}) — install with: "
49
+ "pip install 'premiere-cli[macos-desktop]'",
50
+ }),
51
+ file=sys.stderr,
52
+ )
53
+ sys.exit(1)
54
+ return desktop_driver
55
+
56
+
30
57
  def _parse_intervals_file(path: str) -> list:
31
58
  """Parse a remove_pauses.py-style cuts file ("MM:SS:FF - MM:SS:FF" per
32
59
  line, blank lines ignored) into [{"start": ..., "end": ...}, ...].
@@ -118,6 +145,73 @@ def main() -> None:
118
145
  help="Directory the project (or series) is created under",
119
146
  )
120
147
 
148
+ desktop_take_screenshot_parser = subparsers.add_parser(
149
+ "desktop-take-screenshot",
150
+ help="Confirm Premiere is frontmost, then save a full-screen screenshot (macOS only)",
151
+ )
152
+ desktop_take_screenshot_parser.add_argument("output_path", help="File path to save the screenshot to (e.g. /tmp/frame.png)")
153
+
154
+ desktop_press_key_parser = subparsers.add_parser(
155
+ "desktop-press-key",
156
+ help="Confirm Premiere is frontmost, then send one synthetic key press (macOS only)",
157
+ )
158
+ desktop_press_key_parser.add_argument(
159
+ "--key", required=True,
160
+ help="Key name (e.g. 'return', 'escape', 'up', 'a') or a decimal virtual keycode",
161
+ )
162
+ desktop_press_key_parser.add_argument(
163
+ "--modifier", dest="modifiers", action="append", default=[],
164
+ choices=["command", "cmd", "shift", "option", "alt", "control", "ctrl"],
165
+ help="Modifier held during the press; repeat for multiple (e.g. --modifier cmd --modifier shift)",
166
+ )
167
+
168
+ desktop_enter_text_parser = subparsers.add_parser(
169
+ "desktop-enter-text",
170
+ help="Confirm Premiere is frontmost, then type literal text at the current insertion point, unvalidated (macOS only)",
171
+ )
172
+ desktop_enter_text_parser.add_argument("text", help="Text to type")
173
+
174
+ desktop_enter_text_with_validate_parser = subparsers.add_parser(
175
+ "desktop-enter-text-with-validate",
176
+ help="Confirm Premiere is frontmost, type text into the focused field, and verify it read back correctly (macOS only). "
177
+ "CAVEAT: Premiere's own panels don't reliably report focus via AX — this often false-fails against them; "
178
+ "prefer desktop-enter-text + a screenshot for Premiere's own UI",
179
+ )
180
+ desktop_enter_text_with_validate_parser.add_argument("text", help="Text to type")
181
+ desktop_enter_text_with_validate_parser.add_argument(
182
+ "--attempts", type=int, default=3, help="Retry count if the read-back doesn't match (default: 3)",
183
+ )
184
+
185
+ desktop_move_mouse_parser = subparsers.add_parser(
186
+ "desktop-move-mouse",
187
+ help="Confirm Premiere is frontmost, then move the mouse cursor to screen coordinates (macOS only)",
188
+ )
189
+ desktop_move_mouse_parser.add_argument("--x", type=float, required=True, help="Target x coordinate")
190
+ desktop_move_mouse_parser.add_argument("--y", type=float, required=True, help="Target y coordinate")
191
+
192
+ desktop_click_mouse_parser = subparsers.add_parser(
193
+ "desktop-click-mouse",
194
+ help="Confirm Premiere is frontmost, then click the mouse — at given coordinates, or at the current cursor position (macOS only)",
195
+ )
196
+ desktop_click_mouse_parser.add_argument("--x", type=float, default=None, help="Click x coordinate (omit with --y to click at the current cursor position)")
197
+ desktop_click_mouse_parser.add_argument("--y", type=float, default=None, help="Click y coordinate (omit with --x to click at the current cursor position)")
198
+ desktop_click_mouse_parser.add_argument("--button", choices=["left", "right"], default="left", help="Mouse button (default: left)")
199
+
200
+ desktop_notify_parser = subparsers.add_parser(
201
+ "desktop-notify",
202
+ help="Show (or update, if already showing) an always-on-top notification window pinned top-right of the screen (macOS only)",
203
+ )
204
+ desktop_notify_parser.add_argument("message", help="Text to display")
205
+ desktop_notify_parser.add_argument(
206
+ "--state", choices=["waiting", "driving", "done", "info"], default="info",
207
+ help="Accent color: waiting=amber, driving=red, done=green, info=slate (default: info)",
208
+ )
209
+
210
+ subparsers.add_parser(
211
+ "desktop-dismiss-notifications",
212
+ help="Close the notification window opened by desktop-notify, if one is showing (macOS only)",
213
+ )
214
+
121
215
  create_sequence_parser = subparsers.add_parser("create-sequence", help="Create a new sequence")
122
216
  create_sequence_parser.add_argument("--name", required=True, help="Name of the new sequence")
123
217
  create_sequence_parser.add_argument(
@@ -2173,6 +2267,30 @@ def main() -> None:
2173
2267
  from premiere_cli import init_project
2174
2268
 
2175
2269
  sys.exit(init_project.init_project(args.project_name, args.series, args.base_dir))
2270
+ if args.subcommand == "desktop-take-screenshot":
2271
+ desktop_driver = _load_desktop_driver(args.subcommand)
2272
+ sys.exit(desktop_driver.take_screenshot(args.output_path, port=args.port))
2273
+ if args.subcommand == "desktop-press-key":
2274
+ desktop_driver = _load_desktop_driver(args.subcommand)
2275
+ sys.exit(desktop_driver.press_key_by_name(args.key, modifiers=args.modifiers, port=args.port))
2276
+ if args.subcommand == "desktop-enter-text":
2277
+ desktop_driver = _load_desktop_driver(args.subcommand)
2278
+ sys.exit(desktop_driver.enter_text(args.text, port=args.port))
2279
+ if args.subcommand == "desktop-enter-text-with-validate":
2280
+ desktop_driver = _load_desktop_driver(args.subcommand)
2281
+ sys.exit(desktop_driver.enter_text_with_validate(args.text, attempts=args.attempts, port=args.port))
2282
+ if args.subcommand == "desktop-move-mouse":
2283
+ desktop_driver = _load_desktop_driver(args.subcommand)
2284
+ sys.exit(desktop_driver.move_mouse(args.x, args.y, port=args.port))
2285
+ if args.subcommand == "desktop-click-mouse":
2286
+ desktop_driver = _load_desktop_driver(args.subcommand)
2287
+ sys.exit(desktop_driver.click_mouse(x=args.x, y=args.y, button=args.button, port=args.port))
2288
+ if args.subcommand == "desktop-notify":
2289
+ desktop_driver = _load_desktop_driver(args.subcommand)
2290
+ sys.exit(desktop_driver.notify(args.message, state=args.state))
2291
+ if args.subcommand == "desktop-dismiss-notifications":
2292
+ desktop_driver = _load_desktop_driver(args.subcommand)
2293
+ sys.exit(desktop_driver.dismiss_notifications())
2176
2294
 
2177
2295
  if args.subcommand == "create-sequence":
2178
2296
  command_args = {"name": args.name, "bin": args.bin, "fps": args.fps, "width": args.width, "height": args.height}