PNS CUSTOMIZABLE SKIN
Blue Cat Audio has released a great tool for people entering VST plugin development world. It's called Plug'n Script, and it's fantasic!
Plug'n Script let's you build your own VST/VST3/AU/AAX plugins very quickly. You can write you own DSP code for processing audio/MIDI and create your own GUI using KUIML language. If you don't want to spend time developing the GUI, it can be created automatically according to the parameters you've added to your DSP script.
Although Plug'n Script is so great, there are few things about the default skin that can be improved. That's why we've developed our own highly customizable skin for Plug'n Script (version 3.3 and up) that you can use for free in non-commercial projects. If you sell your plugin with our skin, consider a one-time donation of $19+.
Version history
Version 1.504 Build 251107
- [New] Added support for private_output_params (hidden output parameters, added in PnS 3.52)
- [New] Built-in TextWidget extension allowing multiline text output and editing (supports bbcode, tables, images). See docs at https://pns.letimix.com/kuiml/lm/text_widget
- [New] Error handling support: KUIML errors are now displayed in the GUI (instead of popups), script errors are also displayed in the GUI (in addition to the log file). Can be disabled, see LM_ERROR_HANDLING tag in skin file letimix.xml
- [Export] Improved export routines, fixed minor issues while exporting
- Added support for exporting as an "Application" (PnS 3.5 feature). It is now possible to build and open it in a single click.
- Export "Post-build app" section reorganized: cleaner "presets" menu behaviour, big "Run app" button, bottom line shows full run command (click to copy it to clipboard).
- Disable meters upon export if you don't use them or use custom code for meters (to save CPU). In addition in the latest PnS versions meter values are calculated only when GUI is opened (to save CPU).
- Added possibility to export additional files from Skins directory (using $SKINS_DIR$ variable)
- "Make body static" is grayed out when unavailable (on auto-layouts)
- Fixed color issues with dark scheme on Mac (text color for dropdowns, border color for text edit boxes are now fixed)
- Fixed minor issues (working with decorations, empty title items)
- [New] Option "Menu > Enable sections > Load 'Skin settings' on demand". Improves skin (re)loading time by not including 'Skin settings' codebase. When enabled you'll see a "↻" icon near "Skin settings" in menu. It means if you open Skin settings, it will first reload the skin with included Skin settings and then open it. Useful if you rarely use 'Skin settings' and want to improve your skin loading time.
- [Improved] Skin settings buttons reorganized. Added button "Save skin as..." (save settings to a new skin and immediately switch to that skin). Added checkbox "Reopen settings after save" (you can also hold Shift or Ctrl when clicking on "Save...": holding "Shift" enables, and "Ctrl" disables this setting). Added hint with current skin name when hovering "Save" button and current skin name to 'Skin Settings' window title.
- [Improved] LM graphics x2 resolution: Knobs, Sliders and Meters now are in higher resolution, crisp and sharp when zooming and on HiDPI displays
- [Improved] Auto-reload now works better (now it uses file modification time routines which were fixed in AngelScript included with PnS > 3.31) and works faster/easier on CPU/RAM, it also suspends during script reloading
- [Improved] MAKE_RESIZEABLE better support for proportional scaling, adding scale_min, scale_max and non_scalable_area sizes
- [Updated] LetiMix Debug Skin was updated with latest KUIML and PnS parameters, variables and actions
- [Improved] Skin loading time, overall optimizations
- [Improved] Various fixes and improvements in Skin Settings window
- [Reorganized] Controls customizer and Skin scanner are now in "Helper tools" submenu
- [New] ONLOAD_ONCE template to run scripts only once on GUI opening (<ONLOAD_ONCE script="..." /> in addition to existing <ONLOAD script="..." />)
- [Improved] Status text can be changed temporary returning to previous value or not: void status(string text, double seconds_to_show, bool return_to_old_text = false)
- [Reorganized] LM Skin user settings (post-build presets, etc) now saved at [PNSDIR]/Configs/LM_Skin (make future skin updates easier)
- [Removed] Got rid of unnecessary executable files for older Windows support
- [Fixed] exporting with "Auto layout - Enabled by default" failed to load exported plugin if it has .kuiml file
- [Fixed] changing knobs/meters/switches in Skin Settings "Auto-layout" page didn't affect the GUI
- [Fixed] Background width under presets menu is applied properly
- [Fixed] Meters with LEDs could sometimes freeze the GUI when resizing the plugin.
Version 1.192 Build 240613
- [Fixed] Loading and export issues with latest PnS build
Version 1.191 Build 201024
- [Fixed] Mac: Skin could crash in some cases due to error in AngelScript datetime object
- [Fixed] Mac: Some LMR knobs caused errors when tallness was 0
- [Fixed] Mac: Updated input controls to support MacOS dark theme
Version 1.19 Build 201014
- [Improved] LMR controls now use INVISIBLE_ elements introduced in KUIML 2.7 (PnS 3.3)
- [Improved] Export: post-build application section (click on the LED on the left to "Build!" button to open section, right-click for menu)
- Select an application and attributes to run after successful build (auto-run or manual execution). This way you can run a host app to open built plugin, or run a system script (.bat or .sh) to further prepare and publish your plugin.
- Applications can be saved as presets for quick access. Left-click on cog for menu. Right-click on cog to select preset. Right-click on "run post-build app" icon to select and run application in one go.
- [Improved] Export GUI settings separated in two sections - rewrites and options
- [Improved] Export now adds missing info into Mac packages .plist (version, descriptions, etc.)
- [Improved] Export now also optimizes Model and About
- [Improved] Export also searchs for <EXPORT requires="ELEMENT;function;classname" /> in main
- [Improved] Export intense stripping better detection of used script objects
- [Improved] Loading dynamic kuiml body: removed async loading, .kuiml SKIN colors and fonts have priority over skin settings
- [Fixed] Possible crashes on loading .kuiml body in several plugins simultaneously
- [Fixed] Export with flattening skin missed legacy BC controls if used
Version 1.18 Build 200617
Work-in-progress update to support released PnS 3.3
- [New] Skin settings editor is disabled by default to speed up skin loading. Enable or disable skin sections from menu ("Menu->Enable sections")
- [New] "Auto-reload scripts" feature (save your script/kuiml file and it's automatically reloaded in PnS)
- [New] "Controls generator" module to easily customize or make new widgets (knobs, meters, faders etc). Any widget based on TEMPLATE can be edited (currently enabled only for LMR_TPL_KNOB).
- [New] Drag to resize: plugin main window can be resizeable (disabled by default), see skin xml <MAKE_RESIZEABLE ... > option (experimental). Make sure to set .kuiml skin width and height to 100% to use with resizeable skin.
- [Added] Data model support for plugin intercommunication (shared data model is implemented in all Blue Cat Audio plugins, but is not intended to use in Plug-n-Script, probably because of implementation complexity when using multiple different scripts in one plugin)
- [Improved] Export:
- build and immediately open your plugin in external application. Right click on "Build results" LED icon to set up application and param, click on it to execute app. Optionally enable "auto-" mode to be executed upon successful build.
- optimization routine: additionally reduce skin size by 5-40% stripping usused blocks of code from copied files.
- In "Normal" mode optimization removes blocks marked as <!-- NO_EXPORT --> ... <!-- END_NO_EXPORT --> and /* NO_EXPORT */ ... /* END_NO_EXPORT */
- In "Strong" mode it also removes unused TEMPLATES and DEFINES.
- In "Intense" mode it also removes unused classes and functions from script files.
- If strong/intense optimization uncorrectly removes the items you need, you can explicitly mention them in .kuiml file like that: <EXPORT requires="myfunc;myClass;MYTEMPLATE;MYDEFINE" />
- Optionally strip all comments and whitespaces/newlines (which can lead up to 20% of size reduction and almost obfuscate your KUIML code).
- flattening skin (tries to put all includes and scripts into single xml file)
- support for exporting data model (copies required data model files and [scriptName].model located in current script folder)
- option to select another skin for export (for example export with debug skin for testing)
- option to replace right click action on export (in addition to existing replacements)
- option to make custom .kuiml body statically included after export (instead of dynamically loading via KUIML_WIDGET), which speeds up GUI loading time
- auto copy 'About', 'Legal' and 'Presets' folders from scripts directory
- add builddate on export into default.xml and About/about.xml
- [Added] Support for SCRIPT_DATA_PATH variable in PnS 3.3
- [Added] Support for hi-resolution controls in PnS 3.3
- [Added] EXTENSIONS_DIR for reusing pieces of code in .kuiml
- [Added] Extensions: Log (experimental, may change) and color_preview
- [Added] Auto-check for updates (disable "About LM Skin" section to skip update check every 14 days)
- [Improved] Skins now can be saved (via Skin Save As...) to any folder/subfolder
- [Improved] status() can be used to read value as well
- [Improved] status can be animated - status("text", duration_in_sec)
- [Improved] Faster skin reloading
- [Improved] Skin scanner: shortens too long paths, fixes in copying template code, close and back buttons
- [Fixed] Skin settings window unexpected changing position
- [Fixed] Skin scanner browser limits length of too long filenames on screen
- [Fixed/Changed] all _DIR variables end with "/" and contain full path, all _SUBDIR vars don't have start/end slashes (old skins may fail to load - update <INC .. /> and <LOAD_FONTS .. /> parts)
- [Changed] /scripts/RenderObjects are moved to /controls/LMR_Scripts
- [Changed] All KUIML scripts now have .as (AngelScript) extension
Version 1.01 Build 200229
- [Fixed] Export could freeze on GUI preparation
Version 1.0 Build 200216
Feature list:
- Easily change background colors, add gradients and shadows
- Add your own background images, groups of images, layer them, resize them, stretch and so on
- Live preview of changes on working plugin; toggle between old/new to compare two themes
- Save new skin configuration for every plugin you make (used skin file is remembered in PnS presets)
- Save and load themes with all skin settings for quick reusing and sharing; selectively load themes and theme parts
- Change body/toolbar/status bar size and padding, icon sizes and colors
- Change body/toolbar/status bar fonts, sizes and colors. Try custom .ttf/.otf fonts easily.
- Easily show or hide toolbar, meters, decorations, statusbar; additional statusbar option - show up only on errors
- Choose your own action for clicking on title (or no action); for example - click on the title to reload script/skin while in development mode;
- Customizable toolbar; use pre-build items or add your own. Easily add you own url or file link/manual to toolbar. Make toolbar single row or multiple rows. Two ways of using presets. Add your own elements using <TEMPLATE id="TOOLBAR_MYLOGO" ... />
- Customizable status bar. Add additional items to status bar. Printing to status bar from KUIML using status("text"). Add your own elements using <TEMPLATE id="STATUS_MYINFO" ... />
- Freely remove any skin part (with no warnings) and write your own toolbar, body or statusbar
- Convenient debug skin for development: see all the variables, params and actions available in KUIML, easy copy and use.
- Fully customizable meters with several styles (flat, gradient, LEDs)
- Show/hide/limit the number of meters, change it's size/orientation and position.
- NEW TOOL! Skin scanner (built-in option) lets you see what knobs/faders/meters/icons etc are defined in your skin. Easily browse/find/copy the name of the knob you need and paste into your code.
- Skin scanner lets you examine skin structure, see what elements/templates are defined in which files, how much they are used and where. You can load other skins (from other Blue Cat Audio plugins) to examine. Filter and save lists of elements for future use.
- Improved auto-layout for scripts with no custom .kuiml. Two auto-layouts present - text controls only (useful for development and testing) and graphic controls (evolved from default skin). In graphic controls use any elements (including your own), change knobs/cells size, padding, grouping, colors etc.
- COOL EXPERIMENTAL! Customizable knobs/faders/switches/meters drawn insize your skin (no need for rendering external png strips). Make knob/fader of any size and color, change it's properties, opacity etc. These elements also support basic properties like zoom, offset, reverse etc and some additional attributes like "disabled", "angle_from", "angle_to" and others.
- Built-in 3D light/shadows engine that draws custom shadow for each knob/fader in the layout depending on it's position. Adjust light source properties and see how your shadows change. Adjust camera properties to get 3D look of rendered controls.
- Export enhancements: select which plugin formats you want to build
- SMART EXPORT copies only the files that are used in your skin/custom .kuiml. Usual skin size after export is ~400 Kb, and can go even lower.
- Now inside your .kuiml you can use external graphics/scripts/includes, current folder is defined in KUIML_DIR variable. All included files/scripts/defines are automatically copied while export. In addition you can mention extra files to export using directive <EXPORT files="readme.txt;sample.wav" dirs="imagesDir;dataDir" manual="myplugin.pdf" /> inside your .kuiml