abletoolz 2.2.0__tar.gz → 2.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {abletoolz-2.2.0 → abletoolz-2.2.1}/PKG-INFO +52 -33
- {abletoolz-2.2.0 → abletoolz-2.2.1}/README.md +51 -32
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/__init__.py +1 -1
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/cli.py +19 -34
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/dj_crates.py +384 -272
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/elements.py +2 -3
- abletoolz-2.2.1/abletoolz/formats/asd/__init__.py +11 -0
- abletoolz-2.2.1/abletoolz/formats/asd/parser.py +614 -0
- abletoolz-2.2.1/abletoolz/formats/asd/writer.py +298 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/document.py +7 -16
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/files.py +6 -9
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/persistence.py +13 -20
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/plugin_files.py +4 -15
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/sample_ref.py +1 -1
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/samples.py +4 -16
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/tracks.py +11 -11
- abletoolz-2.2.1/abletoolz/live_set/transport.py +127 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/undo.py +28 -18
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/commands.py +27 -4
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/config.py +1 -1
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/container/controller.py +11 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/container/device.py +4 -4
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/container/parameter_list.py +42 -1
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/conversion.py +14 -3
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/cs_80_v.py +5 -2
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/izotope_trash.py +6 -3
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/identity/plugin_db.py +2 -2
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/plan/here.py +23 -5
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/all_plugins.py +1 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/arturia.py +49 -1
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/arturia_v.py +37 -1
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/audio_unit.py +80 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/cs_80_v3.py +10 -2
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/derived.py +31 -1
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/fabfilter.py +122 -5
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/framings.py +19 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/izotope_trash.py +10 -4
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/surge_synth_team.py +11 -2
- abletoolz-2.2.1/abletoolz/plugins/state/u_he.py +42 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/run/batch.py +32 -29
- abletoolz-2.2.1/abletoolz/run/console.py +498 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/run/job.py +95 -41
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/run/meta.py +2 -1
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/run/report.py +70 -2
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/samples/database.py +8 -2
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/samples/relink.py +7 -10
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/schema/upgrade.py +51 -7
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/schema/versioning.py +14 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz.egg-info/PKG-INFO +52 -33
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz.egg-info/SOURCES.txt +9 -0
- abletoolz-2.2.1/test/test_asd.py +275 -0
- abletoolz-2.2.1/test/test_audio_unit_reading.py +118 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_cli.py +6 -6
- abletoolz-2.2.1/test/test_console.py +113 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_cs_80_v_to_cs_80_v3.py +8 -5
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_dj_crates.py +206 -318
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_fabfilter_timeless.py +21 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_izotope_trash_state.py +9 -8
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_loadable.py +3 -6
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_parameter_list.py +13 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_plan.py +3 -9
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_plugin_maps.py +8 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_process_workers.py +1 -1
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_sample_fix.py +5 -8
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_sample_reference_shapes.py +5 -3
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_sample_rename.py +5 -3
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_schema_upgrade.py +40 -5
- abletoolz-2.2.1/test/test_transport.py +64 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_trash_conversion.py +2 -2
- abletoolz-2.2.1/test/test_u_he.py +32 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_versioning.py +15 -1
- abletoolz-2.2.0/abletoolz/live_set/transport.py +0 -84
- abletoolz-2.2.0/abletoolz/run/console.py +0 -292
- {abletoolz-2.2.0 → abletoolz-2.2.1}/LICENSE +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/__main__.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/alc.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/ansi.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/data/__init__.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/data/clip_template.alc +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/errors.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/experimental/__init__.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/experimental/legacy/__init__.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/experimental/legacy/clip_projection.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/experimental/legacy/inspect_document.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/experimental/legacy/legacy_document.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/experimental/legacy/legacy_import.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/experimental/legacy/legacy_set.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/formats/__init__.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/formats/ansi.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/formats/arturia_archive.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/formats/cbor.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/formats/errors.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/formats/fastlz.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/formats/fxb.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/formats/hex_text.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/formats/live_document.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/formats/path_data.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/__init__.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/apply_ops.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/clips.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/colors.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/describe.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/devices.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/domain.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/plugins.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/save_as.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/sections.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/settings.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/xml_edit.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/machine.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/__init__.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/container/__init__.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/container/rewritable.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/__init__.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/absynth.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/analog_lab.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/arturia_v2.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/data/lounge-lizard-to-keyscape.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/data/ms-20-to-korg-ms-20-v.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/data/pro-c-1-to-pro-c-2.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/data/pro-l-1-to-pro-l-2.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/data/pro53-to-prophet-5-v.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/data/trash1-to-trash2.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/fabfilter.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/izotope_ozone.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/korg_ms20.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/lounge_lizard.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/minimoog_v.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/ohmicide.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/pro53.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/serum.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/surge.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/data/native_recovery.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/identity/__init__.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/identity/ids.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/identity/installed.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/identity/mapping.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/identity/uid_sources.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/identity/vst2_host.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/identity/vst2_records.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/identity/vst3_host.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/identity/vst3_parameters.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/loadable.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/plan/__init__.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/plan/apply.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/plan/carry.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/plan/evidence.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/plan/machine.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/plan/make.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/plan/model.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/plan/targets.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/recovery.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/recovery_routes.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/__init__.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/akai.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/analog_lab.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/arturia_v2.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/audio_damage.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/camel_audio.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/catalog.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/controls.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/cs_80_v.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/arp-2600-v2.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/arp-2600-v3-baseline.state +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/cs-80-v.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/cs-80-v3-baseline.state +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/korg-ms-20-v-baseline.state +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/korg-ms-20-v.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/korg-ms-20.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/mini-v3-baseline.state +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/modular-v2.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/modular-v3-baseline.state +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/ohmicide-s-neutral.state +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/ozone-9-default.state +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/pro-c-2.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/pro-ds.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/pro-g.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/pro-l-2.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/pro-mb.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/prophet-5-v-baseline.state +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/prophet-5-v.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/prophet-v2.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/prophet-v3-baseline.state +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/trash1-algorithms.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/trash1-controls.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/trash1-v21.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/trash2-algorithms.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/trash2-default.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/devious_machines.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/errors.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/fxbk.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/goodhertz.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/izotope.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/izotope_ozone.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/izotope_trash2.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/keyscape.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/kilohearts.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/korg_legacy_cell.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/korg_legacy_plugins.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/korg_ms20.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/korg_ms20_v.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/lounge_lizard.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/measured.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/mini_v3.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/minimoog_v.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/model.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/native_instruments.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/ni_container.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/ohmicide.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/ohmicide_s.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/plugin_map.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/pro53.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/prophet_5_v.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/serato.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/sonimus.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/subsonic_labs.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/twin_delay.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/valhalla.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/xfadelooper.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/xfer.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/run/__init__.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/samples/__init__.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/samples/catalog.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/samples/crc.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/samples/discovery.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/samples/matcher.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/schema/__init__.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/schema/data/live_schemas.json.gz +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/schema/data/settings.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/schema/data/structure.json +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/schema/devices.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/schema/live_schemas.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/schema/objects.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/schema/settings.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/schema/structure.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/schema/tags.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/workers.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz.egg-info/dependency_links.txt +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz.egg-info/entry_points.txt +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz.egg-info/requires.txt +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz.egg-info/top_level.txt +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/pyproject.toml +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/setup.cfg +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_absynth.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_alc.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_analog_lab_to_analog_lab_v.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_apply_ops.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_arturia_archive.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_arturia_record_to_v3.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_arturia_v2_to_v3.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_au_writer.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_audio_unit.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_cbor.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_cli_battery.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_clips.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_clips_write.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_cmi_v.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_controls.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_describe.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_device_settings.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_devices.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_devices_write.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_devious_machines.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_fabfilter.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_fabfilter_pro_c.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_fabfilter_pro_l.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_fabfilter_q2.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_fabfilter_saturn.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_fabfilter_volcano.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_fastlz.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_file_paths.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_format_translation.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_framings.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_fxb.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_hex_text.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_korg_legacy_cell.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_korg_legacy_plugins.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_korg_ms20.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_korg_ms20_v.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_legacy_binary.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_live_document.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_live_document_validation.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_live_schemas.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_lounge_lizard_to_keyscape.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_mapping.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_meta.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_meta_refresh.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_minimoog_v_to_mini_v3.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_ms20_to_korg_ms20_v.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_native_recovery.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_ni_container.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_ohmicide_to_ohmicide_s.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_ozone_conversion.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_persistence.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_plugin_db.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_plugin_device.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_plugin_state_models.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_pro53.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_pro53_to_prophet_5_v.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_prophet_5_v.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_reaktor.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_relink.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_report.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_sample_crc.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_sample_database.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_sample_matcher.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_sample_sqlite.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_save_as.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_sections.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_serum_conversion.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_settings.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_state.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_subsonic_labs.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_trash_saved_fields.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_undo.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_version_matrix.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_vst2_records.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_vst2_writer.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_workers.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_xfer.py +0 -0
- {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_xml_edit.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: abletoolz
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.1
|
|
4
4
|
Summary: Tools made for editing, fixing and analyzing Ableton Live sets.
|
|
5
5
|
Author: ElixirBeats
|
|
6
6
|
License-Expression: MPL-2.0
|
|
@@ -90,7 +90,7 @@ Sets inside `Backup` and `abletoolz_backup` folders are skipped. You can also pa
|
|
|
90
90
|
|
|
91
91
|
Checking doesn't change your set, though it does write [scan results](#what-a-run-leaves-behind). All editing flags only change the set in memory until you add `-s` / `--save`. Plugin conversion has its own explicit save step, `plugins apply` (or `plugins plan --apply`).
|
|
92
92
|
|
|
93
|
-
Use `-h` for the command's options
|
|
93
|
+
Use `-h` for the command's options. A run prints one short block per set: what it found, with problems named, then one line for the whole run. Add `-v` to list everything behind the counts, such as every relinked file, and to see diagnostics.
|
|
94
94
|
|
|
95
95
|
If you want to write your own scripts, the [Python tutorial](doc/LIBRARY.md) starts with opening a set and builds up one step at a time.
|
|
96
96
|
|
|
@@ -193,45 +193,51 @@ Arrows show implemented directions, not every format the plugin itself ships in.
|
|
|
193
193
|
|
|
194
194
|
| Plugin | Same-plugin format swaps | Upgrade / other converter | Files inside its saved patch |
|
|
195
195
|
| --- | --- | --- | --- |
|
|
196
|
-
|
|
|
197
|
-
|
|
|
198
|
-
| FabFilter Saturn, Volcano 2, Timeless 2 | None | → Saturn 2 / Volcano 3 / Timeless 3 VST3 or VST2, respectively | — |
|
|
199
|
-
| FabFilter Pro-C 2, Pro-DS, Pro-G, Pro-L 2, Pro-MB, Pro-Q 3, Saturn 2, Timeless 3, Volcano 3 | VST2 ↔ VST3 | None | — |
|
|
200
|
-
| Valhalla Delay, FreqEcho, Plate, Room, Shimmer, Supermassive | Between VST2, VST3 and AU, any direction | None | — |
|
|
201
|
-
| Kilohearts kHs effects (listed below) | VST2 ↔ VST3 | None | — |
|
|
202
|
-
| Xfer Serum | VST2 ↔ VST3; AU → VST2 or VST3 | → Serum 2 VST3 / AU (experimental) | — |
|
|
203
|
-
| Xfer Serum 2 | VST3 ↔ AU | None | Relink samples and referenced images |
|
|
204
|
-
| Surge | None | → Surge XT VST3 / AU | — |
|
|
205
|
-
| Surge XT, Surge XT Effects | VST3 ↔ AU | None | — |
|
|
196
|
+
| AAS Lounge Lizard EP-4, Lounge Lizard 3 | None | → Spectrasonics Keyscape Rhodes - Classic VST3 or VST2 (approximations) | — |
|
|
197
|
+
| Akai MPC Essentials | None | None | Report project references; manual repair |
|
|
206
198
|
| Arturia minimoog V Original | None | → Mini V3 VST3 or VST2 | — |
|
|
207
199
|
| Arturia CS-80V, CS-80 V2 | None | → CS-80 V3 VST3 or VST2 | — |
|
|
208
200
|
| Arturia Piano V2, Wurli V2, ARP 2600 V2, Prophet V2, Modular V2 | None | → their V3 VST3 or VST2 | — |
|
|
209
201
|
| Arturia Analog Lab 3, Analog Lab 4 | None | → Analog Lab V VST2 | — |
|
|
210
|
-
|
|
|
211
|
-
|
|
|
212
|
-
|
|
|
213
|
-
| iZotope Ozone 8 Elements | None | → Ozone 9 VST2 | — |
|
|
214
|
-
| iZotope Stutter Edit 2 | VST2 ↔ VST3 | None | — |
|
|
202
|
+
| Arturia Mini V3, Prophet V3, Prophet-5 V, MS-20 V, CS-80 V3 | VST2 ↔ VST3; CS-80 V3: AU → VST3 or VST2, VST2 → AU | None | — |
|
|
203
|
+
| Arturia Chorus JUN-6, Dist TUBE-CULTURE | VST3 ↔ AU | None | — |
|
|
204
|
+
| Arturia CMI V | None | None | Relink samples |
|
|
215
205
|
| Audio Damage Ratshack Reverb 2, DubStation 1.5, Discord 3 | None | None; mapped | — |
|
|
216
|
-
| Sonimus Satson Channel | None | None; mapped | — |
|
|
217
|
-
| Subsonic Labs Wolfram | None | None; mapped | — |
|
|
218
206
|
| Camel Audio CamelPhat 3 | None | None; mapped | — |
|
|
219
|
-
|
|
|
220
|
-
|
|
|
221
|
-
|
|
|
207
|
+
| Devious Machines Texture | VST2 ↔ VST3 | None | Relink samples |
|
|
208
|
+
| FabFilter Pro-Q, Pro-Q 2 | None | → Pro-Q 3 VST3 or VST2 | — |
|
|
209
|
+
| FabFilter Pro-C (including SC), Pro-L | None | → Pro-C 2 / Pro-L 2 VST3 or VST2, respectively | — |
|
|
210
|
+
| FabFilter Saturn, Volcano 2 | None | → Saturn 2 / Volcano 3 VST3 or VST2, respectively | — |
|
|
211
|
+
| FabFilter Timeless 2 | VST2 ↔ VST3 | → Timeless 3 VST3 or VST2 | — |
|
|
212
|
+
| FabFilter Pro-C 2, Pro-DS, Pro-G, Pro-L 2, Pro-MB, Pro-Q 3, Saturn 2, Timeless 3, Volcano 3 | VST2 ↔ VST3; Pro-C 2: AU → VST3 or VST2, VST2 → AU | None | — |
|
|
213
|
+
| Goodhertz Tupe 3 | VST2 ↔ VST3 | None | — |
|
|
214
|
+
| iZotope Ozone 8 Elements | None | → Ozone 9 VST2 | — |
|
|
215
|
+
| iZotope Stutter Edit 2 | VST2 ↔ VST3 | None | — |
|
|
216
|
+
| iZotope Iris | None | None | Report sample references; manual repair |
|
|
217
|
+
| iZotope Trash | None | → Trash 2 VST2 | — |
|
|
218
|
+
| iZotope Ozone 9 Exciter | None | None; mapped state, VST3 writing incomplete | — |
|
|
219
|
+
| Kilohearts kHs effects (listed below) | VST2 ↔ VST3 | None | — |
|
|
222
220
|
| KORG MS-20, Legacy Cell | None | → Arturia MS-20 V VST3 or VST2 (experimental) | — |
|
|
223
221
|
| KORG MDE-X, Polysix, WAVESTATION | None | None; recognized only | — |
|
|
224
|
-
|
|
|
225
|
-
|
|
|
226
|
-
| Devious Machines Texture | VST2 ↔ VST3 | None | Relink samples |
|
|
222
|
+
| Native Instruments Absynth 3 | None | → Absynth 5 VST2 | — |
|
|
223
|
+
| Native Instruments Pro-53 | None | → Arturia Prophet-5 V VST3 or VST2 (approximations) | — |
|
|
227
224
|
| Native Instruments Battery 4 | None | None | Relink samples and kits |
|
|
228
225
|
| Native Instruments Kontakt 5, Kontakt 5 16out | None | None | Relink mapped instrument/library references |
|
|
229
226
|
| Native Instruments Maschine 2, Maschine 2 FX | None | None | Relink samples, groups and sounds |
|
|
230
227
|
| Native Instruments Reaktor 6 | None | None | Relink ensemble references |
|
|
231
|
-
|
|
|
232
|
-
|
|
|
233
|
-
|
|
|
234
|
-
|
|
|
228
|
+
| Native Instruments Massive | None | None; mapped state, VST3 writing incomplete | — |
|
|
229
|
+
| Ohm Force Ohmicide | None | → Ohmicide[S] VST3 or VST2 | — |
|
|
230
|
+
| Serato Sample | VST2 ↔ VST3 | None | Relink samples |
|
|
231
|
+
| Sonimus Satson Channel | None | None; mapped | — |
|
|
232
|
+
| Subsonic Labs Wolfram | None | None; mapped | — |
|
|
233
|
+
| Surge | None | → Surge XT VST3 / AU | — |
|
|
234
|
+
| Surge XT, Surge XT Effects | VST3 ↔ AU | None | — |
|
|
235
|
+
| Twin Delay | None | None; mapped | — |
|
|
236
|
+
| u-he Podolski | VST2 ↔ VST3 | None | — |
|
|
237
|
+
| Valhalla Delay, FreqEcho, Plate, Room, Shimmer, Supermassive | Between VST2, VST3 and AU, any direction | None | — |
|
|
238
|
+
| xfadelooper | None | None | Relink samples |
|
|
239
|
+
| Xfer Serum | VST2 ↔ VST3; AU → VST2 or VST3 | → Serum 2 VST3 / AU (experimental) | — |
|
|
240
|
+
| Xfer Serum 2 | VST3 ↔ AU | None | Relink samples and referenced images |
|
|
235
241
|
|
|
236
242
|
The kHs effects covered are 3-Band EQ, Bitcrush, Channel Mixer, Chorus, Clipper, Comb Filter, Compactor, Compressor, Convolver, Delay, Distortion, Dual Delay, Dynamics, Ensemble, Filter, Flanger, Formant Filter, Frequency Shifter, Gain, Gate, Haas, Ladder Filter, Limiter, Nonlinear Filter, Phase Distortion, Phaser, Pitch Shifter, Resonator, Reverb, Reverser, Ring Mod, Shaper, Stereo, Tape Stop, Trance Gate and Transient Shaper. Evidence varies across these maps; a listed implementation is not a claim that every patch has been auditioned.
|
|
237
243
|
|
|
@@ -279,6 +285,18 @@ A plan file that already exists isn't overwritten unless you pass `--force`. Ope
|
|
|
279
285
|
|
|
280
286
|
To skip checking the file, `abletoolz plugins plan "D:/Ableton Projects" --apply` writes the plan and applies its suggestions straight away.
|
|
281
287
|
|
|
288
|
+
### Convert for another computer
|
|
289
|
+
|
|
290
|
+
A plugin that loads here is in the plan too, left at `null`. Its comment also lists formats marked "not installed here", which you can pick for a computer that has them, such as the AU when you give a set to a friend on a Mac:
|
|
291
|
+
|
|
292
|
+
```yaml
|
|
293
|
+
- plugin: Chorus JUN-6
|
|
294
|
+
format: VST3
|
|
295
|
+
convert_to: chorus_jun_6_au
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
Apply it the same way. The other computer still needs the plugin installed.
|
|
299
|
+
|
|
282
300
|
### What converting costs
|
|
283
301
|
|
|
284
302
|
A saved patch and Live's automation are separate things. Even when a patch carries over, a converted device currently loses its automation and clip envelopes, MIDI and macro mappings, because the target's controls can have different numbers. Its configured control list is rebuilt where supported, or left empty.
|
|
@@ -287,7 +305,6 @@ Upgrades can also leave out or approximate settings the target has no equivalent
|
|
|
287
305
|
|
|
288
306
|
### A few common cases
|
|
289
307
|
|
|
290
|
-
- **Sending a set to another computer:** the target plugin doesn't have to be installed here. Choose an offered format the other computer can use; that computer still needs the plugin installed.
|
|
291
308
|
- **An older set:** Live 9 and 10.0 sets can't hold a VST3, so abletoolz moves such a set up to Live 10.1's format when it writes one, and the plan lists what that changes. A Live 9.0 set using some of Live's own devices can't be moved; open and save it in a newer Live first.
|
|
292
309
|
- **Old wrapped VST2 plugins:** `abletoolz plugins routes` lists measured recovery routes and the binaries found for them. Use `--plugin-dir "D:/VstPlugins"` to restrict the recovery-file search to that folder.
|
|
293
310
|
- **Missing samples as well as plugins:** fix and save the sample references first, then make the conversion plan. Converting a patch doesn't relink its files.
|
|
@@ -318,6 +335,8 @@ abletoolz "my song.als" --unfold --set-track-heights 68 --set-track-widths 24 -s
|
|
|
318
335
|
|
|
319
336
|
`--list-tracks` lists track information. `-x` / `--xml` writes the uncompressed set XML beside the set, which is useful for exploring its structure. Live can also open uncompressed XML renamed to `.als`, provided the document is valid.
|
|
320
337
|
|
|
338
|
+
If your DJ tracks already have a tempo, downbeat and drop cue, abletoolz can make clips and `.asd` files that open in Live already warped and on the bar: see [pre-warped clips for DJing](doc/DJ_CLIPS.md).
|
|
339
|
+
|
|
321
340
|
## Saving your changes
|
|
322
341
|
|
|
323
342
|
`-s` / `--save` saves ordinary edits in the original location. Before replacing a set, abletoolz copies it to `abletoolz_backup/set_name__1.als` beside the original. If that name exists, it uses `__2`, then `__3`, so earlier backups are kept. A set the run doesn't change isn't written.
|
|
@@ -423,9 +442,9 @@ For a plugin whose maker is gone, see [salvaging an old plugin](doc/DEVELOPMENT.
|
|
|
423
442
|
|
|
424
443
|
Some things still need work:
|
|
425
444
|
|
|
426
|
-
- More plugin maps
|
|
445
|
+
- More plugin maps and conversions.
|
|
446
|
+
- Keeping a converted device's automation, clip envelopes and MIDI and macro mappings, by matching its old controls to the new plugin's.
|
|
427
447
|
- Making copies for older Live versions reliable. Python's `save_as` is experimental and some copies still crash Live.
|
|
428
|
-
- Time signatures other than 4/4 and signature changes within a set.
|
|
429
448
|
- More ways for scripts and other programs to work with sets.
|
|
430
449
|
|
|
431
|
-
`--dump-plugins` and `-x` help inspect plugin settings and set XML.
|
|
450
|
+
`--dump-plugins` and `-x` help inspect plugin settings and set XML.
|
|
@@ -51,7 +51,7 @@ Sets inside `Backup` and `abletoolz_backup` folders are skipped. You can also pa
|
|
|
51
51
|
|
|
52
52
|
Checking doesn't change your set, though it does write [scan results](#what-a-run-leaves-behind). All editing flags only change the set in memory until you add `-s` / `--save`. Plugin conversion has its own explicit save step, `plugins apply` (or `plugins plan --apply`).
|
|
53
53
|
|
|
54
|
-
Use `-h` for the command's options
|
|
54
|
+
Use `-h` for the command's options. A run prints one short block per set: what it found, with problems named, then one line for the whole run. Add `-v` to list everything behind the counts, such as every relinked file, and to see diagnostics.
|
|
55
55
|
|
|
56
56
|
If you want to write your own scripts, the [Python tutorial](doc/LIBRARY.md) starts with opening a set and builds up one step at a time.
|
|
57
57
|
|
|
@@ -154,45 +154,51 @@ Arrows show implemented directions, not every format the plugin itself ships in.
|
|
|
154
154
|
|
|
155
155
|
| Plugin | Same-plugin format swaps | Upgrade / other converter | Files inside its saved patch |
|
|
156
156
|
| --- | --- | --- | --- |
|
|
157
|
-
|
|
|
158
|
-
|
|
|
159
|
-
| FabFilter Saturn, Volcano 2, Timeless 2 | None | → Saturn 2 / Volcano 3 / Timeless 3 VST3 or VST2, respectively | — |
|
|
160
|
-
| FabFilter Pro-C 2, Pro-DS, Pro-G, Pro-L 2, Pro-MB, Pro-Q 3, Saturn 2, Timeless 3, Volcano 3 | VST2 ↔ VST3 | None | — |
|
|
161
|
-
| Valhalla Delay, FreqEcho, Plate, Room, Shimmer, Supermassive | Between VST2, VST3 and AU, any direction | None | — |
|
|
162
|
-
| Kilohearts kHs effects (listed below) | VST2 ↔ VST3 | None | — |
|
|
163
|
-
| Xfer Serum | VST2 ↔ VST3; AU → VST2 or VST3 | → Serum 2 VST3 / AU (experimental) | — |
|
|
164
|
-
| Xfer Serum 2 | VST3 ↔ AU | None | Relink samples and referenced images |
|
|
165
|
-
| Surge | None | → Surge XT VST3 / AU | — |
|
|
166
|
-
| Surge XT, Surge XT Effects | VST3 ↔ AU | None | — |
|
|
157
|
+
| AAS Lounge Lizard EP-4, Lounge Lizard 3 | None | → Spectrasonics Keyscape Rhodes - Classic VST3 or VST2 (approximations) | — |
|
|
158
|
+
| Akai MPC Essentials | None | None | Report project references; manual repair |
|
|
167
159
|
| Arturia minimoog V Original | None | → Mini V3 VST3 or VST2 | — |
|
|
168
160
|
| Arturia CS-80V, CS-80 V2 | None | → CS-80 V3 VST3 or VST2 | — |
|
|
169
161
|
| Arturia Piano V2, Wurli V2, ARP 2600 V2, Prophet V2, Modular V2 | None | → their V3 VST3 or VST2 | — |
|
|
170
162
|
| Arturia Analog Lab 3, Analog Lab 4 | None | → Analog Lab V VST2 | — |
|
|
171
|
-
|
|
|
172
|
-
|
|
|
173
|
-
|
|
|
174
|
-
| iZotope Ozone 8 Elements | None | → Ozone 9 VST2 | — |
|
|
175
|
-
| iZotope Stutter Edit 2 | VST2 ↔ VST3 | None | — |
|
|
163
|
+
| Arturia Mini V3, Prophet V3, Prophet-5 V, MS-20 V, CS-80 V3 | VST2 ↔ VST3; CS-80 V3: AU → VST3 or VST2, VST2 → AU | None | — |
|
|
164
|
+
| Arturia Chorus JUN-6, Dist TUBE-CULTURE | VST3 ↔ AU | None | — |
|
|
165
|
+
| Arturia CMI V | None | None | Relink samples |
|
|
176
166
|
| Audio Damage Ratshack Reverb 2, DubStation 1.5, Discord 3 | None | None; mapped | — |
|
|
177
|
-
| Sonimus Satson Channel | None | None; mapped | — |
|
|
178
|
-
| Subsonic Labs Wolfram | None | None; mapped | — |
|
|
179
167
|
| Camel Audio CamelPhat 3 | None | None; mapped | — |
|
|
180
|
-
|
|
|
181
|
-
|
|
|
182
|
-
|
|
|
168
|
+
| Devious Machines Texture | VST2 ↔ VST3 | None | Relink samples |
|
|
169
|
+
| FabFilter Pro-Q, Pro-Q 2 | None | → Pro-Q 3 VST3 or VST2 | — |
|
|
170
|
+
| FabFilter Pro-C (including SC), Pro-L | None | → Pro-C 2 / Pro-L 2 VST3 or VST2, respectively | — |
|
|
171
|
+
| FabFilter Saturn, Volcano 2 | None | → Saturn 2 / Volcano 3 VST3 or VST2, respectively | — |
|
|
172
|
+
| FabFilter Timeless 2 | VST2 ↔ VST3 | → Timeless 3 VST3 or VST2 | — |
|
|
173
|
+
| FabFilter Pro-C 2, Pro-DS, Pro-G, Pro-L 2, Pro-MB, Pro-Q 3, Saturn 2, Timeless 3, Volcano 3 | VST2 ↔ VST3; Pro-C 2: AU → VST3 or VST2, VST2 → AU | None | — |
|
|
174
|
+
| Goodhertz Tupe 3 | VST2 ↔ VST3 | None | — |
|
|
175
|
+
| iZotope Ozone 8 Elements | None | → Ozone 9 VST2 | — |
|
|
176
|
+
| iZotope Stutter Edit 2 | VST2 ↔ VST3 | None | — |
|
|
177
|
+
| iZotope Iris | None | None | Report sample references; manual repair |
|
|
178
|
+
| iZotope Trash | None | → Trash 2 VST2 | — |
|
|
179
|
+
| iZotope Ozone 9 Exciter | None | None; mapped state, VST3 writing incomplete | — |
|
|
180
|
+
| Kilohearts kHs effects (listed below) | VST2 ↔ VST3 | None | — |
|
|
183
181
|
| KORG MS-20, Legacy Cell | None | → Arturia MS-20 V VST3 or VST2 (experimental) | — |
|
|
184
182
|
| KORG MDE-X, Polysix, WAVESTATION | None | None; recognized only | — |
|
|
185
|
-
|
|
|
186
|
-
|
|
|
187
|
-
| Devious Machines Texture | VST2 ↔ VST3 | None | Relink samples |
|
|
183
|
+
| Native Instruments Absynth 3 | None | → Absynth 5 VST2 | — |
|
|
184
|
+
| Native Instruments Pro-53 | None | → Arturia Prophet-5 V VST3 or VST2 (approximations) | — |
|
|
188
185
|
| Native Instruments Battery 4 | None | None | Relink samples and kits |
|
|
189
186
|
| Native Instruments Kontakt 5, Kontakt 5 16out | None | None | Relink mapped instrument/library references |
|
|
190
187
|
| Native Instruments Maschine 2, Maschine 2 FX | None | None | Relink samples, groups and sounds |
|
|
191
188
|
| Native Instruments Reaktor 6 | None | None | Relink ensemble references |
|
|
192
|
-
|
|
|
193
|
-
|
|
|
194
|
-
|
|
|
195
|
-
|
|
|
189
|
+
| Native Instruments Massive | None | None; mapped state, VST3 writing incomplete | — |
|
|
190
|
+
| Ohm Force Ohmicide | None | → Ohmicide[S] VST3 or VST2 | — |
|
|
191
|
+
| Serato Sample | VST2 ↔ VST3 | None | Relink samples |
|
|
192
|
+
| Sonimus Satson Channel | None | None; mapped | — |
|
|
193
|
+
| Subsonic Labs Wolfram | None | None; mapped | — |
|
|
194
|
+
| Surge | None | → Surge XT VST3 / AU | — |
|
|
195
|
+
| Surge XT, Surge XT Effects | VST3 ↔ AU | None | — |
|
|
196
|
+
| Twin Delay | None | None; mapped | — |
|
|
197
|
+
| u-he Podolski | VST2 ↔ VST3 | None | — |
|
|
198
|
+
| Valhalla Delay, FreqEcho, Plate, Room, Shimmer, Supermassive | Between VST2, VST3 and AU, any direction | None | — |
|
|
199
|
+
| xfadelooper | None | None | Relink samples |
|
|
200
|
+
| Xfer Serum | VST2 ↔ VST3; AU → VST2 or VST3 | → Serum 2 VST3 / AU (experimental) | — |
|
|
201
|
+
| Xfer Serum 2 | VST3 ↔ AU | None | Relink samples and referenced images |
|
|
196
202
|
|
|
197
203
|
The kHs effects covered are 3-Band EQ, Bitcrush, Channel Mixer, Chorus, Clipper, Comb Filter, Compactor, Compressor, Convolver, Delay, Distortion, Dual Delay, Dynamics, Ensemble, Filter, Flanger, Formant Filter, Frequency Shifter, Gain, Gate, Haas, Ladder Filter, Limiter, Nonlinear Filter, Phase Distortion, Phaser, Pitch Shifter, Resonator, Reverb, Reverser, Ring Mod, Shaper, Stereo, Tape Stop, Trance Gate and Transient Shaper. Evidence varies across these maps; a listed implementation is not a claim that every patch has been auditioned.
|
|
198
204
|
|
|
@@ -240,6 +246,18 @@ A plan file that already exists isn't overwritten unless you pass `--force`. Ope
|
|
|
240
246
|
|
|
241
247
|
To skip checking the file, `abletoolz plugins plan "D:/Ableton Projects" --apply` writes the plan and applies its suggestions straight away.
|
|
242
248
|
|
|
249
|
+
### Convert for another computer
|
|
250
|
+
|
|
251
|
+
A plugin that loads here is in the plan too, left at `null`. Its comment also lists formats marked "not installed here", which you can pick for a computer that has them, such as the AU when you give a set to a friend on a Mac:
|
|
252
|
+
|
|
253
|
+
```yaml
|
|
254
|
+
- plugin: Chorus JUN-6
|
|
255
|
+
format: VST3
|
|
256
|
+
convert_to: chorus_jun_6_au
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
Apply it the same way. The other computer still needs the plugin installed.
|
|
260
|
+
|
|
243
261
|
### What converting costs
|
|
244
262
|
|
|
245
263
|
A saved patch and Live's automation are separate things. Even when a patch carries over, a converted device currently loses its automation and clip envelopes, MIDI and macro mappings, because the target's controls can have different numbers. Its configured control list is rebuilt where supported, or left empty.
|
|
@@ -248,7 +266,6 @@ Upgrades can also leave out or approximate settings the target has no equivalent
|
|
|
248
266
|
|
|
249
267
|
### A few common cases
|
|
250
268
|
|
|
251
|
-
- **Sending a set to another computer:** the target plugin doesn't have to be installed here. Choose an offered format the other computer can use; that computer still needs the plugin installed.
|
|
252
269
|
- **An older set:** Live 9 and 10.0 sets can't hold a VST3, so abletoolz moves such a set up to Live 10.1's format when it writes one, and the plan lists what that changes. A Live 9.0 set using some of Live's own devices can't be moved; open and save it in a newer Live first.
|
|
253
270
|
- **Old wrapped VST2 plugins:** `abletoolz plugins routes` lists measured recovery routes and the binaries found for them. Use `--plugin-dir "D:/VstPlugins"` to restrict the recovery-file search to that folder.
|
|
254
271
|
- **Missing samples as well as plugins:** fix and save the sample references first, then make the conversion plan. Converting a patch doesn't relink its files.
|
|
@@ -279,6 +296,8 @@ abletoolz "my song.als" --unfold --set-track-heights 68 --set-track-widths 24 -s
|
|
|
279
296
|
|
|
280
297
|
`--list-tracks` lists track information. `-x` / `--xml` writes the uncompressed set XML beside the set, which is useful for exploring its structure. Live can also open uncompressed XML renamed to `.als`, provided the document is valid.
|
|
281
298
|
|
|
299
|
+
If your DJ tracks already have a tempo, downbeat and drop cue, abletoolz can make clips and `.asd` files that open in Live already warped and on the bar: see [pre-warped clips for DJing](doc/DJ_CLIPS.md).
|
|
300
|
+
|
|
282
301
|
## Saving your changes
|
|
283
302
|
|
|
284
303
|
`-s` / `--save` saves ordinary edits in the original location. Before replacing a set, abletoolz copies it to `abletoolz_backup/set_name__1.als` beside the original. If that name exists, it uses `__2`, then `__3`, so earlier backups are kept. A set the run doesn't change isn't written.
|
|
@@ -384,9 +403,9 @@ For a plugin whose maker is gone, see [salvaging an old plugin](doc/DEVELOPMENT.
|
|
|
384
403
|
|
|
385
404
|
Some things still need work:
|
|
386
405
|
|
|
387
|
-
- More plugin maps
|
|
406
|
+
- More plugin maps and conversions.
|
|
407
|
+
- Keeping a converted device's automation, clip envelopes and MIDI and macro mappings, by matching its old controls to the new plugin's.
|
|
388
408
|
- Making copies for older Live versions reliable. Python's `save_as` is experimental and some copies still crash Live.
|
|
389
|
-
- Time signatures other than 4/4 and signature changes within a set.
|
|
390
409
|
- More ways for scripts and other programs to work with sets.
|
|
391
410
|
|
|
392
|
-
`--dump-plugins` and `-x` help inspect plugin settings and set XML.
|
|
411
|
+
`--dump-plugins` and `-x` help inspect plugin settings and set XML.
|
|
@@ -21,7 +21,6 @@ from collections.abc import Sequence
|
|
|
21
21
|
import pydantic
|
|
22
22
|
|
|
23
23
|
from abletoolz import __version__
|
|
24
|
-
from abletoolz.ansi import CB, B, C, G, M, R, Y
|
|
25
24
|
from abletoolz.formats import live_document
|
|
26
25
|
from abletoolz.live_set import AbletonSet
|
|
27
26
|
from abletoolz.live_set.apply_ops import OpsDocument, apply_ops
|
|
@@ -50,8 +49,8 @@ def is_valid_dir_path(path: str) -> str:
|
|
|
50
49
|
"""Refuse a Windows path whose trailing backslash escaped its closing quote."""
|
|
51
50
|
if sys.platform.startswith("win") and '"' in path:
|
|
52
51
|
raise argparse.ArgumentTypeError(
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
"Windows paths must not end in backslash: \n'C:\\somepath\\'(BAD)\n'C:\\somepath' "
|
|
53
|
+
"(GOOD)\nThis is due to a bug in how Windows handles backslashes before quotes."
|
|
55
54
|
)
|
|
56
55
|
return path
|
|
57
56
|
|
|
@@ -356,7 +355,7 @@ def run_apply_ops(args: argparse.Namespace) -> int:
|
|
|
356
355
|
"""
|
|
357
356
|
output_path: pathlib.Path = args.output
|
|
358
357
|
if output_path.exists():
|
|
359
|
-
|
|
358
|
+
console.problem(f"Output {output_path} already exists, refusing to overwrite.")
|
|
360
359
|
return 1
|
|
361
360
|
ableton_set = AbletonSet(pathlib.Path(args.srcs[0]))
|
|
362
361
|
if not ableton_set.parse():
|
|
@@ -367,7 +366,7 @@ def run_apply_ops(args: argparse.Namespace) -> int:
|
|
|
367
366
|
live_document.write_new(output_path, live_document.encode(ableton_set.root))
|
|
368
367
|
# TypeError and LookupError are a value of the wrong kind for a setting, or a setting this set lacks.
|
|
369
368
|
except (pydantic.ValidationError, ValueError, TypeError, LookupError, OSError) as exc:
|
|
370
|
-
|
|
369
|
+
console.problem(f"Could not apply ops: {exc}")
|
|
371
370
|
return 1
|
|
372
371
|
document = {
|
|
373
372
|
"applied": len(results),
|
|
@@ -376,7 +375,7 @@ def run_apply_ops(args: argparse.Namespace) -> int:
|
|
|
376
375
|
}
|
|
377
376
|
print(json.dumps(document, separators=(",", ":")))
|
|
378
377
|
console.render_applied_ops(results)
|
|
379
|
-
|
|
378
|
+
console.say(f"Applied {len(results)} op(s) and saved to {output_path}")
|
|
380
379
|
return 0
|
|
381
380
|
|
|
382
381
|
|
|
@@ -396,12 +395,12 @@ def process(args: argparse.Namespace, config: AbletoolzConfig, locations: Locati
|
|
|
396
395
|
"""Run the command ``args`` names and answer the exit code; ``argv`` is recorded in the run report."""
|
|
397
396
|
db_path = args.db_path if args.db_path is not None else locations.sample_db
|
|
398
397
|
if args.db_prune:
|
|
399
|
-
database.prune_db(db_path)
|
|
398
|
+
console.say(f"Removed {database.prune_db(db_path)} file(s) that no longer exist from {db_path}")
|
|
400
399
|
return 0
|
|
401
400
|
if args.db:
|
|
402
401
|
folders = args.srcs or [str(path) for path in config.file_paths]
|
|
403
402
|
if not folders:
|
|
404
|
-
|
|
403
|
+
console.problem("No folders given, and none under file_database.paths in config.yaml.")
|
|
405
404
|
return 1
|
|
406
405
|
database.create_or_update_db(
|
|
407
406
|
folders,
|
|
@@ -409,30 +408,32 @@ def process(args: argparse.Namespace, config: AbletoolzConfig, locations: Locati
|
|
|
409
408
|
backend=args.db_backend,
|
|
410
409
|
workers=args.db_workers,
|
|
411
410
|
)
|
|
411
|
+
for built in (db_path, database.plugin_files_db_path(db_path)):
|
|
412
|
+
if built.exists():
|
|
413
|
+
console.say(f"{built}: {database.file_count(built)} file(s)")
|
|
412
414
|
return 0
|
|
413
415
|
db = None
|
|
414
416
|
plugin_files_db = None
|
|
415
417
|
if args.fix_samples_collect or args.fix_samples_absolute:
|
|
416
|
-
logger.info("%sLoading db...", M)
|
|
417
418
|
db = database.load_db(db_path)
|
|
418
419
|
plugin_files_path = database.plugin_files_db_path(db_path)
|
|
419
420
|
if plugin_files_path.exists():
|
|
420
421
|
plugin_files_db = database.load_plugin_files_db(plugin_files_path)
|
|
421
422
|
else:
|
|
422
|
-
|
|
423
|
+
console.attention(f"No plugin files database at {plugin_files_path}; run --db to build it")
|
|
423
424
|
|
|
424
425
|
started = datetime.datetime.now().astimezone()
|
|
425
426
|
try:
|
|
426
427
|
pathlib_objects = find_sets(args.srcs)
|
|
427
428
|
if not pathlib_objects:
|
|
428
|
-
|
|
429
|
+
console.problem("No sets to process.")
|
|
429
430
|
return 1
|
|
430
431
|
try:
|
|
431
432
|
jobs = set_workers(args.jobs, len(pathlib_objects))
|
|
432
433
|
except ValueError as error:
|
|
433
|
-
|
|
434
|
+
console.problem(str(error))
|
|
434
435
|
return 2
|
|
435
|
-
|
|
436
|
+
console.hint(f"{len(pathlib_objects)} set(s), {jobs} at a time")
|
|
436
437
|
job = SetJob.from_args(args)
|
|
437
438
|
records = batch.run_sets(
|
|
438
439
|
job,
|
|
@@ -451,24 +452,8 @@ def process(args: argparse.Namespace, config: AbletoolzConfig, locations: Locati
|
|
|
451
452
|
if records is None:
|
|
452
453
|
return 130
|
|
453
454
|
run = report.build(records, command=list(argv), started=started)
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
"%sTook %s to process %s set(s): %s%s ok%s, %s%s failed",
|
|
457
|
-
CB,
|
|
458
|
-
run.finished - started,
|
|
459
|
-
len(pathlib_objects),
|
|
460
|
-
G,
|
|
461
|
-
len(pathlib_objects) - len(failed),
|
|
462
|
-
CB,
|
|
463
|
-
R if failed else G,
|
|
464
|
-
len(failed),
|
|
465
|
-
)
|
|
466
|
-
logger.info("%sWrote the run report to %s%s", M, B, report.write(run, report_directory(args)))
|
|
467
|
-
if failed:
|
|
468
|
-
for path in failed:
|
|
469
|
-
logger.info("%sFailed to process: %s", R, path)
|
|
470
|
-
return 1
|
|
471
|
-
return 0
|
|
455
|
+
console.render_run(records, elapsed=run.finished - started, report=report.write(run, report_directory(args)))
|
|
456
|
+
return 1 if any(record.error is not None for record in records) else 0
|
|
472
457
|
|
|
473
458
|
|
|
474
459
|
def main(
|
|
@@ -495,7 +480,7 @@ def main(
|
|
|
495
480
|
try:
|
|
496
481
|
config = load_config(locations.config_file) if config is None else config
|
|
497
482
|
except ValueError as error:
|
|
498
|
-
|
|
483
|
+
console.problem(str(error))
|
|
499
484
|
return 2
|
|
500
485
|
return run_plugin_commands(argv[1:], config=config, locations=locations)
|
|
501
486
|
args = parse_arguments(argv)
|
|
@@ -503,7 +488,7 @@ def main(
|
|
|
503
488
|
return exited.code if isinstance(exited.code, int) else 0
|
|
504
489
|
|
|
505
490
|
machine_readable = bool(args.describe or args.apply_ops or args.search_samples is not None)
|
|
506
|
-
console.
|
|
491
|
+
console.setup(verbose=args.verbose, machine_readable=machine_readable)
|
|
507
492
|
if args.plugin_maps:
|
|
508
493
|
console.render_catalog(CATALOG)
|
|
509
494
|
return 0
|
|
@@ -516,7 +501,7 @@ def main(
|
|
|
516
501
|
try:
|
|
517
502
|
config = load_config(locations.config_file) if config is None else config
|
|
518
503
|
except ValueError as error:
|
|
519
|
-
|
|
504
|
+
console.problem(str(error))
|
|
520
505
|
return 2
|
|
521
506
|
locations = locations.with_plugin_folders(config.plugin_paths)
|
|
522
507
|
if args.plugin_db:
|