Dreamer Development: Clarity, Test Gear, Dark, Help and MPX (latest: Help 2.0.1)

Dreamer Development is the name I publish my VCV Rack modules under. I’m Chris Graham. This thread covers all of them. Please post feedback, questions and bug reports here.

Dreamer Development plugin, 2.0.9

  • Clarity: colours every port by signal type, with a ring marking input or output, the same on every module. Cables take the colour of their destination and show the direction of flow. It also traces a single cable, zooms with a pinch, and picks up cables with a click. Each feature has a switch on the panel.
  • Test Gear: right-click any port and clip on an instrument, such as an oscilloscope, a frequency analyser that reads the peak as a note, or an audio monitor.
  • Dark: darkens the panels of modules that ship only light artwork. It works in memory only, and removing the module restores every panel. Dark is experimental and a work in progress.

Dreamer Help plugin, 2.0.1 (pre-release)

  • Help: option-click any port, knob, switch, light or module title to see a note on what it does. The database currently covers 4,189 modules across 376 plugins. More modules will be added as help information becomes available.

MPX, Modular Polyphonic Expression

MPX is a work in progress and has not been officially released. Builds for all four platforms are available on GitHub. MPX is a cable protocol and a family of modules that pass notes, expression and harmony between modules over a single MPX cable.

  • mpxChart: reads iReal Pro playlists and plays their charts onto an MPX cable.
  • mpxProgression: a dozen common chord progressions, such as ii–V–I, twelve-bar blues and a Dorian vamp, chosen with one knob and shown as a chart.
  • mpxComp: chordal accompaniment. It voices each chord and leads the voices between changes.
  • mpxArp: an arpeggiator on the chord from the cable, with note lengths that can overlap.
  • mpxEuclid: four Euclidean rhythm voices on one MPX cable.
  • mpxRand: varies one attribute of the notes (duration, level, pan, timing or tuning) with white, walk or Perlin randomness.
  • mpxMonitor: shows the harmony and notes on an MPX cable and passes it on unchanged.
  • toMPX: gathers ordinary control voltages into MPX voice cables.
  • fromMPX: converts an MPX cable back to ordinary polyphonic control voltages.
  • polyToStereo: a channel strip per voice, with level, pan and a stereo output.

Preview video: https://youtu.be/yHlDrvFJXpk

Dreamer Development and Dreamer Help have been submitted to the VCV Library.

Threads this replaces

Discussion of these modules will continue here rather than in the following threads:

nice

if only one could set the fg and bg for all modules regardless of the light/dark setting or at least when dark is enabled would be even better for those trying to simplify the look of VCV. .

Slimilar to Dark, perhaps. Pachde-1 PanelTone may be of interest for geting a more uniform look across your collection.

Good thing I already have my own brand :wink:

@DaveVenom, thanks for the detailed notes in the Quick reference thread (post 32). This reply covers Help. I’ll follow up with separate posts on Clarity, Test Gear and Dark.

Here’s the new design I propose for Help.

Help text will no longer be compiled into the plugin. It will be read from JSON files, one per module. Each file has the module’s description, then each parameter, input, output and indicator with its own text beside it, then any notes. The separate tables you found hard to follow are gone. Where one sentence covers a row of controls, the entry lists all their numbers, so it’s written once and you can see what it applies to. A plugin’s help is a folder of these files, one per module and named by module slug. The layout is the same wherever it lives: in your repository and installed plugin it’s your plugin’s help folder, and in the shipped database and a user’s folder it’s a folder named for the plugin.

For each control, Help will look in three places, in this order:

  1. The maker’s own file, shipped in a help folder inside their plugin. The maker’s words win wherever they’ve written them, and they update with the maker’s releases. Makers never need anything from me: no pull request and no waiting for a Help release.
  2. A user’s file in the Rack user folder. This is for modules whose makers haven’t written help, including closed-source ones. Someone who knows the module can fill it in, and library updates never touch it. A “Send this help” item on the main help pop-up opens a GitHub issue with the file ready to paste, and I’ll review it and fold it into the shipped database.
  3. The shipped database, which gives every module that can be analysed some help from day one.

I considered letting a user’s file override the maker’s, so that users could correct it. The problem is that a user’s file stays in place indefinitely. If a maker later fixes or expands their help, a stale user file would go on hiding the newer text, and nothing would show that it had gone out of date. Either order has some drawback, but the maker’s version is the one that follows the module’s changes, so it takes precedence wherever it exists. A correction to a maker’s help belongs with the maker.

A file can cover just part of a module, and the rest comes from the next source. Each pop-up says where its text came from, which also answers your earlier question about a bare-bones file against a fuller one.

For makers who’d rather not create that JSON by hand, help can be written in the source code. Directly after the line that configures a control, which is where its tooltip is defined, you add comment lines starting with //?. Those become that control’s help. //?module gives the module’s description, and //?note adds a note. A small Python script, using only the standard library, reads the source and writes the JSON files into your help folder. It turns control names into numbers from your enums, including ENUMS runs, and a configure call inside a loop covers the whole run. Anything it can’t place, it reports with the file and line instead of guessing. I’ve kept help separate from tooltips on purpose: a tooltip is best kept short, and help is where the detail goes.

