Warning
This project is now hosted on Codeberg.
RE Edit is a free and open source WYSIWYG editor for the UI of a Rack Extension, or in other words, a graphical editor for hdgui_2D.lua and device_2D.lua. Although the tool is currently limited to the UI only, it is already extremely useful and depending on feedback, it may be expanded, at a later date, to allow supporting editing ALL configuration files (motherboard_def.lua, display.lua, etc...).
This README is about the project itself not the product. If you want information about how to install and use the product, check the RE Edit product page.
- CMake based Dear ImGui application
- Uses raylib for the ImGui backend
- Uses custom shader for live image editing
- Render to texture for merging raylib + custom shader and ImGui
- Uses Dear ImGui docking branch to allow to dock windows (offer quick way to toggle between horizontal/vertical layouts)
- Clickable, zoomable "panel" where widgets can be freely moved around (100% ImGui code with rendered textures and mouse event handling)
- Uses a "Welcome" window which occupies the entire available space and properly resizes as the (native) window is resized
- Native implementation preference management (load/save preferences as a lua file stored in the "default" preference location per platform)
- Native file browser (integrates btzy/nativefiledialog-extended)
- Remembers location/sizes when the application is closed and reopened
- Remembers the history of previously opened Rack Extensions
- Handle high resolution (4K/retina) on macOS properly (font is rendered super crisp ;) ) as well as resolution change (ex: dragging to a non retina monitor)
- Handle high resolution (4K) on Windows properly (using a scaling factor so that everything looks about right), as well as resolution change (ex: dragging to a low resolution monitor)
- Undo/Redo (Undo is challenging and requires merging events (ex: moving a widget around = one undo entry))
- Native implementation "open URL in browser"
- Native implementation network access (HTTPS GET only)
- Embedded lua parser (used by Rack Extensions as well as preferences for RE Edit)
- Asynchronous texture loading (which works out of the box on macOS/metal but is challenging on Windows/OpenGL3)
- Uses a different font (JetBrains Mono) and FontAwesome (embedded via base85 compressed encoding)
- Uses built-in icons (embedded via base85 compressed encoding)
- The project is a CMake based project and requires CMake 3.24+ to be installed.
- If you want to build the archive on Windows, you must install Wix (v3)
- All other dependencies are fetched automatically
- It successfully builds on macOS 11.7.2/Xcode 13.2.1 (Intel only) as well as macOS 13.0.1/Xcode 14.1 (universal build).
- It successfully builds on Windows 10 with Visual Studio 16 2019 build tools.
Clone this repository and run the following commands.
configure.pyandre-edit.pyare simple (python 3) wrappers aroundcmakeinvocation to make it less error-prone and build with the right set of parameters. Each command takes a-noption to show which actualcmakecommand is being invoked (dry-run).- Use
-hoption for help
# will build the macOS app in release mode (-r option)
> ./configure.py -r
> cd build
> ./re-edit.py -r build
# will build the Windows executable in release mode (-r option)
> python3 .\configure.py -r
> cd build
> python3 .\re-edit.py -r build
Feedback and/or suggestions to improve the tool are more than welcomed. Feel free to open a ticket to discuss or contact me.
pongasoft produces a variety of high quality and free/open source software. If you would like to support my work and help offset the cost of development tools, web hosting, etc. here are a couple ways to do so:
- Send money via PayPal
- Sponsor Me on GitHub
- With the non-backward compatible changes introduced in SDK 5.0.0, introducing a new version scheme reflecting the
RE SDK version. The new numbering scheme is
<re_sdk_version>.<year><month><day>. - Note that the name of the program remains
RE Editfor update purposes. The new version will be calledRE Edit 5.0.0to be able to have multiple versions installed and to allow re-cmake to pick up the correct version.
- Added support for
device_categorieswhich was added as a new requirement to Reason 13
- Fixed issue with contrast not being saved
- Added "Commit All Effects", at the widget level as well as at the global level, to be able to remove all
re_edit_*entries fromdevice_2D.luaonce the effects are applied (permanent/no more undo) - Added concept of notifications to inform the user of important messages
- Fixed instances where RE Edit would generate duplicate names
- Some performance improvements (textures are removed from the GPU when deleted)
- Use a button (rather than a menu) for resizing the panel
- Added "Show Performance" menu entry to always show (resp. hide) the performance
- Added new icons, especially for widget visibility to make it clear that the user has manually changed it
- Fixed "Escape key" closes the application
- Added "light" image editing/effects: resize, tint, brightness, contrast and flip (horizontal and vertical)
- all effects are done live on the GPU
- when the project is saved a new image with the effects applied is generated
device_2D.luauses this image so that it works with Render2Ddevice_2D.luaalso stores which original image + effects were used so that when reloaded in RE Edit, it works as well- Check it in action on YouTube
- Added a menu entry "File/Delete unused images" to figure out which images (under GUI2D) are used by the project and which ones are not
- Added a performance menu to tweak the frame rate
- Use
Altkey to disable most filters (used when selecting images or properties in drop down lists) - Internally, massive refactoring of the code to use raylib as the backend for ImGui:
- much more common code between Windows and macOS
- using custom OpenGL shader (for effects on GPU)
- generate the panel (using raylib + custom shader) into a texture to be rendered as an image in ImGui
- Added ability to drag and drop image(s) (png) from the Finder (resp. File Explorer) onto the main window to import them
- Use grid when adding widgets/decals
- Turned "Add Decal" into a menu showing the list of all graphics (since a decal is nothing more than a graphic)
- Shows the image in Quick View for graphics
- Added Quick View in lists of graphics (menu lists and dropdowns) to easily and quickly be able to pick the right graphic
- Added Help menu: displays the keyboard shortcuts
- Uses re-mock 1.4.3 which means re-edit can be built without depending on the RE SDK
- Added ability to load a project by simply dragging it from the Finder (resp. File Explorer) onto the main window
- Disable saving preferences when there are multiple instances running (to avoid conflicts)
- Fixed visibility property type and owner
- Implemented Undo History / Timeline (quickly undo/redo multiple operations)
- Easily show/hide a widget even if there is no visibility property defined (eye icon)
- Added an "All" widgets tab in the Widgets window (in this tab, widgets are sorted by name). The "Widgets" and "Decals" tab remain the same and are sorted by Z-order (this is where you would go to change their respective orders).
- Major redesign of the "Properties" window to only show visibility properties currently in use
- Implemented "drag and drop" to easily add a widget to a visibility group (use "Alt" key to add to multiple groups): drag a widget from the Widgets window and drop onto a group in the Properties window (drag and drop also works from within the Properties window itself).
- Internal complete redesign of the Undo layer to be more flexible and allow "timeline"
- Implemented Copy/Paste for bulk editing/changes
- You can copy a single widget (copies all attributes), and it can be pasted into:
- any panel where the type of the widget is allowed => duplicates the widget
- another widget => copy all (possible) attributes to the widget
- selected widgets => copy all (possible) attributes to all selected widgets
- You can copy a single widget attribute value, and it can be pasted into:
- another widget => copy this attribute to the widget (if possible)
- selected widgets => copy this attribute to the selected widgets (if possible)
- You can copy the selected widgets, and it can be pasted into:
- any panel where the type of the widgets is allowed => duplicates the widgets
- You can copy a single widget (copies all attributes), and it can be pasted into:
- Removed "Duplicate Widget(s)" menu entry since it is redundant with copy/paste (duplicate only allowed duplication on the same panel, copy/paste does not have this restriction)
- Added Select All/Select By Type menu entries (use
Altto include hidden widgets) - Simplified popup menu on Panel (added Widgets submenu instead of multiple menu entries)
- Added "A" keyboard shortcut to toggle between Select All/Select None
- Added "Q" keyboard shortcut to show a Quick View (while the key is being held). Essentially a tooltip on demand:
- When hovering above a widget on the Panel
- When hovering above a widget name in the "Widgets" window
- When hovering above a property path
- When hovering above a graphics attribute
- When hovering above an entry in the "Open Recent" submenu
- Shift + click now also selects the widget under the mouse pointer (no need to move)
- Added more visible error icon in the tab bar
- Moved the notification section up to be sure it is always visible
- Various UI tweaks
- Fixed some issue with Undo/Redo
- Fixed application name on macOS
- Fixed trackpad and mouse wheel sensitivity issue when zooming in/out
- Major redesign of the panel:
- no more scrollbars
- input shortcuts
- click + drag to move freely (or space + click + drag if on top of a widget to disable selecting the widget)
- arrows to move the panel
- mouse wheel to zoom in/out (zoom focus point is wherever the mouse pointer is)
Xto toggle Widget X-RayFfor Zoom to fitCfor Center panelBto toggle Widget bordersRto toggle Rails (+ panel X-Ray to see them)
- added "Clear Recent List" menu entry
- fixed crash on redo
- fixed improper error reporting when moving multiple widgets
- Added Fold Icon / Rack Rails (thanks to @jengstrom at Reason Studios for the icons)
- Added Panel rendering (None / Border / Normal / X-Ray) (for example, to see the rails)
- Changed zoom to be common to all panels and added Zoom to Fit (now defaults when device opens)
- Added keyboard shortcuts (Save, Undo/Redo, Zoom In/Out/Fit, Quit)
- Fixes GH#1: RE Edit fails to load nested decals
- Fixes GH#2: Decals are not rendered properly
- Some minor performance improvements
- First public release
This project uses the following open source projects (some of them are embedded in this source tree under external)
- Apache 2.0 License. This project can be used according to the terms of the Apache 2.0 license.

