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.
- bladeworks-0.1.0/PKG-INFO +66 -0
- bladeworks-0.1.0/README.md +37 -0
- bladeworks-0.1.0/pyproject.toml +51 -0
- bladeworks-0.1.0/setup.cfg +4 -0
- bladeworks-0.1.0/src/bladeworks/__init__.py +56 -0
- bladeworks-0.1.0/src/bladeworks/__main__.py +4 -0
- bladeworks-0.1.0/src/bladeworks/cli.py +728 -0
- bladeworks-0.1.0/src/bladeworks/core/__init__.py +34 -0
- bladeworks-0.1.0/src/bladeworks/core/animation.py +893 -0
- bladeworks-0.1.0/src/bladeworks/core/animation_execution.py +817 -0
- bladeworks-0.1.0/src/bladeworks/core/audio_enhancements.py +673 -0
- bladeworks-0.1.0/src/bladeworks/core/audio_execution.py +1848 -0
- bladeworks-0.1.0/src/bladeworks/core/audio_ir.py +1971 -0
- bladeworks-0.1.0/src/bladeworks/core/basic_effects.py +168 -0
- bladeworks-0.1.0/src/bladeworks/core/bindings.py +196 -0
- bladeworks-0.1.0/src/bladeworks/core/capabilities.py +257 -0
- bladeworks-0.1.0/src/bladeworks/core/cohort_effects.py +702 -0
- bladeworks-0.1.0/src/bladeworks/core/color.py +324 -0
- bladeworks-0.1.0/src/bladeworks/core/compiler.py +3142 -0
- bladeworks-0.1.0/src/bladeworks/core/composition_diagnostics.py +629 -0
- bladeworks-0.1.0/src/bladeworks/core/composition_ir.py +3154 -0
- bladeworks-0.1.0/src/bladeworks/core/composition_planning.py +708 -0
- bladeworks-0.1.0/src/bladeworks/core/composition_shadow.py +687 -0
- bladeworks-0.1.0/src/bladeworks/core/compositor.py +1186 -0
- bladeworks-0.1.0/src/bladeworks/core/effect_parameter_semantics.py +165 -0
- bladeworks-0.1.0/src/bladeworks/core/effect_parameters.py +193 -0
- bladeworks-0.1.0/src/bladeworks/core/errors.py +21 -0
- bladeworks-0.1.0/src/bladeworks/core/filter_text.py +48 -0
- bladeworks-0.1.0/src/bladeworks/core/geometry.py +1711 -0
- bladeworks-0.1.0/src/bladeworks/core/group_surface.py +664 -0
- bladeworks-0.1.0/src/bladeworks/core/keyer.py +280 -0
- bladeworks-0.1.0/src/bladeworks/core/masks.py +453 -0
- bladeworks-0.1.0/src/bladeworks/core/missing_media.py +130 -0
- bladeworks-0.1.0/src/bladeworks/core/model.py +985 -0
- bladeworks-0.1.0/src/bladeworks/core/multicam_execution.py +496 -0
- bladeworks-0.1.0/src/bladeworks/core/output_color.py +52 -0
- bladeworks-0.1.0/src/bladeworks/core/parser.py +1257 -0
- bladeworks-0.1.0/src/bladeworks/core/pixel_domains.py +433 -0
- bladeworks-0.1.0/src/bladeworks/core/render_profile.py +311 -0
- bladeworks-0.1.0/src/bladeworks/core/render_sources.py +475 -0
- bladeworks-0.1.0/src/bladeworks/core/report.py +118 -0
- bladeworks-0.1.0/src/bladeworks/core/retime.py +967 -0
- bladeworks-0.1.0/src/bladeworks/core/retime_execution.py +1515 -0
- bladeworks-0.1.0/src/bladeworks/core/spatial_intrinsics.py +1749 -0
- bladeworks-0.1.0/src/bladeworks/core/story_containers.py +524 -0
- bladeworks-0.1.0/src/bladeworks/core/story_ir.py +1042 -0
- bladeworks-0.1.0/src/bladeworks/core/text.py +1032 -0
- bladeworks-0.1.0/src/bladeworks/core/text_templates.py +934 -0
- bladeworks-0.1.0/src/bladeworks/data/FCPXML_RENDER_CAPABILITIES.yaml +1797 -0
- bladeworks-0.1.0/src/bladeworks/effects/__init__.py +1 -0
- bladeworks-0.1.0/src/bladeworks/effects/contract.py +162 -0
- bladeworks-0.1.0/src/bladeworks/examples/__init__.py +80 -0
- bladeworks-0.1.0/src/bladeworks/examples/color.fcpxmld/Info.fcpxml +17 -0
- bladeworks-0.1.0/src/bladeworks/examples/color.fcpxmld/Media/a.mp4 +0 -0
- bladeworks-0.1.0/src/bladeworks/examples/crop_or_transition.fcpxmld/Info.fcpxml +13 -0
- bladeworks-0.1.0/src/bladeworks/examples/crop_or_transition.fcpxmld/Media/a.mp4 +0 -0
- bladeworks-0.1.0/src/bladeworks/examples/crop_or_transition.fcpxmld/Media/b.mp4 +0 -0
- bladeworks-0.1.0/src/bladeworks/examples/manual_qa/generate_2h_qa_fixtures.py +237 -0
- bladeworks-0.1.0/src/bladeworks/examples/manual_qa/missing_media_lab.fcpxmld/Info.fcpxml +28 -0
- bladeworks-0.1.0/src/bladeworks/examples/manual_qa/missing_media_lab.fcpxmld/Media/night_signal.mp4 +0 -0
- bladeworks-0.1.0/src/bladeworks/examples/manual_qa/portrait_social.fcpxmld/Info.fcpxml +44 -0
- bladeworks-0.1.0/src/bladeworks/examples/manual_qa/portrait_social.fcpxmld/Media/city_grid.mp4 +0 -0
- bladeworks-0.1.0/src/bladeworks/examples/manual_qa/portrait_social.fcpxmld/Media/golden_hour.mp4 +0 -0
- bladeworks-0.1.0/src/bladeworks/examples/manual_qa/studio_showcase.fcpxmld/Info.fcpxml +113 -0
- bladeworks-0.1.0/src/bladeworks/examples/manual_qa/studio_showcase.fcpxmld/Media/city_grid.mp4 +0 -0
- bladeworks-0.1.0/src/bladeworks/examples/manual_qa/studio_showcase.fcpxmld/Media/golden_hour.mp4 +0 -0
- bladeworks-0.1.0/src/bladeworks/examples/manual_qa/studio_showcase.fcpxmld/Media/night_signal.mp4 +0 -0
- bladeworks-0.1.0/src/bladeworks/examples/single_clip.fcpxmld/Info.fcpxml +9 -0
- bladeworks-0.1.0/src/bladeworks/examples/single_clip.fcpxmld/Media/a.mp4 +0 -0
- bladeworks-0.1.0/src/bladeworks/examples/spine_and_lane.fcpxmld/Info.fcpxml +13 -0
- bladeworks-0.1.0/src/bladeworks/examples/spine_and_lane.fcpxmld/Media/a.mp4 +0 -0
- bladeworks-0.1.0/src/bladeworks/examples/spine_and_lane.fcpxmld/Media/b.mp4 +0 -0
- bladeworks-0.1.0/src/bladeworks/examples/transform.fcpxmld/Info.fcpxml +11 -0
- bladeworks-0.1.0/src/bladeworks/examples/transform.fcpxmld/Media/a.mp4 +0 -0
- bladeworks-0.1.0/src/bladeworks/executor.py +293 -0
- bladeworks-0.1.0/src/bladeworks/preview/__init__.py +11 -0
- bladeworks-0.1.0/src/bladeworks/preview/application.py +84 -0
- bladeworks-0.1.0/src/bladeworks/preview/audio.py +104 -0
- bladeworks-0.1.0/src/bladeworks/preview/capabilities.py +457 -0
- bladeworks-0.1.0/src/bladeworks/preview/contracts.py +157 -0
- bladeworks-0.1.0/src/bladeworks/preview/events.py +55 -0
- bladeworks-0.1.0/src/bladeworks/preview/export.py +57 -0
- bladeworks-0.1.0/src/bladeworks/preview/history.py +197 -0
- bladeworks-0.1.0/src/bladeworks/preview/main.py +19 -0
- bladeworks-0.1.0/src/bladeworks/preview/media.py +23 -0
- bladeworks-0.1.0/src/bladeworks/preview/media_library.py +381 -0
- bladeworks-0.1.0/src/bladeworks/preview/media_reporting.py +55 -0
- bladeworks-0.1.0/src/bladeworks/preview/media_routes.py +155 -0
- bladeworks-0.1.0/src/bladeworks/preview/media_visuals.py +225 -0
- bladeworks-0.1.0/src/bladeworks/preview/producer.py +211 -0
- bladeworks-0.1.0/src/bladeworks/preview/provider.py +74 -0
- bladeworks-0.1.0/src/bladeworks/preview/rawframe.py +218 -0
- bladeworks-0.1.0/src/bladeworks/preview/render_jobs.py +311 -0
- bladeworks-0.1.0/src/bladeworks/preview/routes.py +375 -0
- bladeworks-0.1.0/src/bladeworks/preview/runner.py +349 -0
- bladeworks-0.1.0/src/bladeworks/preview/security.py +61 -0
- bladeworks-0.1.0/src/bladeworks/preview/service.py +234 -0
- bladeworks-0.1.0/src/bladeworks/preview/session.py +457 -0
- bladeworks-0.1.0/src/bladeworks/preview/source.py +603 -0
- bladeworks-0.1.0/src/bladeworks/preview/source_routes.py +151 -0
- bladeworks-0.1.0/src/bladeworks/preview/studio.py +77 -0
- bladeworks-0.1.0/src/bladeworks/preview/webrtc.py +295 -0
- bladeworks-0.1.0/src/bladeworks/spatial_luts/manifest.json +17 -0
- bladeworks-0.1.0/src/bladeworks/spatial_luts/rec2020_hlg_to_rec709_sdr_v1.cube +4917 -0
- bladeworks-0.1.0/src/bladeworks/spatial_luts/rec2020_pq_to_rec709_sdr_v1.cube +4917 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/__init__.py +1 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/app.js +6519 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/build-id.js +1 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/capability-ui.js +68 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/clip-state.js +335 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/fcpxml.js +3313 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/fixtures.js +393 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/history.js +50 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/index.html +24 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/magnetic-timeline.js +1194 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/mask-ui.js +189 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/media-visuals.js +224 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/mock-capabilities.js +409 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/retime-ui.js +151 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/runtime.js +1652 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/scope-ui.js +150 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/styles.css +1558 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/templates/catalog.js +77 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/templates/icons.js +84 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/templates/inspector.js +553 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/templates/library.js +61 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/templates/media.js +185 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/templates/shared.js +43 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/templates/shell.js +94 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/templates/timeline.js +377 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/templates/topbar.js +83 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/templates/types.js +7 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/templates/viewer.js +174 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/templates.js +31 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/types.js +18 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/ui.js +97 -0
- bladeworks-0.1.0/src/bladeworks/studio_static/viewer-geometry.js +55 -0
- bladeworks-0.1.0/src/bladeworks/tensor/__init__.py +131 -0
- bladeworks-0.1.0/src/bladeworks/tensor/audio_delivery.py +280 -0
- bladeworks-0.1.0/src/bladeworks/tensor/audio_pyav.py +360 -0
- bladeworks-0.1.0/src/bladeworks/tensor/blend.py +217 -0
- bladeworks-0.1.0/src/bladeworks/tensor/color.py +53 -0
- bladeworks-0.1.0/src/bladeworks/tensor/composite.py +33 -0
- bladeworks-0.1.0/src/bladeworks/tensor/decode.py +1309 -0
- bladeworks-0.1.0/src/bladeworks/tensor/decode_policy.py +363 -0
- bladeworks-0.1.0/src/bladeworks/tensor/effects.py +322 -0
- bladeworks-0.1.0/src/bladeworks/tensor/encode.py +614 -0
- bladeworks-0.1.0/src/bladeworks/tensor/errors.py +32 -0
- bladeworks-0.1.0/src/bladeworks/tensor/expr.py +775 -0
- bladeworks-0.1.0/src/bladeworks/tensor/fx_basic.py +946 -0
- bladeworks-0.1.0/src/bladeworks/tensor/fx_branched.py +640 -0
- bladeworks-0.1.0/src/bladeworks/tensor/fx_cohort.py +404 -0
- bladeworks-0.1.0/src/bladeworks/tensor/fx_color.py +851 -0
- bladeworks-0.1.0/src/bladeworks/tensor/fx_keyer.py +140 -0
- bladeworks-0.1.0/src/bladeworks/tensor/fx_mask.py +352 -0
- bladeworks-0.1.0/src/bladeworks/tensor/fx_warp.py +337 -0
- bladeworks-0.1.0/src/bladeworks/tensor/hdr.py +122 -0
- bladeworks-0.1.0/src/bladeworks/tensor/pipeline.py +401 -0
- bladeworks-0.1.0/src/bladeworks/tensor/plan.py +2231 -0
- bladeworks-0.1.0/src/bladeworks/tensor/renderer.py +1199 -0
- bladeworks-0.1.0/src/bladeworks/tensor/requirements.txt +28 -0
- bladeworks-0.1.0/src/bladeworks/tensor/resolution.py +246 -0
- bladeworks-0.1.0/src/bladeworks/tensor/sampler.py +598 -0
- bladeworks-0.1.0/src/bladeworks/tensor/support.py +169 -0
- bladeworks-0.1.0/src/bladeworks/tensor/swscale_fixedpoint.py +181 -0
- bladeworks-0.1.0/src/bladeworks/tensor/tr_equirect.py +420 -0
- bladeworks-0.1.0/src/bladeworks/tensor/tr_handlers.py +443 -0
- bladeworks-0.1.0/src/bladeworks/tensor/tr_phase5.py +697 -0
- bladeworks-0.1.0/src/bladeworks/tensor/transitions.py +424 -0
- bladeworks-0.1.0/src/bladeworks/transitions/__init__.py +10 -0
- bladeworks-0.1.0/src/bladeworks/transitions/carryovers.py +299 -0
- bladeworks-0.1.0/src/bladeworks/transitions/cohort.py +981 -0
- bladeworks-0.1.0/src/bladeworks/transitions/contract.py +490 -0
- bladeworks-0.1.0/src/bladeworks/transitions/equirectangular.py +915 -0
- bladeworks-0.1.0/src/bladeworks/transitions/light_deco.py +141 -0
- bladeworks-0.1.0/src/bladeworks/transitions/panel_motion.py +495 -0
- bladeworks-0.1.0/src/bladeworks/transitions/stock.py +270 -0
- bladeworks-0.1.0/src/bladeworks.egg-info/PKG-INFO +66 -0
- bladeworks-0.1.0/src/bladeworks.egg-info/SOURCES.txt +223 -0
- bladeworks-0.1.0/src/bladeworks.egg-info/dependency_links.txt +1 -0
- bladeworks-0.1.0/src/bladeworks.egg-info/entry_points.txt +2 -0
- bladeworks-0.1.0/src/bladeworks.egg-info/requires.txt +13 -0
- bladeworks-0.1.0/src/bladeworks.egg-info/top_level.txt +1 -0
- bladeworks-0.1.0/tests/test_animation_execution.py +378 -0
- bladeworks-0.1.0/tests/test_animation_kernel.py +405 -0
- bladeworks-0.1.0/tests/test_audio_enhancements.py +370 -0
- bladeworks-0.1.0/tests/test_audio_execution.py +510 -0
- bladeworks-0.1.0/tests/test_audio_graph_serialize_golden.py +111 -0
- bladeworks-0.1.0/tests/test_audio_ir.py +380 -0
- bladeworks-0.1.0/tests/test_bladeworks_capabilities.py +390 -0
- bladeworks-0.1.0/tests/test_bladeworks_media_library.py +438 -0
- bladeworks-0.1.0/tests/test_bladeworks_render_profiles.py +182 -0
- bladeworks-0.1.0/tests/test_bladeworks_studio_host.py +56 -0
- bladeworks-0.1.0/tests/test_cli_bladeworks.py +319 -0
- bladeworks-0.1.0/tests/test_cli_projects.py +146 -0
- bladeworks-0.1.0/tests/test_fcpxmld_fixtures.py +150 -0
- bladeworks-0.1.0/tests/test_full_library_project_selection.py +100 -0
- bladeworks-0.1.0/tests/test_geometry_plan.py +765 -0
- bladeworks-0.1.0/tests/test_group_surface.py +345 -0
- bladeworks-0.1.0/tests/test_keyword_metadata.py +65 -0
- bladeworks-0.1.0/tests/test_multicam_execution.py +544 -0
- bladeworks-0.1.0/tests/test_parser_sequence_duration.py +32 -0
- bladeworks-0.1.0/tests/test_render_sources.py +189 -0
- bladeworks-0.1.0/tests/test_retime_execution.py +697 -0
- bladeworks-0.1.0/tests/test_retime_map.py +313 -0
- bladeworks-0.1.0/tests/test_reviewed_transition_repairs.py +191 -0
- bladeworks-0.1.0/tests/test_semantic_dispositions.py +255 -0
- bladeworks-0.1.0/tests/test_source_bound_tolerance.py +79 -0
- bladeworks-0.1.0/tests/test_source_preservation.py +328 -0
- bladeworks-0.1.0/tests/test_spatial_intrinsics.py +426 -0
- bladeworks-0.1.0/tests/test_story_containers.py +237 -0
- bladeworks-0.1.0/tests/test_story_ir.py +280 -0
- bladeworks-0.1.0/tests/test_tensor_audio_delivery.py +177 -0
- bladeworks-0.1.0/tests/test_tensor_audio_parity.py +245 -0
- bladeworks-0.1.0/tests/test_tensor_blend.py +164 -0
- bladeworks-0.1.0/tests/test_tensor_expr.py +366 -0
- bladeworks-0.1.0/tests/test_tensor_fx_cohort.py +301 -0
- bladeworks-0.1.0/tests/test_tensor_masks_keyer.py +440 -0
- bladeworks-0.1.0/tests/test_tensor_preview_api.py +1337 -0
- bladeworks-0.1.0/tests/test_tensor_resolution.py +98 -0
- bladeworks-0.1.0/tests/test_tensor_sampler.py +319 -0
- bladeworks-0.1.0/tests/test_tensor_source_rotation.py +272 -0
- bladeworks-0.1.0/tests/test_tensor_source_routes.py +190 -0
- bladeworks-0.1.0/tests/test_tensor_source_store.py +392 -0
- 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,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}")
|