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.
Files changed (321) hide show
  1. {abletoolz-2.2.0 → abletoolz-2.2.1}/PKG-INFO +52 -33
  2. {abletoolz-2.2.0 → abletoolz-2.2.1}/README.md +51 -32
  3. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/__init__.py +1 -1
  4. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/cli.py +19 -34
  5. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/dj_crates.py +384 -272
  6. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/elements.py +2 -3
  7. abletoolz-2.2.1/abletoolz/formats/asd/__init__.py +11 -0
  8. abletoolz-2.2.1/abletoolz/formats/asd/parser.py +614 -0
  9. abletoolz-2.2.1/abletoolz/formats/asd/writer.py +298 -0
  10. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/document.py +7 -16
  11. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/files.py +6 -9
  12. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/persistence.py +13 -20
  13. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/plugin_files.py +4 -15
  14. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/sample_ref.py +1 -1
  15. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/samples.py +4 -16
  16. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/tracks.py +11 -11
  17. abletoolz-2.2.1/abletoolz/live_set/transport.py +127 -0
  18. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/undo.py +28 -18
  19. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/commands.py +27 -4
  20. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/config.py +1 -1
  21. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/container/controller.py +11 -0
  22. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/container/device.py +4 -4
  23. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/container/parameter_list.py +42 -1
  24. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/conversion.py +14 -3
  25. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/cs_80_v.py +5 -2
  26. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/izotope_trash.py +6 -3
  27. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/identity/plugin_db.py +2 -2
  28. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/plan/here.py +23 -5
  29. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/all_plugins.py +1 -0
  30. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/arturia.py +49 -1
  31. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/arturia_v.py +37 -1
  32. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/audio_unit.py +80 -0
  33. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/cs_80_v3.py +10 -2
  34. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/derived.py +31 -1
  35. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/fabfilter.py +122 -5
  36. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/framings.py +19 -0
  37. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/izotope_trash.py +10 -4
  38. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/surge_synth_team.py +11 -2
  39. abletoolz-2.2.1/abletoolz/plugins/state/u_he.py +42 -0
  40. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/run/batch.py +32 -29
  41. abletoolz-2.2.1/abletoolz/run/console.py +498 -0
  42. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/run/job.py +95 -41
  43. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/run/meta.py +2 -1
  44. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/run/report.py +70 -2
  45. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/samples/database.py +8 -2
  46. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/samples/relink.py +7 -10
  47. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/schema/upgrade.py +51 -7
  48. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/schema/versioning.py +14 -0
  49. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz.egg-info/PKG-INFO +52 -33
  50. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz.egg-info/SOURCES.txt +9 -0
  51. abletoolz-2.2.1/test/test_asd.py +275 -0
  52. abletoolz-2.2.1/test/test_audio_unit_reading.py +118 -0
  53. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_cli.py +6 -6
  54. abletoolz-2.2.1/test/test_console.py +113 -0
  55. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_cs_80_v_to_cs_80_v3.py +8 -5
  56. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_dj_crates.py +206 -318
  57. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_fabfilter_timeless.py +21 -0
  58. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_izotope_trash_state.py +9 -8
  59. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_loadable.py +3 -6
  60. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_parameter_list.py +13 -0
  61. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_plan.py +3 -9
  62. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_plugin_maps.py +8 -0
  63. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_process_workers.py +1 -1
  64. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_sample_fix.py +5 -8
  65. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_sample_reference_shapes.py +5 -3
  66. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_sample_rename.py +5 -3
  67. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_schema_upgrade.py +40 -5
  68. abletoolz-2.2.1/test/test_transport.py +64 -0
  69. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_trash_conversion.py +2 -2
  70. abletoolz-2.2.1/test/test_u_he.py +32 -0
  71. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_versioning.py +15 -1
  72. abletoolz-2.2.0/abletoolz/live_set/transport.py +0 -84
  73. abletoolz-2.2.0/abletoolz/run/console.py +0 -292
  74. {abletoolz-2.2.0 → abletoolz-2.2.1}/LICENSE +0 -0
  75. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/__main__.py +0 -0
  76. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/alc.py +0 -0
  77. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/ansi.py +0 -0
  78. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/data/__init__.py +0 -0
  79. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/data/clip_template.alc +0 -0
  80. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/errors.py +0 -0
  81. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/experimental/__init__.py +0 -0
  82. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/experimental/legacy/__init__.py +0 -0
  83. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/experimental/legacy/clip_projection.py +0 -0
  84. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/experimental/legacy/inspect_document.py +0 -0
  85. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/experimental/legacy/legacy_document.py +0 -0
  86. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/experimental/legacy/legacy_import.py +0 -0
  87. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/experimental/legacy/legacy_set.py +0 -0
  88. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/formats/__init__.py +0 -0
  89. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/formats/ansi.py +0 -0
  90. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/formats/arturia_archive.py +0 -0
  91. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/formats/cbor.py +0 -0
  92. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/formats/errors.py +0 -0
  93. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/formats/fastlz.py +0 -0
  94. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/formats/fxb.py +0 -0
  95. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/formats/hex_text.py +0 -0
  96. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/formats/live_document.py +0 -0
  97. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/formats/path_data.py +0 -0
  98. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/__init__.py +0 -0
  99. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/apply_ops.py +0 -0
  100. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/clips.py +0 -0
  101. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/colors.py +0 -0
  102. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/describe.py +0 -0
  103. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/devices.py +0 -0
  104. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/domain.py +0 -0
  105. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/plugins.py +0 -0
  106. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/save_as.py +0 -0
  107. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/sections.py +0 -0
  108. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/settings.py +0 -0
  109. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/live_set/xml_edit.py +0 -0
  110. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/machine.py +0 -0
  111. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/__init__.py +0 -0
  112. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/container/__init__.py +0 -0
  113. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/container/rewritable.py +0 -0
  114. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/__init__.py +0 -0
  115. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/absynth.py +0 -0
  116. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/analog_lab.py +0 -0
  117. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/arturia_v2.py +0 -0
  118. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/data/lounge-lizard-to-keyscape.json +0 -0
  119. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/data/ms-20-to-korg-ms-20-v.json +0 -0
  120. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/data/pro-c-1-to-pro-c-2.json +0 -0
  121. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/data/pro-l-1-to-pro-l-2.json +0 -0
  122. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/data/pro53-to-prophet-5-v.json +0 -0
  123. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/data/trash1-to-trash2.json +0 -0
  124. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/fabfilter.py +0 -0
  125. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/izotope_ozone.py +0 -0
  126. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/korg_ms20.py +0 -0
  127. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/lounge_lizard.py +0 -0
  128. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/minimoog_v.py +0 -0
  129. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/ohmicide.py +0 -0
  130. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/pro53.py +0 -0
  131. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/serum.py +0 -0
  132. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/converters/surge.py +0 -0
  133. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/data/native_recovery.json +0 -0
  134. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/identity/__init__.py +0 -0
  135. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/identity/ids.py +0 -0
  136. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/identity/installed.py +0 -0
  137. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/identity/mapping.py +0 -0
  138. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/identity/uid_sources.py +0 -0
  139. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/identity/vst2_host.py +0 -0
  140. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/identity/vst2_records.py +0 -0
  141. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/identity/vst3_host.py +0 -0
  142. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/identity/vst3_parameters.py +0 -0
  143. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/loadable.py +0 -0
  144. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/plan/__init__.py +0 -0
  145. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/plan/apply.py +0 -0
  146. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/plan/carry.py +0 -0
  147. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/plan/evidence.py +0 -0
  148. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/plan/machine.py +0 -0
  149. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/plan/make.py +0 -0
  150. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/plan/model.py +0 -0
  151. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/plan/targets.py +0 -0
  152. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/recovery.py +0 -0
  153. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/recovery_routes.py +0 -0
  154. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/__init__.py +0 -0
  155. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/akai.py +0 -0
  156. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/analog_lab.py +0 -0
  157. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/arturia_v2.py +0 -0
  158. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/audio_damage.py +0 -0
  159. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/camel_audio.py +0 -0
  160. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/catalog.py +0 -0
  161. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/controls.py +0 -0
  162. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/cs_80_v.py +0 -0
  163. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/arp-2600-v2.json +0 -0
  164. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/arp-2600-v3-baseline.state +0 -0
  165. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/cs-80-v.json +0 -0
  166. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/cs-80-v3-baseline.state +0 -0
  167. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/korg-ms-20-v-baseline.state +0 -0
  168. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/korg-ms-20-v.json +0 -0
  169. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/korg-ms-20.json +0 -0
  170. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/mini-v3-baseline.state +0 -0
  171. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/modular-v2.json +0 -0
  172. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/modular-v3-baseline.state +0 -0
  173. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/ohmicide-s-neutral.state +0 -0
  174. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/ozone-9-default.state +0 -0
  175. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/pro-c-2.json +0 -0
  176. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/pro-ds.json +0 -0
  177. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/pro-g.json +0 -0
  178. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/pro-l-2.json +0 -0
  179. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/pro-mb.json +0 -0
  180. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/prophet-5-v-baseline.state +0 -0
  181. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/prophet-5-v.json +0 -0
  182. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/prophet-v2.json +0 -0
  183. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/prophet-v3-baseline.state +0 -0
  184. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/trash1-algorithms.json +0 -0
  185. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/trash1-controls.json +0 -0
  186. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/trash1-v21.json +0 -0
  187. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/trash2-algorithms.json +0 -0
  188. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/data/trash2-default.json +0 -0
  189. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/devious_machines.py +0 -0
  190. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/errors.py +0 -0
  191. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/fxbk.py +0 -0
  192. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/goodhertz.py +0 -0
  193. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/izotope.py +0 -0
  194. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/izotope_ozone.py +0 -0
  195. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/izotope_trash2.py +0 -0
  196. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/keyscape.py +0 -0
  197. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/kilohearts.py +0 -0
  198. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/korg_legacy_cell.py +0 -0
  199. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/korg_legacy_plugins.py +0 -0
  200. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/korg_ms20.py +0 -0
  201. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/korg_ms20_v.py +0 -0
  202. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/lounge_lizard.py +0 -0
  203. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/measured.py +0 -0
  204. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/mini_v3.py +0 -0
  205. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/minimoog_v.py +0 -0
  206. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/model.py +0 -0
  207. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/native_instruments.py +0 -0
  208. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/ni_container.py +0 -0
  209. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/ohmicide.py +0 -0
  210. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/ohmicide_s.py +0 -0
  211. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/plugin_map.py +0 -0
  212. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/pro53.py +0 -0
  213. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/prophet_5_v.py +0 -0
  214. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/serato.py +0 -0
  215. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/sonimus.py +0 -0
  216. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/subsonic_labs.py +0 -0
  217. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/twin_delay.py +0 -0
  218. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/valhalla.py +0 -0
  219. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/xfadelooper.py +0 -0
  220. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/plugins/state/xfer.py +0 -0
  221. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/run/__init__.py +0 -0
  222. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/samples/__init__.py +0 -0
  223. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/samples/catalog.py +0 -0
  224. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/samples/crc.py +0 -0
  225. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/samples/discovery.py +0 -0
  226. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/samples/matcher.py +0 -0
  227. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/schema/__init__.py +0 -0
  228. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/schema/data/live_schemas.json.gz +0 -0
  229. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/schema/data/settings.json +0 -0
  230. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/schema/data/structure.json +0 -0
  231. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/schema/devices.py +0 -0
  232. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/schema/live_schemas.py +0 -0
  233. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/schema/objects.py +0 -0
  234. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/schema/settings.py +0 -0
  235. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/schema/structure.py +0 -0
  236. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/schema/tags.py +0 -0
  237. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz/workers.py +0 -0
  238. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz.egg-info/dependency_links.txt +0 -0
  239. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz.egg-info/entry_points.txt +0 -0
  240. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz.egg-info/requires.txt +0 -0
  241. {abletoolz-2.2.0 → abletoolz-2.2.1}/abletoolz.egg-info/top_level.txt +0 -0
  242. {abletoolz-2.2.0 → abletoolz-2.2.1}/pyproject.toml +0 -0
  243. {abletoolz-2.2.0 → abletoolz-2.2.1}/setup.cfg +0 -0
  244. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_absynth.py +0 -0
  245. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_alc.py +0 -0
  246. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_analog_lab_to_analog_lab_v.py +0 -0
  247. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_apply_ops.py +0 -0
  248. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_arturia_archive.py +0 -0
  249. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_arturia_record_to_v3.py +0 -0
  250. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_arturia_v2_to_v3.py +0 -0
  251. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_au_writer.py +0 -0
  252. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_audio_unit.py +0 -0
  253. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_cbor.py +0 -0
  254. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_cli_battery.py +0 -0
  255. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_clips.py +0 -0
  256. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_clips_write.py +0 -0
  257. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_cmi_v.py +0 -0
  258. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_controls.py +0 -0
  259. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_describe.py +0 -0
  260. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_device_settings.py +0 -0
  261. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_devices.py +0 -0
  262. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_devices_write.py +0 -0
  263. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_devious_machines.py +0 -0
  264. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_fabfilter.py +0 -0
  265. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_fabfilter_pro_c.py +0 -0
  266. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_fabfilter_pro_l.py +0 -0
  267. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_fabfilter_q2.py +0 -0
  268. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_fabfilter_saturn.py +0 -0
  269. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_fabfilter_volcano.py +0 -0
  270. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_fastlz.py +0 -0
  271. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_file_paths.py +0 -0
  272. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_format_translation.py +0 -0
  273. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_framings.py +0 -0
  274. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_fxb.py +0 -0
  275. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_hex_text.py +0 -0
  276. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_korg_legacy_cell.py +0 -0
  277. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_korg_legacy_plugins.py +0 -0
  278. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_korg_ms20.py +0 -0
  279. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_korg_ms20_v.py +0 -0
  280. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_legacy_binary.py +0 -0
  281. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_live_document.py +0 -0
  282. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_live_document_validation.py +0 -0
  283. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_live_schemas.py +0 -0
  284. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_lounge_lizard_to_keyscape.py +0 -0
  285. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_mapping.py +0 -0
  286. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_meta.py +0 -0
  287. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_meta_refresh.py +0 -0
  288. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_minimoog_v_to_mini_v3.py +0 -0
  289. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_ms20_to_korg_ms20_v.py +0 -0
  290. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_native_recovery.py +0 -0
  291. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_ni_container.py +0 -0
  292. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_ohmicide_to_ohmicide_s.py +0 -0
  293. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_ozone_conversion.py +0 -0
  294. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_persistence.py +0 -0
  295. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_plugin_db.py +0 -0
  296. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_plugin_device.py +0 -0
  297. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_plugin_state_models.py +0 -0
  298. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_pro53.py +0 -0
  299. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_pro53_to_prophet_5_v.py +0 -0
  300. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_prophet_5_v.py +0 -0
  301. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_reaktor.py +0 -0
  302. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_relink.py +0 -0
  303. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_report.py +0 -0
  304. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_sample_crc.py +0 -0
  305. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_sample_database.py +0 -0
  306. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_sample_matcher.py +0 -0
  307. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_sample_sqlite.py +0 -0
  308. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_save_as.py +0 -0
  309. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_sections.py +0 -0
  310. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_serum_conversion.py +0 -0
  311. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_settings.py +0 -0
  312. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_state.py +0 -0
  313. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_subsonic_labs.py +0 -0
  314. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_trash_saved_fields.py +0 -0
  315. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_undo.py +0 -0
  316. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_version_matrix.py +0 -0
  317. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_vst2_records.py +0 -0
  318. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_vst2_writer.py +0 -0
  319. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_workers.py +0 -0
  320. {abletoolz-2.2.0 → abletoolz-2.2.1}/test/test_xfer.py +0 -0
  321. {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.0
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 and `-v` for more detail. For example, sample checks normally show missing files; `-v` shows the ones found too.
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
- | FabFilter Pro-Q, Pro-Q 2 | None | → Pro-Q 3 VST3 or VST2 | — |
197
- | FabFilter Pro-C (including SC), Pro-L | None | → Pro-C 2 / Pro-L 2 VST3 or VST2, respectively | — |
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
- | Native Instruments Absynth 3 | None | → Absynth 5 VST2 | — |
211
- | AAS Lounge Lizard EP-4, Lounge Lizard 3 | None | → Spectrasonics Keyscape Rhodes - Classic VST3 or VST2 (approximations) | — |
212
- | Ohm Force Ohmicide | None | → Ohmicide[S] VST3 or VST2 | — |
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
- | Twin Delay | None | None; mapped | — |
220
- | Arturia Mini V3, Prophet V3, Prophet-5 V, MS-20 V | VST2 ↔ VST3 | None | — |
221
- | Native Instruments Pro-53 | None | → Arturia Prophet-5 V VST3 or VST2 (approximations) | — |
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
- | Goodhertz Tupe 3 | VST2 ↔ VST3 | None | — |
225
- | Serato Sample | VST2 ↔ VST3 | None | Relink samples |
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
- | Arturia CMI V; xfadelooper | None | None | Relink samples |
232
- | iZotope Iris; Akai MPC Essentials | None | None | Report sample / project references, respectively; manual repair |
233
- | iZotope Trash | None | → Trash 2 VST2 | — |
234
- | Native Instruments Massive; iZotope Ozone 9 Exciter | None | None; mapped state, VST3 writing incomplete | — |
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, conversions and support for carrying automation across them.
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. `abletoolz-dj-crates` builds pre-warped `.alc` clips from a TSV of track analysis; run `abletoolz-dj-crates --help` for its options.
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 and `-v` for more detail. For example, sample checks normally show missing files; `-v` shows the ones found too.
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
- | FabFilter Pro-Q, Pro-Q 2 | None | → Pro-Q 3 VST3 or VST2 | — |
158
- | FabFilter Pro-C (including SC), Pro-L | None | → Pro-C 2 / Pro-L 2 VST3 or VST2, respectively | — |
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
- | Native Instruments Absynth 3 | None | → Absynth 5 VST2 | — |
172
- | AAS Lounge Lizard EP-4, Lounge Lizard 3 | None | → Spectrasonics Keyscape Rhodes - Classic VST3 or VST2 (approximations) | — |
173
- | Ohm Force Ohmicide | None | → Ohmicide[S] VST3 or VST2 | — |
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
- | Twin Delay | None | None; mapped | — |
181
- | Arturia Mini V3, Prophet V3, Prophet-5 V, MS-20 V | VST2 ↔ VST3 | None | — |
182
- | Native Instruments Pro-53 | None | → Arturia Prophet-5 V VST3 or VST2 (approximations) | — |
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
- | Goodhertz Tupe 3 | VST2 ↔ VST3 | None | — |
186
- | Serato Sample | VST2 ↔ VST3 | None | Relink samples |
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
- | Arturia CMI V; xfadelooper | None | None | Relink samples |
193
- | iZotope Iris; Akai MPC Essentials | None | None | Report sample / project references, respectively; manual repair |
194
- | iZotope Trash | None | → Trash 2 VST2 | — |
195
- | Native Instruments Massive; iZotope Ozone 9 Exciter | None | None; mapped state, VST3 writing incomplete | — |
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, conversions and support for carrying automation across them.
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. `abletoolz-dj-crates` builds pre-warped `.alc` clips from a TSV of track analysis; run `abletoolz-dj-crates --help` for its options.
411
+ `--dump-plugins` and `-x` help inspect plugin settings and set XML.
@@ -4,7 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  from collections.abc import Callable
6
6
 
7
- __version__ = "2.2.0"
7
+ __version__ = "2.2.1"
8
8
 
9
9
 
10
10
  def __getattr__(name: str) -> Callable[..., int]:
@@ -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
- f"{R}Windows paths must not end in backslash: \n'C:\\somepath\\'(BAD)\n'C:\\somepath' "
54
- f"(GOOD)\nThis is due to a bug in how Windows handles backslashes before quotes."
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
- logger.error("%sOutput %s already exists, refusing to overwrite.", R, output_path)
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
- logger.error("%sCould not apply ops: %s", R, exc)
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
- logger.info("%sApplied %s op(s) and saved to %s", G, len(results), output_path)
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
- logger.error("%sNo folders given, and none under file_database.paths in config.yaml.", R)
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
- logger.info("%sNo plugin files database at %s; run --db to build it", Y, plugin_files_path)
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
- logger.info("%sError, no sets to process!", R)
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
- logger.error("%s%s", R, error)
434
+ console.problem(str(error))
434
435
  return 2
435
- logger.info("%sUsing %s set worker(s)", C, jobs)
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
- failed = [record.path for record in records if record.error is not None]
455
- logger.info(
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
- logger.error("%s", error)
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.configure_logging(machine_readable=machine_readable, verbose=args.verbose)
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
- logger.error("%s", error)
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: