Changelog
All notable changes to this project will be documented in this file.
[[unreleased]] - 2026-06-16
๐ Features
- (neonraw/crash) Show error dialogs about a crash or failed assert.
- (neonraw/local-adjustments) Local adjustments with linear and elliptical gradients.
- (silvernode/gradients) Gradient editing with PieMenu.
- (silvernode/crash) Error dialog reporting about a crash or uncaught exception.
- (silvernode/copy) Radial menu for Ctrl-C allowing to specify what to copy.
- (silvernode/grid) Radial menu for important actions on photos.
- (silvernode/gradients) Shortcut to insert an inverted radial gradient.
- (silvernode/attention) The screen shakes to indicate the end of the sequence of photos.
- (silvernode/presets) Right-click menu to delete and rename presets.
- (silvernode/error) Error dialog when a generic error occurs.
- (silvernode/preset) Delete a preset now asks for confirmation.
- (silvernode/lens-correction) First working version of lens distortion correction, and vignetting correction.
- (silvernode/dwt) Disable โdisable-touchpad-while-typingโ automatically for SilverNode.
- (neonraw/lens-correction) Lens correction with distortion correction and devignetting working.
- (neonraw/bgfx) Application-wide view stats accumulator.
- (silvernode/settings) Quality levels of UI rendering.
- (nui/quality) Quality setting to speed up rendering and produce less geometry.
- (nui/combobox) Combobox can now have custom UI elements as options.
- (nui/dialog) Create dialog helper functions.
- (nui/pie-menu) Toggle mode and center button.
- (nui/attention) Components can ask for attention with a short animation.
- (nui/style) Containers can now have shaded backgrounds and drop shadows.
๐ Bug Fixes
- (silvernode/exif) Fix a crash when exif data couldnโt load.
- (neonraw/curve) Bad endpoint fixed.
- (silvernode/develop) Implement new contrast curve as the monitor function of the curve editor.
- (neonraw/curve) Curve value computation optimization was disabled.
- (silvernode/lens-correction) Maximum valid radius computed for Full-Frame lenses being calibrated on an APS-C sensor.
- (neonraw/texture) Memory regions for mipmaps were incorrectly validated upon freeing.
- (neonraw/memory-leak) Fix a GPU memory leak where the photo Texture data was never freed.
- (silvernode/denoiser) Lowest noise level of denoiser is now lower.
- (silvernode/grid) Layout error causing undefined behavior and all tiles being on one line.
- (nui/file-browser) Implement min-width algorithm.
- (nui/scroller) Layout bug through scrollers.
- (nui/viewport) Visible area was not passed down through containers.
- (nui/layout) Implement correct rounding to container and child sizes.
- (nui/button) Icons as UTF8 codepoints are now rendered.
- (nui/layout) Min/max size not respected when child was preferring a size outside of that range.
๐ Refactor
- (nui/font-size) 4 font size slots instead of a floating point factor, and font sizes per widget type.
๐ Improvements
- (silvernode/gradient) Linear gradient draws an arrow to the effect side of the gradient.
- (silvernode/frame-pacing) Fixed some sources of frame pacing issues.
- (neonraw/jrs) Skip waking up the GPU thread, if the current job is executed on the GPU.
- (neonraw/upload) Uploading texture data is no longer unnecessarily copied to a temporary allocation.
- (neonraw/align) Faster pointer alignment procedure.
- (neonraw/crash) Minimize stacktrace in error dialog.
- (neonraw/jrs) Make acquire and new_instance() fully lock-free.
- (neonraw/logging) More loggers.
- (neonraw/logging) Cleanup debug logging.
- (neonraw/raw) Store RAW data as with 16 bit color depth (takes more GPU memory).
- (neonraw/render) Rendering requires lower LOD, and a touch of fake sharpening is added in the shader.
- (silvernode/crash) Prevent recursive crashing when GPU is OoM: only attempt once to report through SDL_ShowMessageBox.
- (nui/file-browser) Move the action-button into the viewport when sitting inside a scroller.
- (nui/layers) 5 generic layers.
- (nui/popup) Popup gravity and anchoring is made consistent and has a neat helper function to set to the mouse position.
- (nui/checkbox) Checkbox design improved.
- (nui/stroker) Less bevel and round, and more miter line joins.
[0.8.2] - 2026-05-03
๐ Bug Fixes
- (neonraw/macos) Crash on startup, due to LMA not aligning to 16KiB page size.
- (silvernode/reset) Fix a crash upon resetting the edit of a picture.
- (silvernode/preset) Bugfix where thumbnails would flicker while the AI was working.
- (nui/file-browser) Std::filesystem::relative may throw.
๐ Improvements
- (neonraw/effects) Better saturation effect.
- (neonraw/effects) Better contrast effect.
- (neonraw/lma) Late init the LMA.
- (silvernode/crash-handler) Also report upon uncaught C++ exceptions.
[0.8.1] - 2026-04-26
๐ Features
- (silvernode/develop) Click the star ratings to adjust the rating.
- (nui/rating) Set cursor when a callback is set.
๐ Bug Fixes
- (neonraw/bgfx) Flush frame.
- (silvernode/develop) Fix a flicker to black when submitting edits.
- (neonraw/jrs) Several concurrency bugs have been fixed.
- (neonraw/jrs) Fix unresponsiveness upon low worker count.
- (silvernode/photo) JRS semaphore is now unique per photo. This fixes several stalls.
- (silvernode/auto-edit) AutoEdited white level is now saved.
- (silvernode/crash) Fixed the VRAM memory leak and glitches when texture slots were depleted.
- (neonraw/jrs) Fix deadlock where all threads are waiting on all other threads.
- (silvernode/photo) Prevent loading of the picture that is just being replaced in the Develop module.
- (silvernode/develop) Develop became unresponsive when the number of preloaded photos is higher than the worker count.
- (neonraw/jrs) Check for new jobs to launch when semaphore reaches 0.
๐ Improvements
- (neonraw/jrs) Remove indirection unpacking from the JRS.
- (neonraw/jrs) Optimized Halide parallel for routine.
- (neonraw/memory) Large memory allocator to recycle 2+ MB allocations.
- (nui/button) Center the icon if there is no text.
- (neonraw/halide) Improve CPU performance of certain pipelines.
[0.8.0] - 2026-03-25
๐ Features
- (silvernode/develop) Replace color preservingness with contrast saturation emulation.
- (neonraw/effects) Add contrast saturation emulation.
- (silvernode/develop) White level.
- (silvernode/exif) Display more EXIF info of the picture.
- (neonraw/effects) White level.
- (silvernode/grid) Drop multi-selection when clicking active edit again.
- (neonraw/json) Histogram serialization in base64.
- (neonraw/histogram) Histogram computation with Halide pipeline.
- (silvernode/ai) Automatic white level determination.
- (neonraw/effects) Local histogram equalization is back.
- (silvernode/grid) Filter on rejected pictures and non-rejected pictures separately.
- (neonraw/adjustments) Create finer-grained groups for the parameters which now also support serializing and deserializing by group.
- (silvernode/preset) Rework presets with separately selectable adjustment groups.
- (silvernode/preset) Input validation for the preset creation panel.
- (silvernode/preset) Preset groups are visualized by a grid of colored patches.
- (silvernode/preset) Group bits have fixed hand-picked color.
- (silvernode/preset) Hovering a preset โactivatesโ the UI widgets involved.
- (neonraw/color) Switch to Y12CoCg10 for RAW files.
- (silvernode/highlights) Add UI elements to control highlight reconstruction.
- (neonraw) feat(highlights): Rework highlight reconstruction.
- (silvernode/settings) Voice read audio settings (temporarily disabled).
- (silvernode/toolbar) Last executed keyboard shortcut shown in Toolbar.
- (silvernode/copy-paste) New copy-paste shortcuts and commands: Ctrl-V pastes whatever is copied. Ctrl-C copies style, Win-C copies color correction, Alt-C copies crop. Ctrl-Shift-V copies everything from previous.
- (silvernode/nui) Use nui Popup gravity feature.
- (silvernode/export) Export panel (Ctrl+E) with several exporting options.
- (neonraw/adjustments) Have a special tag for CameraGuessed source illuminant.
- (silvernode/photo) Set initial white balance to the one the camera suggests.
- (silvernode/before-after) Section headers are now hoverable too to disable the whole section (in combination with holding Escape).
- (nui/layout) Pad_by_radius added to disable that feature on request.
- (nui/layers) Extra overlay layer for temporary interactions: menus, tooltip, combobox dropdown.
- (nui/textfield) Proper UTF-8 support.
- (nui/popup) Popup gravity and anchoring to initiator.
- (nui/label) Disable wrapping.
- (nui/popup) Dismiss popup with escape.
- (nui/error) Error flag to render widgets with an opposing color.
- (nui/textfield) Hint optionally always shown.
- (nui/file-browser) Refresh folder.
- (nui/image) Allow unconstrained aspect ratio.
- (nui/slider) Reset with backspace.
๐ Bug Fixes
- (silvernode/export) Export order now matches the order in the grid.
- (silvernode) Clear uninitialized memory crash.
- (neonraw/effects) Re-enable primary calibration, which was accidentally disabled.
- (silvernode/develop) Disable retry to render texture to prevent a crash or endless retries.
- (neonraw/color) Fixed crash when color matrix is unavailable.
- (silvernode/grid) Fix crash when deselecting last picture with Ctrl-Click.
- (silvernode/macos) Grid multi-select now works with Cmd instead of Ctrl.
- (neonraw/halide) Fix GPU API selection for Metal and Vulkan.
- (neonraw/effects) Clear up some mixup between exposure (style) and base_exposure(color_correction).
- (neonraw/bgfx) Start fixing orientation disaster.
- (neonraw/color) Use NeonEXIF as fallback to fetch color matrix information in case RawSpeed didnโt (when DNG does not contain D65 calibration).
- (silvernode/exif) Orientation loading from EXIF.
- (silvernode) Unimportant race condition on SDL event type being created.
- (silvernode/loop) Fix busy main-loop when command bar was showing.
- (silvernode/reject) Immediately save the metadata as soon as a picture is rejected.
- (neonraw/error) Fix result constructor to also accept nullptr strings.
- (neonraw/small_vector) Use placement new to correctly initialize objects, instead of relying on (move) assignment operator of uninitialized objects.
- (silvernode/photo) Relax full-res image exif search.
- (silvernode/exif) Clear author label if not set in exif data.
- (neonraw/engine) Separate black levels are authoritative.
- (neonraw/highlights) Use reliable RGB16 format for now to fix broken highlights in some scenarios.
- (neonraw) fix(demosaic): Fix an occasional overflow causing weird patterns in highlight regions.
- (neonraw/libraw) Better retrieval of camera color matrix from LibRaw.
- (neonraw/processing) Remove highlight clipping from non-POT scaling factor.
- (silvernode/debug) Fix crash when toggling debug bits in grid.
- (silvernode/preset-sidebar) Fix bug in preset sidebar update logic.
- (neonraw/xtrans) Fixed demosaicing offsets for XTrans when loading via RawSpeed.
- (neonraw/highlights) Fixed some of the maths in the highlight recovery.
- (silvernode/zig) Update SDL3 to fix relative mouse motion bug.
- (neonraw/denoise) Fixed crash when using denoiser.
- (silvernode/bindings) Edits were not saved when using Blender bindings.
- (neonraw/histogram) G and B Color channels were swapped by accident. Rebalance colors to make white white in the histogram
- (neonraw/shader) Workaround a bgfx/shaderc issue that generates wrong UniformBuffer offsets.
- (silvernode/preset) Focus on name field.
- (silvernode/command-bar) Fix the command bar popup layout.
- (silvernode/preview) Fix preview popup position.
- (silvernode/copy) Fix keyboard shortcuts for Copy. Ctrl=Style, Shift=CC, Alt=Crop.
- (silvernode/command-bar) Text alignment and maximum size.
- (neonraw/macos) Highlight reconstruction bug in Metal shader.
- (neonraw/effects) Restore histogram equalization.
- (silvernode/exif) Also trim spaces.
- (silvernode/grid) Scrolling in grid and tile layout.
- (silvernode/copy) Fix silly bug in the copy shortcut.
- (neonraw/bgfx) Fix crash due to running out of framebuffers.
- (silvernode/bgfx) Flush when running out of frame buffers.
- (neonraw/curves) Improve resampling.
- (silvernode/grid) Rating was not showing.
- (silvernode/file-drop) File-dropping pictures was broken.
- (silvernode/develop) Colors changing when first touching a slider.
- (silvernode/photo) Initial orientation is now correctly loaded.
- (silvernode/user-input-viz) Fixed segv on scroll.
- (neonraw/crop) Range of translate.
- (silvernode/grid) Rejected edits now have correctly set the alpha of the file name too.
- (neonraw/engine) Loading thumbnails switches automatically to the full-res semaphore when starting from the base LOD.
- (silvernode/loading) The โLoadingโ indicator works again.
- (nui/slider) Discretized sliders broke: couldnโt properly slide them.
- (nui/file-browser) Public API should push tasks to the task queue to prevent doing stuff before roots are discovered.
- (nui/grid-layout) Use collapses of length 1.
- (nui/layout) GridLayout sizing bug for collapsed cells.
- (nui/text) UTF-8 multi-byte counting code was wrong.
- (nui/cursor) Move cursor to Component, to prevent uncounted removals and bugs.
- (nui/gui) Remove body from Component destructor.
- (nui/textfield) Refactor bug.
- (nui/layout) Fix some aspect ratio bugs.
- (nui/scroller) Fix a nan-bug in the Scroller.
- (nui/refactor) Fix layout bugs
- (nui/mouse) Generate mouse hover events if the cursor leaves the window.
- (nui/textfield) Two events are now marked as handled.
- (nui/popup) Clamp popup location better.
- (nui/textfield) Crash when typing when non-focussed.
- (nui/slider) Trigger render when resetting with backspace.
๐ Refactor
- (silvernode/exif) Move some of the EXIF-parsing logic into neonEXIF.
- (neonraw/oops) Simplify and remove some old OOPs.
- (silvernode/oops) Remove old OOPs code.
- (silvernode/sequence) Rewrite the EditSequence (no more OOPs).
- (neonraw) Refactor(curve)
- (silvernode/refactor) Nui refactor
- (silvernode/refactor) Nui refactor.
- (nui/refactor) Moved curve data to neonraw. nui now uses proxy.
- (nui) Wip(refactor)
- (nui/refactor) Also moved curve logic behavior and control logic from neonraw to nui.
- (nui/refactor) Revive tests.
- (nui) Wip(refactor)
๐ Improvements
- (silvernode/plugins) Detect conflicting keybindings.
- (silvernode/bindings) Edit/Learn are now Ctrl/Cmd-E and Ctrl/Cmd-L.
- (silvernode/histogram) Move histogram to the right panel to allow collapsing the left one.
- (silvernode/bindings) Add R/G/B alternative bind for Primary Calibration.
- (silvernode/config) Add default values for sliders (int/float settings).
- (silvernode/bgfx) Log which GPU gets selected for the bgfx render backend.
- (neonraw/color) Color Info supports multiple calibration illuminants (used in DNG).
- (silvernode/crash) Flush the crash report halfway.
- (neonraw/assert) Flush all loggers on assert.
- (silvernode/develop) Exif data is displayed nicer.
- (silvernode/fmt) Paths use native() on Unix and generic_string() on Windows.
- (silvernode/develop) Attempt to remove picture from Develop when directory is reloaded, and picture disappears.
- (neonraw/error) Force error handling by marking Resultas [[nodiscard]].
- (silvernode/preset) Preset creation panel is now in 3 columns.
- (neonraw/color) New RAW color processing mathematics and pipeline.
- (neonraw/source) Add SN_FORCE_RAW_DECODER to forcibly choose between libraw and rawspeed.
- (neonraw/highlight-reconstruction) Overhaul highlight reconstruction completely.
- (silvernode/hsl) Change colorspace for HSL edits to amcLab.
- (silvernode/hsl) Revert to Oklab-based HSL operations.
- (neonraw/color) Reduce default contrast saturation to 0.25.
- (silvernode/settings) Add descriptions for some more settings.
- (silvernode/exif) Label trim null-bytes.
- (silvernode/config) Configuration workspace UI improvements.
- (silvernode/shortcut) Shortcuts use nice icons on macOS in keyboard_help.
- (neonraw/error) Define errors through designated initializer lists.
- (silvernode/crop) Increase range of perspective sliders.
- (silvernode/filter) Changes to edit metadata now triggers the filters.
- (silvernode/filter) Filters updating try to maintain the selected edits.
- (silvernode/filter) New setting decides when the filter triggers: immediately or upon workspace switch.
- (silvernode/develop) Layout improvements.
- (nui/layout) Layout resolving improvements.
- (nui/spinner) Up/down sizes.
- (nui/debug) Account for UTF-8 multibyte to provide correct padding in print_ui_tree.
- (nui/theme) Increase font size to 17.
- (nui/file-browser) Use Theme font size.
- (nui/text) Baseline, line height and spacing improvements.
- (nui/debug) Layout debug printing for popups.
- (nui/layout) Max padding with corner radius of container.
- (nui/debug) Make debug_name a std::string_view.
- (nui/error) Better error colors.
- (nui/button) Request to rerender before running user callback to allow destruction.
- (nui/perf) Queue after layout performance improved.
- (neonraw/copy) Improve copy pipeline performance.
- (silvernode/shortkey) Use small_vector to register keyboard shortcut entries.
- (neonraw/perf) Remove Tracy from HalideBuffer move helper.
- (neonraw/curves) Optimize LUT compilation.
- (silvernode/curves) Optimize LUT generation.
- (nui/debug) Improve debug printing performance during layout.
[0.7.1] - 2025-09-09
๐ Bug Fixes
- (neonraw/xtrans) Reduce work group size for XTrans demosaicing.
- (silvernode/macos) Icons for Ctrl, Option, Command fixed.
- (silvernode/bindings) Map contrast turning point to R instead of V.
- (neonraw/histogram) Histogram bincount fixed.
- (silvernode/exif) Loading metadata also with the LibRaw fallback.
- (neonraw/shader) Fix a weird color glitch in the develop shader.
- (silvernode/exif) Let SDL handle conversion of the timestamp to a date time.
- (neonraw/json) Fix loading of arrays from json file.
๐ Refactor
- (nui) Wip(refactor)
- (nui) Wip(refactor)
๐ Improvements
- (neonraw/logging) Halide errors/messages are now printed through the regular logging system, and errors trigger a ReleaseAssert(false).
- (silvernode/logging) Halide specific logger for errors and messages.
[0.7.0] - 2025-09-03
๐ Features
- (silvernode/bindings) Special binding for crop-in with the scroll wheel.
- (silvernode/ui) Added icons in many places.
- (neonraw/histogram) Histogram computation functionality.
- (neonraw/ppe) Support outputting to bit depths 8, 10 and 16.
- (silvernode/develop) Add a histogram of the current view (reacts to zoom).
- (nui/popup) Add may_quick_dismiss field for Popups that says whether you can close a popup by clicking next of it.
- (nui/icon) Key icons.
- (nui/icon) Text parsing with embedded icon specifiers, with component flag PARSE_ICONS.
- (nui/icon) Icons can be interleaved with text using the
draw_text_with_icons helper function.
๐ Bug Fixes
- (silvernode/grid) Fix crash with assert when changing folder when not scrolled to the top.
- (silvernode/export) Auto export now uses the global queue.
- (silvernode/preview) Correctly position the popup in the window.
- (neonraw/shaders) Make the shader more bgfx-strict to also work for OpenGL.
- (silvernode/fuji) EXIF data loading for file width and file height fixed.
- (silvernode/develop) Crash when the image size went to zero.
- (silvernode/grid) Crash when filtering options where changed but no files are loaded.
- (nui/slider) Range doesnโt overwrite decimal places anymore.
๐ Improvements
- (silvernode/settings) Overhaul the settings view with icons and better descriptions.
- (silvernode/ui) Disable AI panel black square.
- (silvernode/bindings) Contrast turning point is now mapped to C;V.
- (silvernode/crash-report) Add version information for SilverNode and NeonRAW to the crash file.
[0.6.4] - 2025-08-29
๐ Features
- (silvernode/export) Show the current number of queued and running export jobs.
- (silvernode/grid) Scrolling is now animated.
- (silvernode/bindings) Remap ` to give a zero rating, instead of toggle before/after.
๐ Bug Fixes
- (neonraw/jrs) Fix for blocked GPU jobs not starting.
- (silvernode/grid) Fix that scrolling to the very top didnโt update the thumbnails.
- (silvernode/performance) Stop rerendering every mouse movement.
- (nui/scroller) Animated scrolling didnโt call the callback.
๐ Improvements
- (silvernode/bindings) Before after toggler now only works on Escape.
[0.6.3] - 2025-08-29
๐ Features
- (silvernode/export) Write EXIF data to JPEG files with neonEXIF.
- (silvernode/export) Export_album command to export selected pictures as JPEGs with a filename prefix and sequence number.
- (silvernode/halide) Add ability to select a compute API via โcompute command line argument.
- (neonexif/write) Add support for generating TIFF and JPEG Exif data writing.
๐ Bug Fixes
- (neonraw/jrs) Groups of Jobs with the same semaphore token can be revived from the blocked list.
- (silvernode/zig) Fix the compute API selection, caused by a misconfigured path in the zig build.
๐ Improvements
- (silvernode/windows) Crash handler handles more hardware exceptions.
- (neonraw/engine) Separate semaphore for thumbnails.
- (silvernode/engine) Use jrs::SemaphoreToken for most jobs to prevent explosions in memory usage.
- (silvernode/logging) Minimize spdlog logger pattern.
- (neonraw/halide) Improve the code that handles selecting a compute API.
- (neonexif) Non C++23 fallback for std::byteswap.
[0.6.2] - 2025-08-25
๐ Features
- (silvernode/develop) Before after toggler for sharpening/denoising.
- (neonraw/effects) EffectStrengths for sharpen and denoise.
- (silvernode/config) Add tags to all settings. This will be cool for filtering/sorting later.
- (silvernode/develop) Option to disable sharpening and denoise while animating.
- (neonraw/engine) Donโt rerender blurs for sharpening and denoising when they are still valid.
- (silvernode/crop) Add 16:9 and 21:9 aspect ratios.
- (silvernode/ai) Allow โfeaturesโ command from the grid.
- (silvernode/ai) Fix positioning of features on the photo in the develop module.
- (nui/button) Tag button type.
๐ Bug Fixes
- (silvernode/gui) Fix User input visualizer.
- (silvernode/develop) Temporary fix for missing frame at end of animations. Needs cleanup.
- (neonraw/halide) Remove usage of COPY_TO_HOST macro.
- (neonraw/pipeline) Fix validity tracking of intermediate buffers for sharpen and denoise.
- (silvernode/ai) Do proper sequencing of AI inference using a jrs::semaphore.
- (silvernode/halide) Replace usage of old COPY_TO_HOST macro.
๐ Refactor
- (silvernode/logging) Have separate loggers for AI related stuff.
- (silvernode/logging) Store the logger globals in SetupLogger.cpp.
- (neonraw/logging) Move logger globals to Logger.cpp.
๐ Improvements
- (silvernode/zoom) Zoom bindings slightly better.
- (silvernode/develop) Rerender/dirty logic looks correct now.
- (silvernode/logging) Use more appropriate logging levels for AI stuff.
- (neonraw/datadesk) Support neonraw::utils::small_vector.
- (silvernode/ai) Use small_vector for facial landmarks.
[0.6.1] - 2025-08-14
๐ Improvements
- (neonraw/halide) Schedule GPU for RAW_to_xyY.
[0.6.0] - 2025-08-13
๐ Features
- (silvernode/crash) Crash handler that will try to gather useful information about a crash.
- (silvernode/bindings) Disable Vim and Lightroom bindings.
- (neonraw/demosaic) First implementation of Nazari demosaicer (seems to not fully work yet).
- (neonraw/halide) ScopedHalideNoGPU.
- (silvernode/libraw) Add support for loading raw files throuhg LibRaw (slow).
- (neonraw/libraw) Add LibRaw data source.
- (neonraw/libraw) Integrate LibRaw for wider support of RAW formats.
- (neonraw/error) Proper Error handling system with neonraw::Result, integrated into jrs.
- (neonraw/demosaic) Initial support for X-Trans color filter arrays.
- (silvernode/photo) Allow more known extensions for RAW file formats.
- (silvernode/grid) Select directory in filebrowser when passing directory as command line argument.
- (nui/image) Very simple error message in a nui::Image.
๐ Bug Fixes
- (neonraw/demosaic) Donโt crash when the CFA is unsupported.
- (silvernode/file-browser) Donโt reselect a folder programatically when manually opening it.
- (silvernode/fuji) Accept RAF files. Probably wonโt demosaick still.
- (silvernode/grid) Donโt crash when the file/folder is not readable.
- (silvernode/debug) Fix the rerender indicator.
- (silvernode/thumbdb) Fix race condition in dealing with the Thumbnail database.
- (neonraw/halide) Revert No-GPU mechanism, as Halide caches the pipeline in a multitarget routine.
- (silvernode/halide) API selection is now sequential to avoid incorrect behavior later on.
- (neonraw/jrs) Const-ness of dependencies are now correctly unpacked.
- (neonraw/xtrans) Fix demosaicing issue in the XTrans Halide generator.
- (neonraw/libraw) CFA XTrans recognition was transposed.
- (neonraw/rawspeed) Remove incorrect bayer-offset adjustment (cf.ย crop_offset).
- (neonraw/libraw) Prefer LibRaw for loading SRF files (because we canโt demosaic that).
- (neonraw/halide) Temporarily disable custom_can_use_target_features, because it seems to not work in the Zig build. Need to investigate.
- (nui/file-browser) Do not list squashfs mounts (snap).
- (nui/popup) Fix popup event handling.
- (nui/file-browser) Reduce crashing by handling file system errors more gracefully.
- (nui/scroller) Animate crash when scroller was not under the root.
๐ Refactor
- (neonraw/datasource) Cleanup DataSource system: go for a data-driven approach.
๐ Improvements
- (silvernode/grid) Preview popup shows hint on how to close it.
- (silvernode/develop) Try to improve zoom bindings a little, break them a little.
- (silvernode/crash) Crash reporter includes thread ID and process ID in filename.
- (silvernode/error) Transition to the Result/Error system for proper error handling.
- (silvernode/photo) Use SmartDataSource which tries both RawSpeed and LibRaw.
- (neonraw/logging) Move some logging from neonraw to pipeline to reduce clutter.
- (nui/file-browser) Backup mechanism of detecting nodev on linux filesystems.
- (silvernode/thumbdb) Use Halide pipelines for the conversion of interleaved to planar.
- (neonraw/image-processing) New Halide pipelines for interleaving and deinterleaving from/to planar.
[0.5.6] - 2025-07-29
๐ Features
- (neonraw/memory) Make memory callstack sampling via tracy a runtime feature set by SN_MEM_CALLSTACKS.
- (neonraw/denoiser) Sqrt-compand SNR buckets.
- (silvernode/file-browser) Open folders through the file browser.
- (silvernode/drag-n-drop) Open folders and photos with drag-n-drop.
- (silvernode/file-browser) Select folder when dropping file or folder.
- (silvernode/bindings) Blender Develop bindings drastically improved with two-level bindings.
- (neonraw/util) Small Vector.
- (silvernode/develop) Scroll to activated sliders in Blender bindings.
- (nui/file-browser) Function to select a given std::filesystem::path.
- (nui/scroller) Update child visible area on demand.
- (nui/cursor) Better cursor setting support.
- (nui/file-browser) Show mounted drives.
- (nui/file-browser) Show Desktop, Home, Downloads, and Pictures.
- (nui/file-browser) Action button.
- (nui/slider) Oklch hue background function.
- (nui/file-browser) Showing drives as root elements under โMy computerโ
๐ Bug Fixes
- (neonraw/denoise) Fix the tile-overlap detection routine.
- (neonraw/denoise) Fix a race condition.
- (silvernode/grid) Disable layout optimization for now, to prevent layout glitch.
- (neonraw/blade) Trainer works again.
- (neonraw/adjustment-model) Stop emitting warnings for not-found keys.
- (silvernode/grid) The Grid layout issue is fixed.
- (silvernode/grid) The Grid layout issue when toggling fullscreen.
- (neonraw/halide) Fix that CUDA got incorrectly selected with AMD GPU.
- (silvernode/thumbdb) Do proper copying of the buffers to both prevent crashes and reduce lock contention.
- (nui/file-browser) Decode octal escapes in parsing /proc/mounts.
- (nui/file-browser) Skip non physical drives and /System/ drives in macOS.
๐ Improvements
- (neonraw/halide) Keep memory allocation owning logic into the halide_buffer_t::flags.
- (neonraw/halide) Add debug name to HalideBufferโs.
- (silvernode/thumbnails) Ability to have multiple ThumbnailProviders from different folders.
- (silvernode/thumbnails) Database checks better for cache hits.
- (silvernode/blender) Improving Blender bindings: new toggle pair with same key.
- (silvernode/thumbdb) Store larger thumbnails.
- (silvernode/thumbdb) Prevent creating thumbnail database on a filesystem that has less than 2GB of space left.
- (neonraw/effects) Reduce strength of sharpening with smaller LODs to reduce artefacts.
- (nui/slider) Hints follow the active coloring.
- (nui/icon) Clear up icons for FileBrowser.
- (nui/file-browser) FileBrowser OS calls go to a worker thread. Updates get queued in a process queue.
[0.5.5] - 2025-07-12
๐ Features
- (silvernode/develop) Resolution multiplier to trade of speed with performance.
๐ Bug Fixes
- (silvernode/crop) PhotoCanvas gets the correct total pixel ratio.
- (silvernode/develop) MSAA factor in crop mode was broken.
๐ Improvements
- (nui) Several API improvements to reduce copies.
- (neonraw/pipeline) Pre-allocation strategy for the intermediate pass textures.
- (neonraw/curves) Speed up UnitCurve calculations: remove heap allocations.
- (silvernode/memory) Several heap allocations removed.
- (silvernode/copy) Several needless object copies removed.
- (silvernode) Small optimization.
- (nui/grid-layout) Remove all heap allocations during layouting.
[0.5.4] - 2025-07-07
๐ Features
- (silvernode/crop) Show grid lines and third-lines in crop mode.
- (nui/chromaticity-picker) Default value.
๐ Bug Fixes
- (silvernode/crop) Preset sidebar now respects crop.
- (silvernode/develop) Temp/tint sliders not updating on reset of chromaticity picker.
[0.5.3] - 2025-07-06
๐ Features
- (silvernode/crop) Crop-in
- (neonraw/crop) Crop-in.
[0.5.2] - 2025-07-05
๐ Features
- (silvernode/crop) Aspect ratio.
- (neonraw/crop) Aspect ratio.
- (nui/icon) Icon drawing helper.
[0.5.1] - 2025-07-04
๐ Features
- (neonraw/crop) Straighten image (rotate + perspective correction).
- (silvernode/crop) Implement the grab tool to recenter the photo.
- (neonraw/denoise) Bring denoising back after it being disabled upon introducion of the crop feature.
๐ Bug Fixes
- (silvernode/exif) Fixed a crash upon failed loading of exif data.
- (silvernode/crop) Temporary workaround for a crash when size information is not yet available.h
[0.5.0] - 2025-07-03
๐ Features
- (silvernode) Toggle fullscreen with F11, Alt-Enter, or :fs, or :fullscreen.
- (silvernode/develop) Straighten image (rotate + perspective correction).
๐จ Styling
- (silvernode) Icon for Windows exe file.
[0.4.1] - 2025-06-23
๐ Features
- (silvernode/debug) Backtrace command.
๐ Bug Fixes
- (silvernode/windows) Enable VT processing on the ConsoleMode.
๐ Refactor
- (silvernode/halide) Use my own HalideBuffer wrapper struct.
- (neonraw/halide) New HalideBuffer wrapper struct with better memory management API.
- (neonraw/data-frame) Remove the LOD indirection: EDFs now always have a preknown LoD level.
[0.4.0] - 2025-06-16
๐ Features
- (silvernode/bindings) Implemented different variants of blender bindings.
- (silvernode/bindings) Reworked the Blender Bindings. Can now cycle through groups under the same letter. Also tweaked some UI aspects.
- (silvernode) Initial drop-folder/file support (has memory leak).
- (silvernode/develop) Gray background in Develop.
- (silvernode/thumb-db) ThumbDB seems to work!
- (silvernode/settings) Settings saving and loading.
- (silvernode) Version command.
- (neonraw/blade) SoE analysis.
- (neonraw/jrs) Added the ability to reject the duty of initializing when acquiring a Res.
- (neonraw/blade) Side-of-Edge analysis and filter bank dimension.
- (neonraw/denoiser) SoE-aware denoising.
- (silvernode/denoiser) New continuous denoiser setting for noise amplitude.
- (neonraw/blade) New denoiser with SoE analysis.
๐ Bug Fixes
- (silvernode/settings) Fix small configuration editor bug.
- (silvernode/ui) Fix #232. Color wheel distribution.
- (silvernode/linux) Potentially fixes #231. Rerender window when it becomes visible again.
- (silvernode/linux) Fix #230. Prefer wayland, but fallback on X11.
- (silvernode/ai) Potential fix for the AI-crashes. #224
- (silvernode/ai) Fix initialization of ai::PhotoFeatures.
- (silvernode/bindings) Small fix in Blender Develop Bindings for cycling pairs.
- (silvernode) Small fixes.
- (silvernode/thumb-db) Return full mipmap chain from thumb db loader.
- (silvernode/thumb-db) Fix bug in ThumbDB destroying device allocations in a race condition.
- (silvernode/bindings) Cancel adjusting for blender bindings now resetss all selected images.
- (silvernode/thumbdb) Fix loading of ColorInfo to respect the rules of the JRS.
- (neonraw/engine) ColorInfo is now correctly precreated without accepting the initialization duty.
- (neonraw/jrs) Return CREATED for initialization-duty postponed resources instead of NEW_VERSION.
- (neonraw/jrs) Fix a deadlock where the gpu-thread is waiting on the destruction of a GPU resource for which destructor code is in a waiting destroy-job.
- (neonraw/denoiser) Fixed incorrect locking of required denoising buffers.
- (nui/slider) Slider discrete fill computation fixed.
๐ Refactor
- (silvernode/engine) No more unknown LODs.
- (neonraw/engine) No more unknown LODs. Simplified some things.
๐ Improvements
- (silvernode) GridThumbnailManager and ThumbDB.
- (silvernode/grid) Improve the GridThumbnailManager
- (silvernode/thumb-db) ThumbDB improvements.
- (silvernode/grid) Improve grid priority setting performance.
- (neonraw/jrs) Decrease waiting in subjob completion waiting.
- (nui/nui) Small perf optimization.
๐จ Styling
- (silvernode/develop) Shade adjustments panel and AI panel.
[0.3.0] - 2025-06-02
๐ Features
- (silvernode/develop) Sharpening and Color denoising.
- (silvernode/photo) Use RawSpeed for parsing metadata.
- (silvernode/grid) Masonry zoom with ctrl-scroll.
- (silvernode/bindings) Add select/deselect all.
- (silvernode/debug) Setting for making debug commands show up in keyboard help.
- (neonraw/adjustments) Have default HSL curves have 8 handles.
- (silvernode/ui) Add version string to window title.
- (neonraw/img-proc) Seperate 2-pass blurring filters for denoise and sharpening statistics.
- (silvernode/ui) Light theme.
- (neonraw/jrs) Semaphore allocation system in the JRS.
- (neonraw/debug) Add Tracy tracking for mimalloc.
๐ Bug Fixes
- (silvernode/develop) Fix zoom bug.
- (silvernode) Fix icon pixel data layout.
- (silvernode) Fix SilverNode not exiting when photos werenโt loaded.
- (silvernode/develop) Fix UI scaling issue with Zoom plugin.
- (silvernode/photo) Fix saving Denoiser settings.
- (silvernode/bindings) Fix activating sliders and blender bindings.
- (silvernode/ai) Fix AI when running on CUDA.
- (silvernode/bindings) Fix shortcuts in Grid.
- (silvernode/ui) Fixed non-portable keyboard shortcuts in reference to #186.
- (silvernode/ui) Fix alignment of textbox in commandbar.
- (neonraw/macos) Disable mimalloc on macOS with system compiler clang 18.
- (neonraw/img-proc) Bugfix OpenGL sharpen/denoise.
- (neonraw/macos) Mark NEON as available always (for MacBooks that will be true).
- (silvernode) Merge include/ into src/. Promote all warnings to errors and fix them.
- (neonraw/cmake) Promote all warnings to errors and fix them.
- (neonraw/aarch64) Fix aarch64 compilation bug.
- (neonraw/memory) Fix resource management for Blur Textures.
- (neonraw/macos) Figured out the mimalloc override plan for dealing with the bug on macOS. Also, this bug seems to go away with SDK15.4.
- (neonraw/windows) Fix Windows aarch64
- (neonraw/jrs) Bugfixes for Job reviving logic after being blocked in JRS.
๐ Refactor
- (silvernode/libfacedetection) Cleanup libfacedetection.
- (silvernode) Fix for updated vg-renderer
๐ Improvements
- (neonraw/img-proc) Reduce memory usage for denoising and sharpening buffers.
- (neonraw) Extra safety for not accessing lods out of bounds.
- (color) New improved curves fitted on planckian locus, based on Judd-Vos data.
- (silvernode/ui) Move UI widget background generators to separate file with -O3 flag.
- (nui/nui) Small perf optimization.
๐จ Styling
- (silvernode/grid) Improve design of the tiles in the grid and preset bar.
- (silvernode/ui) Work on the light colorscheme.
[0.2.0] - 2025-06-02
๐ Features
- (neonraw/debug) Working on DOT visualization of the program state.
- (silvernode/logo) Polished Logo. wip(neonraw): Rewrite Texture/FrameBuffer stuff. Close to finished.
- (silvernode) Support failing images.
- (neonraw/jrs) Support failing jobs and propagate failure information to resources.
- (silvernode/bindings) Zoom Bindings.
- (silvernode/settings) Descriptions for settings.
- (neonraw) Zoom Support.
- (silvernode) Export queue (per plugin for now).
- (silvernode/debug) Add tracy self-profiling support.
- (neonraw/jrs) Hook up the jrs::JobSystem as the implementation for Halideโs parallel for. Now we can effectively limit the number of thread silvernode uses with this.
- (neonraw/jrs) Added SN_WORKER_THREADS env variable to read from.
- (neonraw/jrs) Semaphores are managed by ref-counted SemaphoreTokens, which hold a โtakenโ state.
- (neonraw/jrs) Wakeup GPU callback.
- (silvernode/bindings) Blender develop bindings for multi-select in grid.
- (silvernode/ui) Support fractional scaling.
- (silvernode/bindings) Blender hold-and-drag option.
- (neonraw/adjustments) Seperate effect strength for base exposure and exposure.
- (silvernode/develop) Implemented new contrast function, which is shown in the curve as background monitor function.
- (neonraw/shader) Implemented new contrast function.
- (neonraw/blade) First seemingly working implementation of the BLADE trainer.
- (neonraw/blade) Seemingly first decently working multiscale denoising training and inference.
- (neonraw/blade) BLADE augmentations. Schedules for GPU for most pipelines.
- (silvernode/filebrowser) Added a file brower in the grid (does nothing yet).
- (neonraw/blade) Multiscale BLADE denoiser works beautifully.
- (neonraw/blade) PSRN monitoring.
- (neonraw/blade) SNR.
- (neonraw/blade) Filter property table rendering.
- (neonraw/blade) Cool table printing stuff for visualizing filter bank properties.
- (neonraw/jrs) JRS has now a dedicated Halide device thread.
- (neonraw/halide) Support for Halide device API selection.
- (silvernode/denoiser) A metric shitton of work on the denoiser.
- (neonraw/halide) Properly detect API support for Halide, configured through CMake.
- (neonraw/debug) Track Halide device memory in Tracy.
- (neonraw/denoiser) Specify LoD-level below which the Engine takes care of denoising, instead of the Pipeline.
- (neonraw/halide) Support multiple GPU compute API backends in Halide.
- (neonraw/denoiser) Seemingly almost have a correctly functioning Tiled Multi-scale Denoiser.
- (neonraw/debug) Dot visualize Halide jobs.
- (neonraw/img-proc) Sharpening and Color denoising.
๐ Bug Fixes
- (neonraw/jrs) Fix JRS_INSTRUMENT=false.
- (neonraw/memory) Bugfix arena allocator to respect alignof(std::max_align_t).
- (neonraw) Fix the ImageBlock and Texture mess. Fixes #192.
- (silvernode) Fix render loop.
- (silvernode/jrs) Fix JRS bug where blocked jobs were not revived.
- (neonraw/jrs) Fix JRS bug where blocked jobs would not start once their launch guard was ready.
- (neonraw) Fix fmt::runtime usage.
- (neonraw) Bugfix the linkage of the new/delete operators.
- (silvernode) Bugfix main render loop for slow hardware.
- (neonraw/memory) Memory allocator alignment bug.
- (silvernode) Tweak the render loop logic to fix a CPU usage bug.
- (silvernode) Fix rotation of images.
- (silvernode) Hopefully fix the render-loop for real this time.
- (silvernode) Fix dt for plugins after pause.
- (silvernode) QโnโD fix for exporting JPGs from Ctrl-E. We need a proper export queue with visualization in the UI.
- (neonraw/jrs) Bugfix JRS assert_ready vs assert_assert_and_not_failed in case of Optional.
- (silvernode/jrs) A few bugfixes regarding jrs::ResRef::is_ready that should have been is_ready_and_not_failed.
- (silvernode/bindings) Small tweaks to game controller handling.
- (silvernode/develop) Fixed effect strength toggling. Also seperated base exposure and exposure.
- (silvernode/ui) Fix background of UserVisualization.
- (silvernode/ui) Fix key name in user input visualizer.
- (silvernode/photo) Fix Saving of edits.
- (silvernode/ui) Also Fix Clamp UV for rendering in vg-renderer.
- (neonraw) Tiny fix.
- (silvernode/ui) Bugfix HiDPI
- (neonraw/pipeline) Insert missing copies.
- (neonraw/blade) Fix fast noise.
- (neonraw/blade) Fixed the multiscale training: mipmap instead of bilinear.
- (silvernode) Small tweaks/fixes.
- (silvernode/linux) Fiddling to make Wayland work.
- (neonraw/halide) Fix Halide pipeline error on CUDA.
- (neonraw/img-proc) Fix demosaicing on GPU when buffer is cropped. Bug happened where device copy exceeds bounds due to offset+pitch*rows being outside of buffer.
- (neonraw/img-proc) Demosaic full-size and fix clamping to wrong color (clamp mod 2). Leave Halide device taken.
- (neonraw/img-proc) Fix sharpening on zoomed-out images.
- (neonraw/adjustments) Fix saving denoiser settings.
- (neonraw/jrs) Bugfix WeakResRef deadlock when clearing producers upon invalidation.
- (neonraw/denoiser) Fix nan-bug in shader for zero color-denoise vector.
- (nui) Some SDL3 fixes.
- (nui) Compilation issue fix.
๐ Refactor
- (neonraw/jrs) Memory tracking revamped.
- (neonraw/pipeline) Redid the Pipeline Preparing interface: can now specify which Bits you want to preload.
- (neonraw/pipeline) Removed all the Refs from the PipelineFrameState to free memory of intermediate buffers once they were no longer needed.
- (neonraw) Lots of cleanup.
- (neonraw) Moved files. Will run sfincludes.
- (neonraw) Improve compile times by moving debug print stuff out to JRS_instrument.cpp and factor out the non-template part of ResControlBlock, ResRef, and WeakResRef.
- (neonraw) Factored out the to_dot of ResourceControlBlock to the instrumentation file.
- (silvernode) Ditched ghc/filesystem in favor of std::filesystem.
- (silvernode) Notify Finished Jobs queue is now moodycamel::concurrentqueue.
- (silvernode) Almost done with transitioning to vg-renderer instead of nanovg.
- (silvernode) Fixed some more bugs regarding transitioning to vg-renderer. I think it might be finished.
- (silvernode) Semaphores are managed by ref-counted SemaphoreTokens, which hold a โtakenโ state.
- (silvernode) Remove fallback from to-dot, so I implemented all to-dot providers.
- (silvernode) Updated to the Layered rendering of nui.
- (silvernode/plugins) On-demand continuous plugin update mode.
- (neonraw/halide) Reorganize Halide generators a bit in separate files, and bundle the related ones into INTERFACE cmake targets.
- (neonraw) Before doing a sfincludes.
- (silvernode/libfacedetection) Switch to my fork of libfacedetection.
- (neonraw/blade) Factor BLADE solver out to neonraw main code.
- (silvernode) Migrated to SDL3
- (neonraw/dd) Rewrite dynamic dispatch.
๐ Improvements
- (neonraw/jrs) Closing the new JRS compatibility gap.
- (neonraw/jrs) Implement string_tape to construct names of variables.
- (neonraw/jrs) Swapped out the std::string name in ResControlBlock for a const char*.
- (neonraw) Use color matrices in rawspeed data.
- (silvernode) Lots of improvements.
- (silvernode) Reduced aggresiveness of preloading.
- (neonraw/jrs) Allocate Jobs from a thread-safe foonathan::memory_pool.
- (neonraw) Grouped together a few more jobs that were too small for a parallel for.
- (neonraw/img-proc) Relax requirements on bilinear demosaicer.
- (silvernode) Change render loop timing to use SDL Performance Counter instead of SDL Ticks.
- (silvernode) Grid thumbnail rendering supports being dirty and automatically refreshing itself.
- (neonraw/jrs) JRS perform_gpu_job now returns why it didnโt perform any.
- (silvernode) Made darknet optional.
- (silvernode/settings) Improved settings workspace.
- (silvernode/ui) Improve rendering loop.
- (silvernode/develop) Improve dirty-marking for failed pictures.
- (silvernode/ui) Estethics improvements (target white point, filter label).
- (silvernode) Tweak contrast.
- (neonraw/shader) Tweak contrast.
- (neonraw/blade) Remove non-triangular Gram matrix storage.
- (silvernode) More tweaking on the main render loop.
- (neonraw/memory) Neonraw::memory debug mode uses foonathan malloc allocator for creating unordered_map
- (silvernode) Frame rate estimation outlier clamping.
- (neonraw/blade) Figure out that coherence is more important. Figure out that the second blurring window is important when trying to determine filters.
- (neonraw/blade) Optimized some of the BLADE file IO: support for writing arrays, and coalesced memory allocations for filter in filterbank.
- (neonraw/blade) Lots of work on BLADE and denoising.
- (silvernode/bindings) Adjust blender bindings for contrast and saturation. Closes #212.
- (neonraw/denoiser) A metric shitton of work on the denoiser.
- (neonraw/img-proc) Small performance improvements in demosaic pipeline and convert YCoCg pipeline.
- (neonraw/denoiser) Improved stability of denoiser.
- (neonraw/img-proc) Improve sharpening a lot.
- (neonraw/denoiser) PoC shrinking color denoising.
- (color) Small improvement to the Tint mode.
- (neonraw/img-proc) Sped up bilateral_grid computation.
- (neonraw/img-proc) Sped up extract highlight ratio extraction.
- (silvernode) Ditch perfrep as a seperate project and bake it into NeonRAW with a decent rewrite using foonathan::memory;
- (neonraw/perfrep) Ditch perfrep as a seperate project and bake it into NeonRAW with a decent rewrite using foonathan::memory.
- (neonraw/jrs) Improve subjob logic to reduce overhead.
- (silvernode/ui) Speed up generation of background textures for the HSL curve editors.
- (silvernode) Grid thumbnail keep aliver now also keeps gpu-buffers on cpu side ready for the thumbnail (need to evaluate memory impact).
- (silvernode) Prevent retriggering thumbnail render in the grid if the previous one is not displayed yet.
- (neonraw/shader) Implement a texture pool logic for uploading curves to the GPU.
- (neonraw/blade) BLADE trainer is working on GPU.
- (neonraw/blade) BLADE Denoiser works on GPU. Vrrooooomm!
- (silvernode) Optimize startup time.
- (neonraw/halide) Spawn separate Halide worker thread function to enable asynchronous API detection.
- (neonraw/blade) Improve MSBladeInfernece schedule.
- (neonraw/rawspeed) RawSpeed loading with memory mapped files.
๐จ Styling
- (silvernode/settings) Improve configuration workspace with info about settings.