# Carla TODO

# ----------------------------------------------------------------------------
# in short

4. custom "plugin slots" skins, ala Reason (also define set of keys for a new LV2 extension, 40% done)
5. internal patchbay processing mode
6. Carla as an LV2 plugin (75% done)
7. direct support for csound files (as plugins, inspired by 'cabbage')
8. OSX builds

Ideas for later:

9a. Carla plugin working as X11 embed
9b. Carla as VST plugin (needs #9a)
10. easier canvas connections by using smart key shortcuts
11. Mobile version (using Android Patchfield for example)
12. Mobile OSC Control app
13. Port good JACK-only apps as internal plugins (zita stuff would be nice)

# ----------------------------------------------------------------------------
# more detailed

GENERAL:
 - finalize Juce backend move
 - finalize PyQt5 move (just a few corrections now)
 - add direct program access on ui-dialogs (needed for standalone bridges), maybe add extra buttons too (reset plugin, fix ui size)
 - implement midi-learn (new dialog)
 - custom skins for plugin slots, design for 8 types + instruments (gig, sf2, sfz)
 - custom skins for internal plugins
 - implement favorite plugins, add in new tab near file-browser
 - blender style canvas theme
 - make it possible to use backend as fake standalone app (using pipes) instead of a shared library
 - smarter carla-single script (LV2 must only need URI for example, and ignore all other hints)
 - alternate, simpler UI for mobile and/or VST version

ENGINE:
 - allow to change position of plugins (up/down)
 - allow to add plugins when engine is stopped
 - complete RtAudio+RtMidi support (only MIDI out missing + save&restore)
 - complete Juce engine driver support
 - implement Haiku Media support (based from JACK?, LATER)
 - implement latency in continuous-rack mode
 - implement internal patchbay mode (once Juce move is complete)
 - internal patchbay mode, based on Juce graph code
 - handle sample-rate changes in JACK (made possible by switch-master)
 - add MIDI-bank change type (GM, GS, XG and MMA). See fluidsynth docs
 - allow to use static OSC ports

PLUGINS:
 - add control-out rate/freq option in frames (or just a regular block-size option?)
 - control/midi-out in singleProcess() calls, use timeoutFrames var
 - implement midi-cc automation special rules (invert, half, logarithmic, etc)
 - implement Juce plugin hosting (provides AU and VST2/3 support; will replace current VST hosting if Juce is used)
 - implement LSCP file support (new native plugin)
 - implement Csound file support

Native:
 - Cleanup API
 - Document API

LADSPA:

DSSI:
 - custom chunk-data extension, publish on kx website when complete

LV2:
 - revisit all extensions
 - option to set lv2 preset folder?

FluidSynth:
 - per-channel volume control
 - proper buffer-size/sample-rate change (needs testing)

LinuxSampler:
 - per-channel volume pan&control
 - proper buffer-size/sample-rate change (needs testing)

# ----------------------------------------------------------------------------
# current work

FRONTEND:
 - fix things to new cleanup API
 - more skins

OTHER:
 - create tests for all utils code
