bladeworks 0.1.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 (225) hide show
  1. bladeworks-0.1.0/PKG-INFO +66 -0
  2. bladeworks-0.1.0/README.md +37 -0
  3. bladeworks-0.1.0/pyproject.toml +51 -0
  4. bladeworks-0.1.0/setup.cfg +4 -0
  5. bladeworks-0.1.0/src/bladeworks/__init__.py +56 -0
  6. bladeworks-0.1.0/src/bladeworks/__main__.py +4 -0
  7. bladeworks-0.1.0/src/bladeworks/cli.py +728 -0
  8. bladeworks-0.1.0/src/bladeworks/core/__init__.py +34 -0
  9. bladeworks-0.1.0/src/bladeworks/core/animation.py +893 -0
  10. bladeworks-0.1.0/src/bladeworks/core/animation_execution.py +817 -0
  11. bladeworks-0.1.0/src/bladeworks/core/audio_enhancements.py +673 -0
  12. bladeworks-0.1.0/src/bladeworks/core/audio_execution.py +1848 -0
  13. bladeworks-0.1.0/src/bladeworks/core/audio_ir.py +1971 -0
  14. bladeworks-0.1.0/src/bladeworks/core/basic_effects.py +168 -0
  15. bladeworks-0.1.0/src/bladeworks/core/bindings.py +196 -0
  16. bladeworks-0.1.0/src/bladeworks/core/capabilities.py +257 -0
  17. bladeworks-0.1.0/src/bladeworks/core/cohort_effects.py +702 -0
  18. bladeworks-0.1.0/src/bladeworks/core/color.py +324 -0
  19. bladeworks-0.1.0/src/bladeworks/core/compiler.py +3142 -0
  20. bladeworks-0.1.0/src/bladeworks/core/composition_diagnostics.py +629 -0
  21. bladeworks-0.1.0/src/bladeworks/core/composition_ir.py +3154 -0
  22. bladeworks-0.1.0/src/bladeworks/core/composition_planning.py +708 -0
  23. bladeworks-0.1.0/src/bladeworks/core/composition_shadow.py +687 -0
  24. bladeworks-0.1.0/src/bladeworks/core/compositor.py +1186 -0
  25. bladeworks-0.1.0/src/bladeworks/core/effect_parameter_semantics.py +165 -0
  26. bladeworks-0.1.0/src/bladeworks/core/effect_parameters.py +193 -0
  27. bladeworks-0.1.0/src/bladeworks/core/errors.py +21 -0
  28. bladeworks-0.1.0/src/bladeworks/core/filter_text.py +48 -0
  29. bladeworks-0.1.0/src/bladeworks/core/geometry.py +1711 -0
  30. bladeworks-0.1.0/src/bladeworks/core/group_surface.py +664 -0
  31. bladeworks-0.1.0/src/bladeworks/core/keyer.py +280 -0
  32. bladeworks-0.1.0/src/bladeworks/core/masks.py +453 -0
  33. bladeworks-0.1.0/src/bladeworks/core/missing_media.py +130 -0
  34. bladeworks-0.1.0/src/bladeworks/core/model.py +985 -0
  35. bladeworks-0.1.0/src/bladeworks/core/multicam_execution.py +496 -0
  36. bladeworks-0.1.0/src/bladeworks/core/output_color.py +52 -0
  37. bladeworks-0.1.0/src/bladeworks/core/parser.py +1257 -0
  38. bladeworks-0.1.0/src/bladeworks/core/pixel_domains.py +433 -0
  39. bladeworks-0.1.0/src/bladeworks/core/render_profile.py +311 -0
  40. bladeworks-0.1.0/src/bladeworks/core/render_sources.py +475 -0
  41. bladeworks-0.1.0/src/bladeworks/core/report.py +118 -0
  42. bladeworks-0.1.0/src/bladeworks/core/retime.py +967 -0
  43. bladeworks-0.1.0/src/bladeworks/core/retime_execution.py +1515 -0
  44. bladeworks-0.1.0/src/bladeworks/core/spatial_intrinsics.py +1749 -0
  45. bladeworks-0.1.0/src/bladeworks/core/story_containers.py +524 -0
  46. bladeworks-0.1.0/src/bladeworks/core/story_ir.py +1042 -0
  47. bladeworks-0.1.0/src/bladeworks/core/text.py +1032 -0
  48. bladeworks-0.1.0/src/bladeworks/core/text_templates.py +934 -0
  49. bladeworks-0.1.0/src/bladeworks/data/FCPXML_RENDER_CAPABILITIES.yaml +1797 -0
  50. bladeworks-0.1.0/src/bladeworks/effects/__init__.py +1 -0
  51. bladeworks-0.1.0/src/bladeworks/effects/contract.py +162 -0
  52. bladeworks-0.1.0/src/bladeworks/examples/__init__.py +80 -0
  53. bladeworks-0.1.0/src/bladeworks/examples/color.fcpxmld/Info.fcpxml +17 -0
  54. bladeworks-0.1.0/src/bladeworks/examples/color.fcpxmld/Media/a.mp4 +0 -0
  55. bladeworks-0.1.0/src/bladeworks/examples/crop_or_transition.fcpxmld/Info.fcpxml +13 -0
  56. bladeworks-0.1.0/src/bladeworks/examples/crop_or_transition.fcpxmld/Media/a.mp4 +0 -0
  57. bladeworks-0.1.0/src/bladeworks/examples/crop_or_transition.fcpxmld/Media/b.mp4 +0 -0
  58. bladeworks-0.1.0/src/bladeworks/examples/manual_qa/generate_2h_qa_fixtures.py +237 -0
  59. bladeworks-0.1.0/src/bladeworks/examples/manual_qa/missing_media_lab.fcpxmld/Info.fcpxml +28 -0
  60. bladeworks-0.1.0/src/bladeworks/examples/manual_qa/missing_media_lab.fcpxmld/Media/night_signal.mp4 +0 -0
  61. bladeworks-0.1.0/src/bladeworks/examples/manual_qa/portrait_social.fcpxmld/Info.fcpxml +44 -0
  62. bladeworks-0.1.0/src/bladeworks/examples/manual_qa/portrait_social.fcpxmld/Media/city_grid.mp4 +0 -0
  63. bladeworks-0.1.0/src/bladeworks/examples/manual_qa/portrait_social.fcpxmld/Media/golden_hour.mp4 +0 -0
  64. bladeworks-0.1.0/src/bladeworks/examples/manual_qa/studio_showcase.fcpxmld/Info.fcpxml +113 -0
  65. bladeworks-0.1.0/src/bladeworks/examples/manual_qa/studio_showcase.fcpxmld/Media/city_grid.mp4 +0 -0
  66. bladeworks-0.1.0/src/bladeworks/examples/manual_qa/studio_showcase.fcpxmld/Media/golden_hour.mp4 +0 -0
  67. bladeworks-0.1.0/src/bladeworks/examples/manual_qa/studio_showcase.fcpxmld/Media/night_signal.mp4 +0 -0
  68. bladeworks-0.1.0/src/bladeworks/examples/single_clip.fcpxmld/Info.fcpxml +9 -0
  69. bladeworks-0.1.0/src/bladeworks/examples/single_clip.fcpxmld/Media/a.mp4 +0 -0
  70. bladeworks-0.1.0/src/bladeworks/examples/spine_and_lane.fcpxmld/Info.fcpxml +13 -0
  71. bladeworks-0.1.0/src/bladeworks/examples/spine_and_lane.fcpxmld/Media/a.mp4 +0 -0
  72. bladeworks-0.1.0/src/bladeworks/examples/spine_and_lane.fcpxmld/Media/b.mp4 +0 -0
  73. bladeworks-0.1.0/src/bladeworks/examples/transform.fcpxmld/Info.fcpxml +11 -0
  74. bladeworks-0.1.0/src/bladeworks/examples/transform.fcpxmld/Media/a.mp4 +0 -0
  75. bladeworks-0.1.0/src/bladeworks/executor.py +293 -0
  76. bladeworks-0.1.0/src/bladeworks/preview/__init__.py +11 -0
  77. bladeworks-0.1.0/src/bladeworks/preview/application.py +84 -0
  78. bladeworks-0.1.0/src/bladeworks/preview/audio.py +104 -0
  79. bladeworks-0.1.0/src/bladeworks/preview/capabilities.py +457 -0
  80. bladeworks-0.1.0/src/bladeworks/preview/contracts.py +157 -0
  81. bladeworks-0.1.0/src/bladeworks/preview/events.py +55 -0
  82. bladeworks-0.1.0/src/bladeworks/preview/export.py +57 -0
  83. bladeworks-0.1.0/src/bladeworks/preview/history.py +197 -0
  84. bladeworks-0.1.0/src/bladeworks/preview/main.py +19 -0
  85. bladeworks-0.1.0/src/bladeworks/preview/media.py +23 -0
  86. bladeworks-0.1.0/src/bladeworks/preview/media_library.py +381 -0
  87. bladeworks-0.1.0/src/bladeworks/preview/media_reporting.py +55 -0
  88. bladeworks-0.1.0/src/bladeworks/preview/media_routes.py +155 -0
  89. bladeworks-0.1.0/src/bladeworks/preview/media_visuals.py +225 -0
  90. bladeworks-0.1.0/src/bladeworks/preview/producer.py +211 -0
  91. bladeworks-0.1.0/src/bladeworks/preview/provider.py +74 -0
  92. bladeworks-0.1.0/src/bladeworks/preview/rawframe.py +218 -0
  93. bladeworks-0.1.0/src/bladeworks/preview/render_jobs.py +311 -0
  94. bladeworks-0.1.0/src/bladeworks/preview/routes.py +375 -0
  95. bladeworks-0.1.0/src/bladeworks/preview/runner.py +349 -0
  96. bladeworks-0.1.0/src/bladeworks/preview/security.py +61 -0
  97. bladeworks-0.1.0/src/bladeworks/preview/service.py +234 -0
  98. bladeworks-0.1.0/src/bladeworks/preview/session.py +457 -0
  99. bladeworks-0.1.0/src/bladeworks/preview/source.py +603 -0
  100. bladeworks-0.1.0/src/bladeworks/preview/source_routes.py +151 -0
  101. bladeworks-0.1.0/src/bladeworks/preview/studio.py +77 -0
  102. bladeworks-0.1.0/src/bladeworks/preview/webrtc.py +295 -0
  103. bladeworks-0.1.0/src/bladeworks/spatial_luts/manifest.json +17 -0
  104. bladeworks-0.1.0/src/bladeworks/spatial_luts/rec2020_hlg_to_rec709_sdr_v1.cube +4917 -0
  105. bladeworks-0.1.0/src/bladeworks/spatial_luts/rec2020_pq_to_rec709_sdr_v1.cube +4917 -0
  106. bladeworks-0.1.0/src/bladeworks/studio_static/__init__.py +1 -0
  107. bladeworks-0.1.0/src/bladeworks/studio_static/app.js +6519 -0
  108. bladeworks-0.1.0/src/bladeworks/studio_static/build-id.js +1 -0
  109. bladeworks-0.1.0/src/bladeworks/studio_static/capability-ui.js +68 -0
  110. bladeworks-0.1.0/src/bladeworks/studio_static/clip-state.js +335 -0
  111. bladeworks-0.1.0/src/bladeworks/studio_static/fcpxml.js +3313 -0
  112. bladeworks-0.1.0/src/bladeworks/studio_static/fixtures.js +393 -0
  113. bladeworks-0.1.0/src/bladeworks/studio_static/history.js +50 -0
  114. bladeworks-0.1.0/src/bladeworks/studio_static/index.html +24 -0
  115. bladeworks-0.1.0/src/bladeworks/studio_static/magnetic-timeline.js +1194 -0
  116. bladeworks-0.1.0/src/bladeworks/studio_static/mask-ui.js +189 -0
  117. bladeworks-0.1.0/src/bladeworks/studio_static/media-visuals.js +224 -0
  118. bladeworks-0.1.0/src/bladeworks/studio_static/mock-capabilities.js +409 -0
  119. bladeworks-0.1.0/src/bladeworks/studio_static/retime-ui.js +151 -0
  120. bladeworks-0.1.0/src/bladeworks/studio_static/runtime.js +1652 -0
  121. bladeworks-0.1.0/src/bladeworks/studio_static/scope-ui.js +150 -0
  122. bladeworks-0.1.0/src/bladeworks/studio_static/styles.css +1558 -0
  123. bladeworks-0.1.0/src/bladeworks/studio_static/templates/catalog.js +77 -0
  124. bladeworks-0.1.0/src/bladeworks/studio_static/templates/icons.js +84 -0
  125. bladeworks-0.1.0/src/bladeworks/studio_static/templates/inspector.js +553 -0
  126. bladeworks-0.1.0/src/bladeworks/studio_static/templates/library.js +61 -0
  127. bladeworks-0.1.0/src/bladeworks/studio_static/templates/media.js +185 -0
  128. bladeworks-0.1.0/src/bladeworks/studio_static/templates/shared.js +43 -0
  129. bladeworks-0.1.0/src/bladeworks/studio_static/templates/shell.js +94 -0
  130. bladeworks-0.1.0/src/bladeworks/studio_static/templates/timeline.js +377 -0
  131. bladeworks-0.1.0/src/bladeworks/studio_static/templates/topbar.js +83 -0
  132. bladeworks-0.1.0/src/bladeworks/studio_static/templates/types.js +7 -0
  133. bladeworks-0.1.0/src/bladeworks/studio_static/templates/viewer.js +174 -0
  134. bladeworks-0.1.0/src/bladeworks/studio_static/templates.js +31 -0
  135. bladeworks-0.1.0/src/bladeworks/studio_static/types.js +18 -0
  136. bladeworks-0.1.0/src/bladeworks/studio_static/ui.js +97 -0
  137. bladeworks-0.1.0/src/bladeworks/studio_static/viewer-geometry.js +55 -0
  138. bladeworks-0.1.0/src/bladeworks/tensor/__init__.py +131 -0
  139. bladeworks-0.1.0/src/bladeworks/tensor/audio_delivery.py +280 -0
  140. bladeworks-0.1.0/src/bladeworks/tensor/audio_pyav.py +360 -0
  141. bladeworks-0.1.0/src/bladeworks/tensor/blend.py +217 -0
  142. bladeworks-0.1.0/src/bladeworks/tensor/color.py +53 -0
  143. bladeworks-0.1.0/src/bladeworks/tensor/composite.py +33 -0
  144. bladeworks-0.1.0/src/bladeworks/tensor/decode.py +1309 -0
  145. bladeworks-0.1.0/src/bladeworks/tensor/decode_policy.py +363 -0
  146. bladeworks-0.1.0/src/bladeworks/tensor/effects.py +322 -0
  147. bladeworks-0.1.0/src/bladeworks/tensor/encode.py +614 -0
  148. bladeworks-0.1.0/src/bladeworks/tensor/errors.py +32 -0
  149. bladeworks-0.1.0/src/bladeworks/tensor/expr.py +775 -0
  150. bladeworks-0.1.0/src/bladeworks/tensor/fx_basic.py +946 -0
  151. bladeworks-0.1.0/src/bladeworks/tensor/fx_branched.py +640 -0
  152. bladeworks-0.1.0/src/bladeworks/tensor/fx_cohort.py +404 -0
  153. bladeworks-0.1.0/src/bladeworks/tensor/fx_color.py +851 -0
  154. bladeworks-0.1.0/src/bladeworks/tensor/fx_keyer.py +140 -0
  155. bladeworks-0.1.0/src/bladeworks/tensor/fx_mask.py +352 -0
  156. bladeworks-0.1.0/src/bladeworks/tensor/fx_warp.py +337 -0
  157. bladeworks-0.1.0/src/bladeworks/tensor/hdr.py +122 -0
  158. bladeworks-0.1.0/src/bladeworks/tensor/pipeline.py +401 -0
  159. bladeworks-0.1.0/src/bladeworks/tensor/plan.py +2231 -0
  160. bladeworks-0.1.0/src/bladeworks/tensor/renderer.py +1199 -0
  161. bladeworks-0.1.0/src/bladeworks/tensor/requirements.txt +28 -0
  162. bladeworks-0.1.0/src/bladeworks/tensor/resolution.py +246 -0
  163. bladeworks-0.1.0/src/bladeworks/tensor/sampler.py +598 -0
  164. bladeworks-0.1.0/src/bladeworks/tensor/support.py +169 -0
  165. bladeworks-0.1.0/src/bladeworks/tensor/swscale_fixedpoint.py +181 -0
  166. bladeworks-0.1.0/src/bladeworks/tensor/tr_equirect.py +420 -0
  167. bladeworks-0.1.0/src/bladeworks/tensor/tr_handlers.py +443 -0
  168. bladeworks-0.1.0/src/bladeworks/tensor/tr_phase5.py +697 -0
  169. bladeworks-0.1.0/src/bladeworks/tensor/transitions.py +424 -0
  170. bladeworks-0.1.0/src/bladeworks/transitions/__init__.py +10 -0
  171. bladeworks-0.1.0/src/bladeworks/transitions/carryovers.py +299 -0
  172. bladeworks-0.1.0/src/bladeworks/transitions/cohort.py +981 -0
  173. bladeworks-0.1.0/src/bladeworks/transitions/contract.py +490 -0
  174. bladeworks-0.1.0/src/bladeworks/transitions/equirectangular.py +915 -0
  175. bladeworks-0.1.0/src/bladeworks/transitions/light_deco.py +141 -0
  176. bladeworks-0.1.0/src/bladeworks/transitions/panel_motion.py +495 -0
  177. bladeworks-0.1.0/src/bladeworks/transitions/stock.py +270 -0
  178. bladeworks-0.1.0/src/bladeworks.egg-info/PKG-INFO +66 -0
  179. bladeworks-0.1.0/src/bladeworks.egg-info/SOURCES.txt +223 -0
  180. bladeworks-0.1.0/src/bladeworks.egg-info/dependency_links.txt +1 -0
  181. bladeworks-0.1.0/src/bladeworks.egg-info/entry_points.txt +2 -0
  182. bladeworks-0.1.0/src/bladeworks.egg-info/requires.txt +13 -0
  183. bladeworks-0.1.0/src/bladeworks.egg-info/top_level.txt +1 -0
  184. bladeworks-0.1.0/tests/test_animation_execution.py +378 -0
  185. bladeworks-0.1.0/tests/test_animation_kernel.py +405 -0
  186. bladeworks-0.1.0/tests/test_audio_enhancements.py +370 -0
  187. bladeworks-0.1.0/tests/test_audio_execution.py +510 -0
  188. bladeworks-0.1.0/tests/test_audio_graph_serialize_golden.py +111 -0
  189. bladeworks-0.1.0/tests/test_audio_ir.py +380 -0
  190. bladeworks-0.1.0/tests/test_bladeworks_capabilities.py +390 -0
  191. bladeworks-0.1.0/tests/test_bladeworks_media_library.py +438 -0
  192. bladeworks-0.1.0/tests/test_bladeworks_render_profiles.py +182 -0
  193. bladeworks-0.1.0/tests/test_bladeworks_studio_host.py +56 -0
  194. bladeworks-0.1.0/tests/test_cli_bladeworks.py +319 -0
  195. bladeworks-0.1.0/tests/test_cli_projects.py +146 -0
  196. bladeworks-0.1.0/tests/test_fcpxmld_fixtures.py +150 -0
  197. bladeworks-0.1.0/tests/test_full_library_project_selection.py +100 -0
  198. bladeworks-0.1.0/tests/test_geometry_plan.py +765 -0
  199. bladeworks-0.1.0/tests/test_group_surface.py +345 -0
  200. bladeworks-0.1.0/tests/test_keyword_metadata.py +65 -0
  201. bladeworks-0.1.0/tests/test_multicam_execution.py +544 -0
  202. bladeworks-0.1.0/tests/test_parser_sequence_duration.py +32 -0
  203. bladeworks-0.1.0/tests/test_render_sources.py +189 -0
  204. bladeworks-0.1.0/tests/test_retime_execution.py +697 -0
  205. bladeworks-0.1.0/tests/test_retime_map.py +313 -0
  206. bladeworks-0.1.0/tests/test_reviewed_transition_repairs.py +191 -0
  207. bladeworks-0.1.0/tests/test_semantic_dispositions.py +255 -0
  208. bladeworks-0.1.0/tests/test_source_bound_tolerance.py +79 -0
  209. bladeworks-0.1.0/tests/test_source_preservation.py +328 -0
  210. bladeworks-0.1.0/tests/test_spatial_intrinsics.py +426 -0
  211. bladeworks-0.1.0/tests/test_story_containers.py +237 -0
  212. bladeworks-0.1.0/tests/test_story_ir.py +280 -0
  213. bladeworks-0.1.0/tests/test_tensor_audio_delivery.py +177 -0
  214. bladeworks-0.1.0/tests/test_tensor_audio_parity.py +245 -0
  215. bladeworks-0.1.0/tests/test_tensor_blend.py +164 -0
  216. bladeworks-0.1.0/tests/test_tensor_expr.py +366 -0
  217. bladeworks-0.1.0/tests/test_tensor_fx_cohort.py +301 -0
  218. bladeworks-0.1.0/tests/test_tensor_masks_keyer.py +440 -0
  219. bladeworks-0.1.0/tests/test_tensor_preview_api.py +1337 -0
  220. bladeworks-0.1.0/tests/test_tensor_resolution.py +98 -0
  221. bladeworks-0.1.0/tests/test_tensor_sampler.py +319 -0
  222. bladeworks-0.1.0/tests/test_tensor_source_rotation.py +272 -0
  223. bladeworks-0.1.0/tests/test_tensor_source_routes.py +190 -0
  224. bladeworks-0.1.0/tests/test_tensor_source_store.py +392 -0
  225. bladeworks-0.1.0/tests/test_tensor_transition_golden.py +561 -0