So that a maker or a user doesn’t have to start from an empty file, the Help module’s right-click menu will have an export. It writes a starting file for every module in a chosen plugin, with every control, input, output and indicator listed, the current text beside each entry for reference, and blanks to fill in.

About speaking the whole help pop-up by default: I’d rather keep it as it is, where clicking a line speaks that one line. I’ll also keep speech as part of the help pop-up, available by clicking on the text you can see, rather than as a separate option. With my eyesight, I may read a short text myself and ask for it to be spoken when I prefer. And because text to speech sometimes garbles a word or a symbol, I may need to look at the text to understand a detail.

About choosing the key and click that opens help: I’ll add that. Option-click (Alt-click on Windows) stays the default, and the Help module’s right-click menu will let you pick another combination.

About the scroll bar appearing sometimes and not others: I’m looking into it, but I haven’t reproduced it yet. If you can tell me a module and a control where it happens, that would help me find it.

I’ve confirmed two of your bugs. Controls on a child panel, as in Envelope Factory, are missed because Help only looks at controls attached directly to the module’s panel. And on Windows, a new reading doesn’t stop the one before it. I’ll fix both.

That all sounds fantastic!

Help 2.1.0 is available here: Release v2.1.0 · chrisgr99/DreamerHelp · GitHub

It includes the design described above. Let me know if you have feedback or issues.

I’ll be looking into the comments on the other modules today.

New versions of Help, and the Dreamer Development plugin with Clarity, Test Gear and Dark, are now available for download.

Dreamer Help 2.1.1 (download)

The design is described in my post above. In brief:

  • Help text is read from JSON files at run time rather than compiled into the plugin. It comes from three sources, in this order: a file in the maker’s own plugin, a file in the user’s Rack folder, and the built-in database.
  • A module’s files are read the first time its help is opened, not at startup. A menu item reloads them.
  • YAML is dropped. Everything is JSON.
  • Export, in the Help module’s right-click menu, lists every plugin in the rack. Choosing one writes JSON files for all of that plugin’s modules, one per module, as a starting point for a maker. Where a module has no help yet, the file is a template that lists every control, input, output and indicator, ready for you to add the help.
  • Help can be written in the source code as comments beside configParam or configInput lines, and a tool (helpscan) writes the JSON from them.
  • The gesture that opens help can be changed to any modifier with either mouse button. Option-click is the default.
  • Controls on inner panels are now found, as in Envelope Factory. Controls in a hidden panel are skipped.
  • On Windows, clicking a line to start it being spoken stops the previous one. I haven’t been able to test this on Windows, so a confirmation would help.
  • Documentation: docs/help-files.md and design/help-database.md.

Dreamer Development 2.1.0 (download)

Clarity

  • The Show pop-up on adjust button is deprecated and replaced by a new button, Tooltip readability. Rack’s own tooltips are drawn larger and in high contrast, centred below the control, or above it when there is no room below. The text size is set in the menu, from 100 to 300 per cent. As a value changes while the control is adjusted, the number stays aligned on the decimal point and doesn’t jump when the number of digits changes, so it’s easier to read.
  • The tooltip box doesn’t resize while the pointer stays on one control, and units stay in place as the digits change.
  • Consistent knob style is renamed Knob clarity, and now includes orange arcs that make the amount of rotation of each knob easy to see at a glance.
  • Bypassing Clarity turns it off as though it had been removed, and every setting is kept.
  • If you have edited the rules and want to revert, the Restore defaults menu item restores Clarity’s built-in colour rules.
  • colours.json now opens with an explanation of every field a rule can have.
  • A cable trace also ends on a click on empty rack.
  • The screws are removed from the panels.
  • Controls inside hidden containers are no longer drawn over.

Test Gear

  • The scope now locks onto slowly changing signals much better.
  • Slower sweep rates can be selected, and AUTO chooses them for slow signals.
  • Up to 22 seconds of signal is buffered, and when the scope is paused you can scroll back through it horizontally.
  • The scope and analyser are resized by handles just outside the face. The handles show while the pointer is on the face and for a second after, green while running and red while paused. The old grab bands and corner grip are gone.
  • The scope responds to clicks, hovers and scrolls only on its face and readout, so a port beside it keeps its own menu.
  • Switch is renamed Mute, and its indicator is on while muting.
  • Mute and Attenuverter now work on outputs. Mute removes every cable leaving the port. Attenuverter scales what arrives at every input the output feeds, and keeps up as cables change.
  • VCO and Note are merged into Oscillator, set by frequency or note name.
  • DC level and Volt per octave are merged into Constant voltage, shown as volts or a note name.
  • The voltmeter shows the voltage large, with the lowest and highest beneath it, each held for a second.
  • Frequency is renamed Frequency meter.
  • Dragging from a port with a widget on it now starts a cable on the first try.
  • Widgets appears in the port menu only while a Test Gear module is in the rack. Bypassing or deleting the module removes the widgets.
  • Widgets save and restore their settings with the patch.

