framerudiments 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.
- framerudiments-0.4.0/MANIFEST.in +11 -0
- {framerudiments-0.3.0/src/framerudiments.egg-info → framerudiments-0.4.0}/PKG-INFO +222 -1
- framerudiments-0.4.0/README.md +459 -0
- framerudiments-0.4.0/RELEASE_NOTES.md +36 -0
- framerudiments-0.4.0/analysis-releases.json +26 -0
- framerudiments-0.4.0/docs/FrameRudiments-PATCH_WORKFLOW.md +164 -0
- framerudiments-0.4.0/docs/annular-modulation.md +351 -0
- framerudiments-0.4.0/docs/authoring-workspace.md +112 -0
- framerudiments-0.4.0/docs/expanded-effects.md +251 -0
- framerudiments-0.4.0/docs/full-preset-analysis.md +336 -0
- framerudiments-0.4.0/docs/keyframed-mattes.md +20 -0
- framerudiments-0.4.0/docs/multi-stem-modulation.md +28 -0
- framerudiments-0.4.0/docs/music-reactive-3d.md +164 -0
- framerudiments-0.4.0/docs/particle-smoke.md +172 -0
- framerudiments-0.4.0/docs/phase3-compositing.md +45 -0
- framerudiments-0.4.0/docs/preset-behaviour.md +62 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/docs/project-format.md +69 -3
- framerudiments-0.4.0/docs/projectm-local-runtime.md +29 -0
- framerudiments-0.4.0/docs/quality-effects.md +138 -0
- framerudiments-0.4.0/docs/rich-lyric-effects.md +200 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/docs/rudiment-renderers.md +24 -2
- framerudiments-0.4.0/docs/scoped-post-effects.md +155 -0
- framerudiments-0.4.0/docs/solid-spatial-renderers.md +83 -0
- framerudiments-0.4.0/docs/spatial-renderers.md +32 -0
- framerudiments-0.4.0/docs/spatiotemporal-supersampling.md +92 -0
- framerudiments-0.4.0/docs/sprite-visualisations.md +193 -0
- framerudiments-0.4.0/docs/stem-sources-and-masks.md +46 -0
- framerudiments-0.4.0/docs/variable-bpm-word-subtitles.md +160 -0
- framerudiments-0.4.0/docs/visualisation-atlas.md +180 -0
- framerudiments-0.4.0/docs/visualisation-coverage-matrix.md +42 -0
- framerudiments-0.4.0/docs/visualiser-routing.md +142 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/docs/visualisers.md +12 -0
- framerudiments-0.4.0/integration/test_music_spatial_gpu.py +55 -0
- framerudiments-0.4.0/integration/test_preset_analysis.py +69 -0
- framerudiments-0.4.0/integration/test_released_preset_analysis.py +41 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/integration/test_visualisers_gpu.py +90 -43
- {framerudiments-0.3.0 → framerudiments-0.4.0}/pyproject.toml +3 -2
- framerudiments-0.4.0/scripts/Run-FullPresetAnalysis.ps1 +409 -0
- framerudiments-0.4.0/scripts/Run-PresetBehaviourAnalysis.ps1 +72 -0
- framerudiments-0.4.0/scripts/authoring_preview.py +322 -0
- framerudiments-0.4.0/scripts/build_sprite_assets.py +217 -0
- framerudiments-0.4.0/scripts/check_projectm_runtime.py +80 -0
- framerudiments-0.4.0/scripts/check_release_packages.py +132 -0
- framerudiments-0.4.0/scripts/ensure_projectm_runtime.py +58 -0
- framerudiments-0.4.0/scripts/full_preset_analysis.py +1619 -0
- framerudiments-0.4.0/scripts/generate_particle_gallery.py +222 -0
- framerudiments-0.4.0/scripts/generate_post_effect_gallery.py +189 -0
- framerudiments-0.4.0/scripts/generate_quality_gallery.py +270 -0
- framerudiments-0.4.0/scripts/generate_rich_lyric_gallery.py +315 -0
- framerudiments-0.4.0/scripts/generate_sprite_gallery.py +414 -0
- framerudiments-0.4.0/scripts/generate_supersampling_gallery.py +149 -0
- framerudiments-0.4.0/scripts/generate_timing_gallery.py +250 -0
- framerudiments-0.4.0/scripts/generate_visualisation_gallery.py +359 -0
- framerudiments-0.4.0/scripts/generate_visualiser_routing_gallery.py +275 -0
- framerudiments-0.4.0/scripts/install_analysis_releases.py +150 -0
- framerudiments-0.4.0/scripts/prepare_pixelcue_taggers.py +67 -0
- framerudiments-0.4.0/scripts/preset_behaviour_pipeline.py +337 -0
- framerudiments-0.4.0/scripts/profile_visualisation_coverage.py +69 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/scripts/profile_visualisers.py +1 -0
- framerudiments-0.4.0/scripts/projectm_dll_diagnostics.py +314 -0
- framerudiments-0.4.0/scripts/repair_projectm_mingw.py +437 -0
- framerudiments-0.4.0/scripts/select_projectm_generator.py +180 -0
- framerudiments-0.4.0/scripts/validate_patch.py +88 -0
- framerudiments-0.4.0/src/framerudiments/__init__.py +26 -0
- framerudiments-0.4.0/src/framerudiments/advanced_renderers.py +459 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/atlas.py +3 -0
- framerudiments-0.4.0/src/framerudiments/beat_timeline.py +217 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/choreography.py +5 -3
- framerudiments-0.4.0/src/framerudiments/circular_renderers.py +594 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/cli.py +66 -15
- framerudiments-0.4.0/src/framerudiments/compositor.py +689 -0
- framerudiments-0.4.0/src/framerudiments/demo.py +288 -0
- framerudiments-0.4.0/src/framerudiments/effect_catalogue.py +90 -0
- framerudiments-0.4.0/src/framerudiments/effect_renderers.py +652 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/effects.py +9 -5
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/encoding.py +98 -25
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/flight.py +27 -14
- framerudiments-0.4.0/src/framerudiments/gpu_spatial_backend.py +395 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/io.py +11 -3
- framerudiments-0.4.0/src/framerudiments/keyframes.py +56 -0
- framerudiments-0.4.0/src/framerudiments/layer_animation.py +140 -0
- framerudiments-0.4.0/src/framerudiments/layer_displacement.py +57 -0
- framerudiments-0.4.0/src/framerudiments/layer_masks.py +70 -0
- framerudiments-0.4.0/src/framerudiments/lyric_indicator.py +547 -0
- framerudiments-0.4.0/src/framerudiments/modulation.py +256 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/motion.py +44 -9
- framerudiments-0.4.0/src/framerudiments/music_spatial_renderers.py +314 -0
- framerudiments-0.4.0/src/framerudiments/output_quality.py +107 -0
- framerudiments-0.4.0/src/framerudiments/particle_engine.py +753 -0
- framerudiments-0.4.0/src/framerudiments/post_effects.py +121 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/preset_library.py +69 -24
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/preset_profiling.py +207 -70
- framerudiments-0.4.0/src/framerudiments/profile_analysis.py +354 -0
- framerudiments-0.4.0/src/framerudiments/project.py +317 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/projectm_backend.py +63 -27
- framerudiments-0.4.0/src/framerudiments/quality_effects.py +297 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/render.py +125 -25
- framerudiments-0.4.0/src/framerudiments/rich_subtitles.py +294 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/rudiment_renderers.py +328 -63
- framerudiments-0.4.0/src/framerudiments/scoped_effects.py +319 -0
- framerudiments-0.4.0/src/framerudiments/solid_spatial_renderers.py +304 -0
- framerudiments-0.4.0/src/framerudiments/spatial_renderers.py +141 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/spectrum.py +67 -21
- framerudiments-0.4.0/src/framerudiments/sprite_assets/arcade.png +0 -0
- framerudiments-0.4.0/src/framerudiments/sprite_assets/crystal.png +0 -0
- framerudiments-0.4.0/src/framerudiments/sprite_assets/fire.png +0 -0
- framerudiments-0.4.0/src/framerudiments/sprite_assets/generated-neon.png +0 -0
- framerudiments-0.4.0/src/framerudiments/sprite_assets/glass.png +0 -0
- framerudiments-0.4.0/src/framerudiments/sprite_assets/hud.png +0 -0
- framerudiments-0.4.0/src/framerudiments/sprite_assets/ice.png +0 -0
- framerudiments-0.4.0/src/framerudiments/sprite_assets/lcd-amber.png +0 -0
- framerudiments-0.4.0/src/framerudiments/sprite_assets/lcd-green.png +0 -0
- framerudiments-0.4.0/src/framerudiments/sprite_assets/lcd.png +0 -0
- framerudiments-0.4.0/src/framerudiments/sprite_assets/led.png +0 -0
- framerudiments-0.4.0/src/framerudiments/sprite_assets/manifest.json +104 -0
- framerudiments-0.4.0/src/framerudiments/sprite_assets/metal.png +0 -0
- framerudiments-0.4.0/src/framerudiments/sprite_assets/mono.png +0 -0
- framerudiments-0.4.0/src/framerudiments/sprite_assets/neon.png +0 -0
- framerudiments-0.4.0/src/framerudiments/sprite_assets/pixel.png +0 -0
- framerudiments-0.4.0/src/framerudiments/sprite_assets/plasma.png +0 -0
- framerudiments-0.4.0/src/framerudiments/sprite_assets/vfd.png +0 -0
- framerudiments-0.4.0/src/framerudiments/sprite_catalogue.py +92 -0
- framerudiments-0.4.0/src/framerudiments/sprite_renderers.py +1207 -0
- framerudiments-0.4.0/src/framerudiments/stem_blend.py +57 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/stemlab.py +13 -4
- framerudiments-0.4.0/src/framerudiments/subtitles.py +57 -0
- framerudiments-0.4.0/src/framerudiments/super_sampling.py +399 -0
- framerudiments-0.4.0/src/framerudiments/terrain_field.py +225 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/timeline.py +21 -9
- framerudiments-0.4.0/src/framerudiments/visual_style.py +302 -0
- framerudiments-0.4.0/src/framerudiments/visualisation_catalogue.py +286 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/visualiser_assets/butterchurn-page.js +1 -1
- framerudiments-0.4.0/src/framerudiments/visualiser_routing.py +163 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/visualiser_setup.py +74 -20
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/visualisers.py +173 -36
- framerudiments-0.4.0/src/framerudiments/word_timing.py +279 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0/src/framerudiments.egg-info}/PKG-INFO +222 -1
- framerudiments-0.4.0/src/framerudiments.egg-info/SOURCES.txt +219 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments.egg-info/requires.txt +4 -0
- framerudiments-0.4.0/tests/conftest.py +35 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/tests/test_adapters.py +42 -15
- framerudiments-0.4.0/tests/test_advanced_renderers.py +71 -0
- framerudiments-0.4.0/tests/test_authoring_preview.py +116 -0
- framerudiments-0.4.0/tests/test_behaviour_pipeline.py +81 -0
- framerudiments-0.4.0/tests/test_coverage_matrix.py +71 -0
- framerudiments-0.4.0/tests/test_default_antialias.py +112 -0
- framerudiments-0.4.0/tests/test_effect_batch.py +154 -0
- framerudiments-0.4.0/tests/test_full_preset_analysis.py +809 -0
- framerudiments-0.4.0/tests/test_gpu_ci_isolation.py +47 -0
- framerudiments-0.4.0/tests/test_keyframes.py +60 -0
- framerudiments-0.4.0/tests/test_layer_masks.py +52 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/tests/test_lyrics.py +5 -2
- framerudiments-0.4.0/tests/test_music_spatial_pipeline.py +48 -0
- framerudiments-0.4.0/tests/test_music_spatial_renderers.py +173 -0
- framerudiments-0.4.0/tests/test_particle_engine.py +289 -0
- framerudiments-0.4.0/tests/test_patch_validation.py +63 -0
- framerudiments-0.4.0/tests/test_phase3_animation.py +90 -0
- framerudiments-0.4.0/tests/test_phase3_gpu_injection.py +79 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/tests/test_pipeline.py +18 -8
- framerudiments-0.4.0/tests/test_preset_profiling.py +157 -0
- framerudiments-0.4.0/tests/test_projectm_dll_diagnostics.py +290 -0
- framerudiments-0.4.0/tests/test_projectm_generator.py +142 -0
- framerudiments-0.4.0/tests/test_projectm_runtime_preflight.py +64 -0
- framerudiments-0.4.0/tests/test_pytest_temp_isolation.py +34 -0
- framerudiments-0.4.0/tests/test_quality_effects.py +241 -0
- framerudiments-0.4.0/tests/test_release_metadata.py +39 -0
- framerudiments-0.4.0/tests/test_repair_projectm_mingw.py +392 -0
- framerudiments-0.4.0/tests/test_rich_subtitles.py +325 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/tests/test_rudiment_renderers.py +48 -12
- framerudiments-0.4.0/tests/test_scoped_effects.py +294 -0
- framerudiments-0.4.0/tests/test_solid_spatial_integration.py +49 -0
- framerudiments-0.4.0/tests/test_solid_spatial_renderers.py +113 -0
- framerudiments-0.4.0/tests/test_spatial_renderers.py +57 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/tests/test_spectrum.py +61 -21
- framerudiments-0.4.0/tests/test_sprite_renderers.py +411 -0
- framerudiments-0.4.0/tests/test_stem_blend.py +57 -0
- framerudiments-0.4.0/tests/test_stem_source_integration.py +80 -0
- framerudiments-0.4.0/tests/test_supersampling.py +162 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/tests/test_timeline.py +15 -7
- framerudiments-0.4.0/tests/test_variable_bpm_words.py +302 -0
- framerudiments-0.4.0/tests/test_visualisation_modulation.py +300 -0
- framerudiments-0.4.0/tests/test_visualiser_routing.py +236 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/tests/test_visualisers.py +45 -14
- framerudiments-0.4.0/tests/test_windows_launcher_splitpath.py +39 -0
- framerudiments-0.3.0/MANIFEST.in +0 -9
- framerudiments-0.3.0/README.md +0 -241
- framerudiments-0.3.0/integration/test_preset_analysis.py +0 -42
- framerudiments-0.3.0/src/framerudiments/__init__.py +0 -10
- framerudiments-0.3.0/src/framerudiments/compositor.py +0 -283
- framerudiments-0.3.0/src/framerudiments/demo.py +0 -167
- framerudiments-0.3.0/src/framerudiments/profile_analysis.py +0 -212
- framerudiments-0.3.0/src/framerudiments/project.py +0 -141
- framerudiments-0.3.0/src/framerudiments/subtitles.py +0 -45
- framerudiments-0.3.0/src/framerudiments.egg-info/SOURCES.txt +0 -81
- framerudiments-0.3.0/tests/test_preset_profiling.py +0 -123
- {framerudiments-0.3.0 → framerudiments-0.4.0}/AGENTS.md +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/LICENSE +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/docs/beat-alignment.md +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/docs/extraction.md +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/docs/media/beat-alignment-evidence.json +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/docs/media/beat-alignment.mp4 +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/docs/media/beat-alignment.png +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/docs/media/demo-transcript.md +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/docs/media/effects-pipeline.svg +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/docs/media/full-frame-comparison.png +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/docs/media/full-frame-demo.mp4 +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/docs/media/media-evidence.json +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/docs/media/preset-test-cards.png +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/docs/media/test-card-inputs/colour-bars.png +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/docs/media/test-card-inputs/grid-rings.png +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/docs/media/test-card-inputs/text-card.png +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/docs/preset-profiling.md +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/docs/spectrum.md +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/docs/workflow-media.md +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/setup.cfg +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/__main__.py +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/beat_alignment.py +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/visualiser_assets/butterchurn-worker.mjs +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/visualiser_assets/feedback.json +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/visualiser_assets/feedback.milk +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/visualiser_assets/julia.json +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/visualiser_assets/julia.milk +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/visualiser_assets/kaleidoscope.json +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/visualiser_assets/kaleidoscope.milk +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/visualiser_assets/package-lock.json +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments/visualiser_assets/package.json +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments.egg-info/dependency_links.txt +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments.egg-info/entry_points.txt +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/src/framerudiments.egg-info/top_level.txt +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/tests/test_beat_alignment.py +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/tests/test_extracted_helpers.py +0 -0
- {framerudiments-0.3.0 → framerudiments-0.4.0}/tests/test_flight.py +0 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
include README.md LICENSE AGENTS.md RELEASE_NOTES.md analysis-releases.json
|
|
2
|
+
recursive-include docs *.md *.png *.svg *.json *.mp4
|
|
3
|
+
recursive-include tests *.py
|
|
4
|
+
|
|
5
|
+
recursive-include integration *.py
|
|
6
|
+
|
|
7
|
+
prune models
|
|
8
|
+
prune visualiser-analysis
|
|
9
|
+
|
|
10
|
+
recursive-include scripts *.py *.ps1
|
|
11
|
+
recursive-include src/framerudiments/sprite_assets *.png *.json
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: framerudiments
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: Deterministic Shorts and lyric visualisers using DanceRudiments and StemLab evidence.
|
|
5
5
|
Author: Kieran Simkin
|
|
6
6
|
License-Expression: MIT
|
|
@@ -16,6 +16,9 @@ Requires-Dist: dancerudiments<0.4,>=0.3.0
|
|
|
16
16
|
Provides-Extra: projectm
|
|
17
17
|
Requires-Dist: glfw==2.10.2; extra == "projectm"
|
|
18
18
|
Requires-Dist: PyOpenGL==3.1.10; extra == "projectm"
|
|
19
|
+
Provides-Extra: gpu
|
|
20
|
+
Requires-Dist: moderngl<6,>=5.11; extra == "gpu"
|
|
21
|
+
Requires-Dist: numpy>=1.26; extra == "gpu"
|
|
19
22
|
Provides-Extra: dev
|
|
20
23
|
Requires-Dist: pytest>=8; extra == "dev"
|
|
21
24
|
Requires-Dist: build>=1.2; extra == "dev"
|
|
@@ -25,10 +28,76 @@ Dynamic: license-file
|
|
|
25
28
|
|
|
26
29
|
# FrameRudiments
|
|
27
30
|
|
|
31
|
+
## Pinned visual-analysis releases
|
|
32
|
+
|
|
33
|
+
PixelCue **0.9.1** and PrismMoves **0.2.0** are pinned by final release URL,
|
|
34
|
+
source commit and wheel SHA-256 in `analysis-releases.json`. Both analysis
|
|
35
|
+
launchers install these coordinated wheels into the project-local analysis
|
|
36
|
+
environment; neither can silently restore the old development/API pair.
|
|
37
|
+
Run `scripts/install_analysis_releases.py --python PATH_TO_ANALYSIS_PYTHON
|
|
38
|
+
--with-sequence` to reinstall the pinned pair without downloading model weights.
|
|
39
|
+
The native CI job tests the actual released sequence/description APIs with
|
|
40
|
+
synthetic frames and no neural inference. OpenCV and other runtime dependencies
|
|
41
|
+
remain separately constrained; this is not a whole-environment lock.
|
|
42
|
+
|
|
43
|
+
## Efficient preset descriptions (new recommended analysis entry point)
|
|
44
|
+
|
|
45
|
+
Run `./scripts/Run-PresetBehaviourAnalysis.ps1 -Limit 2` after installing the
|
|
46
|
+
coordinated PixelCue/PrismMoves update. It captures 15 fps over 3 seconds (46
|
|
47
|
+
frames per condition; 368 for the default four inputs and two audio controls),
|
|
48
|
+
measures motion **before** semantic inference, and selects at most 24 unique
|
|
49
|
+
non-blank images for CLIP and BLIP. Generated fixtures render at 384 x 384
|
|
50
|
+
instead of the legacy 160-pixel pilot. The native render/audio clock is unchanged.
|
|
51
|
+
|
|
52
|
+
One paragraph per preset describes supported movement, appearance and artefacts.
|
|
53
|
+
The searchable gallery rebuilds from completed per-preset records at each job,
|
|
54
|
+
not from an occasionally checkpointed index. Raw dense frames and attempts stay
|
|
55
|
+
in ignored `_work/`; the compact reports and compressed evidence are under
|
|
56
|
+
`visualiser-analysis/behaviour-catalogue/`. The old full-catalogue is preserved.
|
|
57
|
+
|
|
58
|
+
`./scripts/Run-PresetBehaviourAnalysis.ps1 -DescribeExisting` produces a separate
|
|
59
|
+
atlas from the saved analysis receipts without rerunning models. Sparse legacy
|
|
60
|
+
stills never acquire invented temporal measurements. An authored `-Suite` or an
|
|
61
|
+
explicit `-ArtworkDirectory` supplies real material; defaults use synthetic audio.
|
|
62
|
+
See [the efficient workflow and its limitations](docs/preset-behaviour.md).
|
|
63
|
+
|
|
64
|
+
Windows setup also gains checked project-local MinGW runtime bundling. Missing
|
|
65
|
+
compiler DLLs come from the recorded, matching compiler installation and are
|
|
66
|
+
verified in a fresh process; arbitrary DLL downloads and global PATH changes
|
|
67
|
+
are not used. See [projectM local runtime bundle](docs/projectm-local-runtime.md).
|
|
68
|
+
|
|
28
69
|
FrameRudiments renders Shorts, Canvas-style clips and full lyric visualisers
|
|
29
70
|
from one traceable timeline. It is the offline Python renderer in the
|
|
30
71
|
[DanceFlow ecosystem](https://kieransimkin.co.uk/danceflow/).
|
|
31
72
|
|
|
73
|
+
## Full visualiser preset analysis — PrismMoves and PixelCue
|
|
74
|
+
|
|
75
|
+
Run `./scripts/Run-FullPresetAnalysis.ps1` in Windows PowerShell for a **single
|
|
76
|
+
resumable entry point** that installs the optional visual-analysis dependencies,
|
|
77
|
+
captures every available Butterchurn/projectM preset, and produces searchable
|
|
78
|
+
per-preset metrics, caption and tag hypotheses, summaries and previews.
|
|
79
|
+
A quick pilot is `./scripts/Run-FullPresetAnalysis.ps1 -Limit 5`; rerun without
|
|
80
|
+
`-Limit` to continue all remaining presets. The complete catalogue includes
|
|
81
|
+
explicit partial/failure receipts for presets that cannot render.
|
|
82
|
+
|
|
83
|
+
The full analysis evaluates all four image families (album/lyric input, colour
|
|
84
|
+
bars, grid/rings and text card), music and silence, and frames at 0, 0.5, 1.5
|
|
85
|
+
and 3 seconds. PixelCue and PrismMoves examine every captured output by
|
|
86
|
+
default, and each preset gets labelled contact sheets plus an evidence-linked
|
|
87
|
+
summary across the input conditions and time points. The processing queue
|
|
88
|
+
alternates randomly selected projectM and Butterchurn presets, using a fresh
|
|
89
|
+
shuffle of unprocessed entries each invocation. `-OrderSeed 20261018` optionally
|
|
90
|
+
reproduces the order; receipts are saved under ignored `_work/schedules/`.
|
|
91
|
+
Existing five-preset pilots using the older, narrower protocol need an explicit
|
|
92
|
+
`-UpgradeCoverage` to archive earlier results before rerunning the fuller test.
|
|
93
|
+
|
|
94
|
+
All model weights, runtimes and caches live in **project-local `models/`**
|
|
95
|
+
(Git ignored). All generated results live under
|
|
96
|
+
**`visualiser-analysis/full-catalogue/`** (commit the curated reports when ready;
|
|
97
|
+
raw intermediate images in `_work/` stay local and ignored). No private music
|
|
98
|
+
is required: a synthetic, checksum-pinned fixture is generated by default.
|
|
99
|
+
See the [complete setup, resume, model, verification and Git guide](docs/full-preset-analysis.md).
|
|
100
|
+
|
|
32
101
|
**0.2.0** accepts source-bound StemLab BPM/first-beat readings through
|
|
33
102
|
`clock.beat_alignment`. Procedural motion follows the fractional beat phase
|
|
34
103
|
after excerpt/repeat mapping. Audio, lyric/cue timestamps and captured
|
|
@@ -48,6 +117,86 @@ Silly Sausage Britain and Moderate or Good renderers. Release-specific artwork,
|
|
|
48
117
|
scene layouts and creative decisions belong in project files or Python scene
|
|
49
118
|
hooks. Historical render scripts and approved outputs remain preserved.
|
|
50
119
|
|
|
120
|
+
## Particle and smoke emitters
|
|
121
|
+
|
|
122
|
+
A new deterministic `type: "emitter"` layer provides continuous smoke,
|
|
123
|
+
sparks, embers, snow, rain, confetti and cue-triggered bursts, driven by
|
|
124
|
+
independent DanceRudiments. Pinned DanceMoves/StemLab `.lrc`, `.cue`, or
|
|
125
|
+
versioned `.json` timing files can trigger one-shot explosions; `hybrid`
|
|
126
|
+
mode combines these with constant emission. Every parameter in the engine's
|
|
127
|
+
numeric style table supports native `style.*` modulation. Pinned transparent
|
|
128
|
+
PNG particles are optional, and the existing element- and frame-level post
|
|
129
|
+
passes remain available. See [particle and smoke reference](docs/particle-smoke.md)
|
|
130
|
+
and the [CI-generated synthetic gallery](https://kieransimkin.github.io/FrameRudiments/particles/).
|
|
131
|
+
|
|
132
|
+
## Variable-tempo synchronisation and word subtitles
|
|
133
|
+
|
|
134
|
+
FrameRudiments accepts a checksum-pinned `stemlab.beat-timeline.v1` in
|
|
135
|
+
`clock.beat_timeline` for true piecewise BPM/beat phase at sample-frame anchors,
|
|
136
|
+
matching StemLab and the opt-in DanceMoves variable-tempo API. Nominal/fixed
|
|
137
|
+
BPM, beat grids, and fixed-tempo `beat_alignment` remain supported independently.
|
|
138
|
+
Lyrics, cue timing and recorded Rudiments retain their source audio clock.
|
|
139
|
+
A separate pinned `word_lyrics` LRC supports enhanced timestamps, per-word
|
|
140
|
+
karaoke highlighting, progressive word colour and a distinct `word_captions`
|
|
141
|
+
lane; line captions remain available through `lyrics`. Both per-line and
|
|
142
|
+
per-word subtitle exports are generated with the same encoded frame ledger.
|
|
143
|
+
See [variable-tempo and word LRC guide](docs/variable-bpm-word-subtitles.md)
|
|
144
|
+
and the [synthetic public demo](https://kieransimkin.github.io/FrameRudiments/timing/).
|
|
145
|
+
|
|
146
|
+
## Rich lyric typography and word-following particle sprites
|
|
147
|
+
|
|
148
|
+
Caption blocks and identity titles optionally accept checksum-pinned `font` overrides and
|
|
149
|
+
`effects` for stroked, bevelled, embossed, multi-stop gradient, inner/outer glow, and shadowed
|
|
150
|
+
text. Existing plain text remains untouched unless configured. Set `word_indicator` for a
|
|
151
|
+
native 1-dimensional DanceRudiment-driven bouncing sprite that tracks the active word of
|
|
152
|
+
the full line. Its particle field can be continuous, word/cue-triggered, or hybrid;
|
|
153
|
+
trigger windows independently change colour, density, size, glow and burst count.
|
|
154
|
+
See [rich lyric reference](docs/rich-lyric-effects.md) and the
|
|
155
|
+
[CI-generated demo](https://kieransimkin.github.io/FrameRudiments/rich-lyrics/).
|
|
156
|
+
|
|
157
|
+
## Maximum-quality rendering enabled by default
|
|
158
|
+
|
|
159
|
+
FrameRudiments now redraws pinned text outlines and procedural vector Rudiment
|
|
160
|
+
views at **4× linear pixel resolution** before Lanczos reduction. It also
|
|
161
|
+
renders **eight different source-clock subframes per output frame**,
|
|
162
|
+
averaging them in linear light for true temporal supersampling. A final
|
|
163
|
+
three-pass edge-aware AA filter runs after the optional GPU effect chain.
|
|
164
|
+
These are the maximum supported preset settings and require no project changes.
|
|
165
|
+
Explicitly lower them with `render_quality.spatial_scale` (1–4),
|
|
166
|
+
`render_quality.temporal_samples` (1–8), or
|
|
167
|
+
`render_quality.enabled: false` for deliberate pixel art or legacy output.
|
|
168
|
+
Full-quality rendering can be much slower; read the
|
|
169
|
+
[spatiotemporal sampling guide](docs/spatiotemporal-supersampling.md).
|
|
170
|
+
|
|
171
|
+
## Layer-selective Butterchurn/projectM feedback
|
|
172
|
+
|
|
173
|
+
Each composited element can feed the GPU visualisers continuously, only
|
|
174
|
+
during a bounded window measured in **64-pip source-clock beats**, or not at
|
|
175
|
+
all. Independently, an element can render cleanly over the last stage.
|
|
176
|
+
Word captions, lyric sprites, particle emitters, backgrounds and normal
|
|
177
|
+
Rudiment layers use the same routing policy. Existing projects remain
|
|
178
|
+
unchanged. [Configuration and examples](docs/visualiser-routing.md) ·
|
|
179
|
+
[CI comparisons](https://kieransimkin.github.io/FrameRudiments/routing/).
|
|
180
|
+
|
|
181
|
+
## Solid 3D meshes and atmospheric rendering
|
|
182
|
+
|
|
183
|
+
Three additional `spatial-solid-*` viewport modes (torus, sphere and terrain)
|
|
184
|
+
provide per-pixel Z-buffered geometry, roughness/metallic direct lighting and
|
|
185
|
+
depth-terminated procedural fog. They use the normal StemLab/DanceRudiments
|
|
186
|
+
motion paths and can feed existing Butterchurn/projectM compositing chains.
|
|
187
|
+
They are CPU rasterisers, not GPU mesh engines.
|
|
188
|
+
See the [3D rendering guide](docs/solid-spatial-renderers.md).
|
|
189
|
+
|
|
190
|
+
Three opt-in `spatial-music-*` modes add music-reactive mesh deformation,
|
|
191
|
+
procedural rock/ice materials, erosion, normal/bump effects, and an optional
|
|
192
|
+
ModernGL offscreen rasteriser with depth-tested shadows and single-scattering
|
|
193
|
+
volumetric lighting. `spatial-music-terrain` can generate new rows from a
|
|
194
|
+
checksum-pinned calibrated StemLab Fourier recording's history with
|
|
195
|
+
`style.terrain_source: "fft"`. Existing DanceRudiments drivers can modulate
|
|
196
|
+
mesh, camera, material, lighting and atmospheric properties. The CPU path
|
|
197
|
+
remains deterministic and works without GPU dependencies.
|
|
198
|
+
See [music-reactive 3D](docs/music-reactive-3d.md) for integration and limits.
|
|
199
|
+
|
|
51
200
|
## Install and run
|
|
52
201
|
|
|
53
202
|
Python 3.11+ and FFmpeg with libx264/AAC are required. Install the package into
|
|
@@ -264,3 +413,75 @@ My Songs suite uses Arcadians and The Truth is a Virus with their canonical
|
|
|
264
413
|
masters, covers and timed lyrics; those private assets are not bundled.
|
|
265
414
|
See [the complete capture, analysis and synthesis workflow](https://github.com/kieransimkin/FrameRudiments/blob/v0.3.0/docs/preset-profiling.md)
|
|
266
415
|
for pinned packs, licences, runtime setup, resume and interpretation limits.
|
|
416
|
+
|
|
417
|
+
## Visualisation Atlas and public gallery
|
|
418
|
+
|
|
419
|
+
FrameRudiments now exposes **161 deterministic built-in Rudiment renderers**,
|
|
420
|
+
including spectral waterfall, spectrogram heatmap (linear/log/mel/Bark/ERB
|
|
421
|
+
**axis remappings**, not newly computed filterbanks), radial FFT-band views,
|
|
422
|
+
and oscilloscope-inspired motion traces. All spectrum renderers require pinned,
|
|
423
|
+
calibrated StemLab Fourier evidence; motion traces are not raw PCM audio.
|
|
424
|
+
|
|
425
|
+
[Browse the CI-generated public visualisation gallery](https://kieransimkin.github.io/FrameRudiments/)
|
|
426
|
+
(available after the Pages workflow is enabled and deployed), and read the
|
|
427
|
+
[comprehensive method catalogue](docs/visualisation-atlas.md). Each PR checks
|
|
428
|
+
and generates every mode; main deploys an interactive searchable gallery with
|
|
429
|
+
four reproducible **synthetic** frames per mode. It now also publishes
|
|
430
|
+
**20 annotated native DanceRudiment colour/geometry modulation scenes**.
|
|
431
|
+
|
|
432
|
+
New options include continuous/inward/bipolar/segmented circular spectrum bars,
|
|
433
|
+
polar time-frequency heatmaps, annular and spiral waveform plots, custom gradient
|
|
434
|
+
stops, 16 built-in colour palettes, glow/hue/rotation/scale effects and up to
|
|
435
|
+
32 independent source-clocked Rudiment modulators targeting colour *or* any
|
|
436
|
+
validated numeric renderer style parameter. All modulation evidence keeps its
|
|
437
|
+
pinned/native input identity. See [all 60 new modes, gradient controls and
|
|
438
|
+
modulation examples](docs/annular-modulation.md).
|
|
439
|
+
|
|
440
|
+
The next generation adds **60 additional display families**: spectrum LED matrices,
|
|
441
|
+
cityscapes, ridgetrails and half-circle analysers; time-frequency voxel terrain,
|
|
442
|
+
hexagonal mosaics and slit scans; and native-value CRT, triggered, braided and
|
|
443
|
+
polar oscilloscope modes. Opt-in deterministic image treatments include scanlines,
|
|
444
|
+
pixelation, grain, vignette, edge highlights, halftone, chromatic separation,
|
|
445
|
+
solarisation and glitches. All these visual controls can be driven by
|
|
446
|
+
source-clocked DanceRudiments. See [expanded effects reference](docs/expanded-effects.md).
|
|
447
|
+
|
|
448
|
+
## Image-backed Rudiment renderers: 52 additional options
|
|
449
|
+
|
|
450
|
+
FrameRudiments now offers **213 built-in Rudiment renderers**: the existing 161 vector
|
|
451
|
+
options remain registered and unchanged, and 52 sprite-rendered spectrum,
|
|
452
|
+
spectrogram, waveform and movement alternatives can be selected independently.
|
|
453
|
+
The package bundles **17 PNG sprite atlas themes** (1,088 tiles), including 64
|
|
454
|
+
transparent image-generated neon motifs and 1,024 procedurally generated LCD,
|
|
455
|
+
LED, VFD, crystal, glass, retro-pixel, flame and other tiles. Pinned custom
|
|
456
|
+
PNG atlases, animated cell selection and the existing DanceRudiment geometry/
|
|
457
|
+
colour modulation and per-element/full-frame post effects are supported.
|
|
458
|
+
|
|
459
|
+
[Explore vector and sprite comparisons](https://kieransimkin.github.io/FrameRudiments/sprites/)
|
|
460
|
+
and see the [full sprite renderer reference](docs/sprite-visualisations.md).
|
|
461
|
+
There are also 40 new per-sprite numeric controls (including size, rotation,
|
|
462
|
+
colour channels, jitter, glow and animation speed) and validated native-driven
|
|
463
|
+
categorical theme, shape and palette choices. The 16 new modulation lab
|
|
464
|
+
scenes show these controls at four encoded-frame moments.
|
|
465
|
+
|
|
466
|
+
The demo images are synthetic, not measured audio.
|
|
467
|
+
|
|
468
|
+
Enable Settings → Pages → GitHub Actions as the repository publication source.
|
|
469
|
+
|
|
470
|
+
## Per-element and full-frame post-render effects
|
|
471
|
+
|
|
472
|
+
The new `post_effects` project field supports isolated effects for **each**
|
|
473
|
+
background, scene, sprite, legacy bars, Rudiment layer, identity caption or
|
|
474
|
+
lyric-art element, and separate passes over the **finished frame**. All 161
|
|
475
|
+
renderers and the shared gradients/CRT/colour post effects are supported. Numeric
|
|
476
|
+
parameters use native DanceRudiment modulation; palettes, colour-stop sets and
|
|
477
|
+
gradient modes can switch between validated alternatives. Independent layer
|
|
478
|
+
passes cannot recolour already composited neighbours, while a frame pass can
|
|
479
|
+
act on everything. These stages run before the existing optional
|
|
480
|
+
Butterchurn/projectM feedback chain. See the [compositor effects reference](docs/scoped-post-effects.md)
|
|
481
|
+
and the [public scopes gallery](https://kieransimkin.github.io/FrameRudiments/scopes/).
|
|
482
|
+
|
|
483
|
+
## High-quality antialiasing and motion blur
|
|
484
|
+
|
|
485
|
+
Opt-in edge-aware antialiasing and premultiplied-alpha directional blur now work in Rudiment `visual` settings and independent per-element or whole-frame `post_effects` stages. Both accept native DanceRudiment modulation of all numeric settings, including direction, shutter distance, samples, strength, thresholds, radius and falloff. A separate `post_effects.temporal` shutter recomposes actual observed encoded frames in linear-light RGB, bounded to the current source repeat. It does not invent subframes or optical flow.
|
|
486
|
+
|
|
487
|
+
The [CI-generated AA and motion-blur comparison gallery](https://kieransimkin.github.io/FrameRudiments/quality/) combines four existing visualiser modes with nine quality-effect configurations, four observed moments each, and machine-readable parameters. See [the quality-effects guide](docs/quality-effects.md).
|