@@ -0,0 +1,66 @@
1
+ Metadata-Version: 2.4
2
+ Name: bladeworks
3
+ Version: 0.1.0
4
+ Summary: Render portable Final Cut Pro XML projects to video.
5
+ Project-URL: Homepage, https://github.com/bladeworks-ai/bladeworks
6
+ Project-URL: Repository, https://github.com/bladeworks-ai/bladeworks
7
+ Project-URL: Issues, https://github.com/bladeworks-ai/bladeworks/issues
8
+ Classifier: Development Status :: 3 - Alpha
9
+ Classifier: Environment :: Console
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3.10
12
+ Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Programming Language :: Python :: 3.12
14
+ Classifier: Topic :: Multimedia :: Video
15
+ Requires-Python: >=3.10
16
+ Description-Content-Type: text/markdown
17
+ Requires-Dist: torch>=2
18
+ Requires-Dist: av>=15
19
+ Requires-Dist: numpy
20
+ Requires-Dist: tqdm
21
+ Requires-Dist: Pillow>=10
22
+ Requires-Dist: fonttools>=4.50
23
+ Requires-Dist: fastapi>=0.110
24
+ Requires-Dist: uvicorn>=0.29
25
+ Requires-Dist: aiortc>=1.14
26
+ Provides-Extra: test
27
+ Requires-Dist: pytest>=8; extra == "test"
28
+ Requires-Dist: httpx>=0.27; extra == "test"
29
+
30
+ # Bladeworks
31
+
32
+ Bladeworks renders portable Final Cut Pro XML projects (`.fcpxml` files and
33
+ `.fcpxmld` bundles) to video.
34
+
35
+ ## Install
36
+
37
+ ```bash
38
+ python -m pip install bladeworks
39
+ ```
40
+
41
+ Bladeworks requires `ffprobe` on `PATH` to inspect source media. Run the
42
+ prerequisite check after installation:
43
+
44
+ ```bash
45
+ bladeworks doctor
46
+ ```
47
+
48
+ ## Render
49
+
50
+ ```bash
51
+ bladeworks render path/to/project.fcpxmld --output output.mp4
52
+ ```
53
+
54
+ See all commands and options:
55
+
56
+ ```bash
57
+ bladeworks --help
58
+ ```
59
+
60
+ ## Test a checkout
61
+
62
+ ```bash
63
+ python -m pip install -r requirements.txt
64
+ python -m pip install -e . --no-deps
65
+ python -m pytest -q
66
+ ```
@@ -0,0 +1,37 @@
1
+ # Bladeworks
2
+
3
+ Bladeworks renders portable Final Cut Pro XML projects (`.fcpxml` files and
4
+ `.fcpxmld` bundles) to video.
5
+
6
+ ## Install
7
+
8
+ ```bash
9
+ python -m pip install bladeworks
10
+ ```
11
+
12
+ Bladeworks requires `ffprobe` on `PATH` to inspect source media. Run the
13
+ prerequisite check after installation:
14
+
15
+ ```bash
16
+ bladeworks doctor
17
+ ```
18
+
19
+ ## Render
20
+
21
+ ```bash
22
+ bladeworks render path/to/project.fcpxmld --output output.mp4
23
+ ```
24
+
25
+ See all commands and options:
26
+
27
+ ```bash
28
+ bladeworks --help
29
+ ```
30
+
31
+ ## Test a checkout
32
+
33
+ ```bash
34
+ python -m pip install -r requirements.txt
35
+ python -m pip install -e . --no-deps
36
+ python -m pytest -q
37
+ ```
@@ -0,0 +1,51 @@
1
+ [build-system]
2
+ requires = ["setuptools>=64", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "bladeworks"
7
+ version = "0.1.0"
8
+ description = "Render portable Final Cut Pro XML projects to video."
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ dependencies = [
12
+ "torch>=2",
13
+ "av>=15",
14
+ "numpy",
15
+ "tqdm",
16
+ "Pillow>=10",
17
+ "fonttools>=4.50",
18
+ "fastapi>=0.110",
19
+ "uvicorn>=0.29",
20
+ "aiortc>=1.14",
21
+ ]
22
+ classifiers = [
23
+ "Development Status :: 3 - Alpha",
24
+ "Environment :: Console",
25
+ "Programming Language :: Python :: 3",
26
+ "Programming Language :: Python :: 3.10",
27
+ "Programming Language :: Python :: 3.11",
28
+ "Programming Language :: Python :: 3.12",
29
+ "Topic :: Multimedia :: Video",
30
+ ]
31
+
32
+ [project.optional-dependencies]
33
+ test = ["pytest>=8", "httpx>=0.27"]
34
+
35
+ [project.urls]
36
+ Homepage = "https://github.com/bladeworks-ai/bladeworks"
37
+ Repository = "https://github.com/bladeworks-ai/bladeworks"
38
+ Issues = "https://github.com/bladeworks-ai/bladeworks/issues"
39
+
40
+ [project.scripts]
41
+ bladeworks = "bladeworks.cli:main"
42
+
43
+ [tool.setuptools]
44
+ package-dir = {"" = "src"}
45
+
46
+ [tool.setuptools.packages.find]
47
+ where = ["src"]
48
+ include = ["bladeworks*"]
49
+
50
+ [tool.setuptools.package-data]
51
+ bladeworks = ["**/*"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,56 @@
1
+ """Portable FCPXML compiler and renderer.
2
+
3
+ Architecture map
4
+ ================
5
+
6
+ ``parse_fcpxml`` keeps source hierarchy and rational time intact.
7
+ ``compile_fcpxml`` resolves that source graph into renderer-facing clips.
8
+ ``execute_render`` turns the render document into a video.
9
+
10
+ The package deliberately does not import the existing Swift/SPLYML converter:
11
+ that converter targets edit interchange and is allowed to lose Final Cut-only
12
+ details, while this package needs those details to explain every render choice.
13
+ """
14
+
15
+ from __future__ import annotations
16
+
17
+ from typing import TYPE_CHECKING, Any
18
+
19
+ if TYPE_CHECKING:
20
+ from .core.compiler import CompileResult
21
+ from .executor import RenderResult
22
+
23
+ __all__ = [
24
+ "CompileResult",
25
+ "RenderResult",
26
+ "compile_fcpxml",
27
+ "execute_render",
28
+ "parse_fcpxml",
29
+ ]
30
+
31
+
32
+ def __getattr__(name: str) -> Any:
33
+ """Load renderer APIs only when a caller asks for one.
34
+
35
+ Main callers:
36
+ Users importing a symbol from the package root.
37
+
38
+ Why this exists:
39
+ Python imports the package before running ``python -m bladeworks``.
40
+ Keeping the root lightweight lets help and package introspection work
41
+ without initializing PyTorch and the video runtime.
42
+ """
43
+
44
+ if name in {"CompileResult", "compile_fcpxml"}:
45
+ from .core import compiler
46
+
47
+ return getattr(compiler, name)
48
+ if name in {"RenderResult", "execute_render"}:
49
+ from . import executor
50
+
51
+ return getattr(executor, name)
52
+ if name == "parse_fcpxml":
53
+ from .core.parser import parse_fcpxml
54
+
55
+ return parse_fcpxml
56
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
@@ -0,0 +1,4 @@
1
+ from .cli import main
2
+
3
+
4
+ raise SystemExit(main())