Dark

I’m working on this, but there are no changes to announce at this time.

Still open

  • The help scroll bar that appears on some modules and not others. If anyone can name a module where it happens, that would help.

A few days ago I submitted these plugins for inclusion in the VCV Library, but I haven’t yet received notice that they’ve been added.

Dreamer Development 2.1.1 (download)

This release adds a new Clarity button, Click to arm a knob, which is off by default.

I have always found adjusting knobs by dragging awkward, and it adds to wrist strain. Rack has a setting that lets the scroll wheel adjust knobs instead, but it has a problem: a scroll meant to move the rack can turn whatever control the pointer happens to be over. With Click to arm a knob, a knob has to be clicked before the wheel adjusts it, so you can scroll the rack in either direction without changing a control by accident.

It also gives fine control on the wheel without a modifier key:

  • The first click arms the knob at Rack’s normal rate.
  • A second click gives a tenth of the rate, and a third a hundredth. These are Rack’s own fine and ultra-fine divisors.
  • After the control has been turned, the next click returns it to the normal rate rather than stepping finer.
  • A double click still resets the control.

An armed knob is marked with a green disc and an armed slider with a green bar. The mark goes when the pointer leaves the control.

Click to arm a knob can’t be enabled unless Rack is set to adjust knobs by scrolling.

Knob arcs

Knob clarity now includes orange arcs that show how far each knob is turned, so its setting can be read at a glance. The arcs used to be a separate option that was off by default. Now they come on whenever Knob clarity is on.

Knob clarity on the VCO and VCF. The orange arc on each knob shows how far it is turned.

Dreamer Development 2.1.3 (download)

New: Snap to rows

A new button on Clarity’s panel. Scrolling the rack snaps between a set number of fully visible rows of modules, from one to five. A fifth of a row shows above and below so you can see what is there.

  • Rows are scrolled with either the scroll wheel or the up and down arrow keys, each scroll action shifting the visible rows up or down by a single row.
  • Increase or decrease the number of rows visible with Command plus the up or down arrow key, or use the right-click menu to set the number of rows you want to see.
  • Normal zooming is disabled while this feature is on, because you zoom by increasing or decreasing the number of rows.
  • Dragging a cable past the top or bottom edge steps one row and carries the pointer with it, so a cable can be run to a module that is off the screen.

Changed

  • The setting that places tooltips above the pointer also applied in the module browser, where the tooltips covered the module descriptions. In the module browser, tooltips now always appear in the usual place below the pointer.

Fixed

  • With Tooltip readability on, adding a module from the module browser could sometimes crash Rack. This is fixed.
  • Lists in the module browser sometimes could not be scrolled. This is fixed.
  • With the scroll wheel set to zoom, scrolling a menu with a trackpad could stutter.
  • A cable patched from a Test Gear output could not be picked up by clicking its jack; a new cable was started instead.

Dreamer Development 2.1.5 (download)

Changes in 2.1.4 and 2.1.5 to Clarity, Test Gear and Dark.

Changed: Snap to rows

  • Continuous wheel scrolling steps through multiple rows, with no wait between rows.
  • Number of visible rows adjusted like zoom: Command plus wheel, or plain wheel, depending on Rack’s scroll setting.
  • Dragging a cable past the top or bottom snaps the next row into place.
  • Sideways scrolling with slight vertical movement no longer steps a row.
  • Changing the number of rows keeps the row under the pointer in place.
  • Scrolling goes one row past the end of the patch.
  • Command plus up and down arrow keys can be reversed in the right-click menu.

Fixed

  • Small or fast wheel movements stepping a row unintentionally.
  • View scrolling as soon as a cable was picked up near the window edge.
  • Clicking a port in the partial row at the top or bottom stepping a whole row.
  • Scrolling stepping two rows when one was intended.
  • Slight reverse wheel movement stepping a row back.
  • Test Gear widget on an input hiding the jack’s plug and signal indicator.

Apologies if its covered already, but I am having difficulty locating the controls on the DHelp for changing the size of the text and panels used? I saw a mention of it somewhere but I couldn’t make sense of it (non developer) and today I could not even locate that mention.

I am constantly referencing the information placed into the different apps’ user areas to this is YUGE for me! I am on a 16" display which although it’s spiffy, is really difficult to read for an old guy like me.

Sorry, I guess I forgot to add it to the README, although it is documented inside Help itself: option-click the Help module’s title bar and a pop-up explains its controls. I admit that is not ideal if the text is too small in the first place. I’ll add it to the README.

To change the text size, right-click the Help module’s title bar to open its context menu. The setting is at the very bottom of that menu.

Help can also be spoken, in your computer’s system voice. Option-click (alt-click on Windows) a line in a pop-up to hear that line read to you.

You can also hear help without clicking: hold option (alt) down and point at any control or port, and its help is spoken. Keep the key held down and move the pointer from one control to the next, and you hear each in turn.

Excellent I’ll try it when I get home! Thank you!

This is excellent thank you very much!