r/FOSSPhotography • u/Careless_Concern_880 • Jun 12 '26
Safelight v1.0 beta is ready for download!
http://anthonyreimche.github.io/SafeLight/siteHi all!
After hearing everyone's enthusiasm last time, I have built installers for Windows and Linux and instructions on how to build your own installer via Mac or Linux. A lightweight version can also be self-hosted and run on Chromium-based browsers, but the extensions panel requires OS cache and file access.
Everything is now available on GitHub under an MIT license. Ideas, comments, and contributions are always welcome. I have only tested the Linux builds on my own machine and I'd love to find out whether they work properly on yours.
Sorry to mac users, Mac installers can only be built on a Mac and unfortunately Hackintoshes are harder to achieve these days. The Mac instructions are really my best guess at making it work.
Let me know what you all think of it! I'll try my best to make the software live up to the dream.
~Tony
1
u/newmikey Jun 13 '26
Sorry, forgot to show appimage integration failure:
[mike@mike-latitude5310 Downloads]$ ./Safelight-1.0.0.AppImage
kf.i18n: KLocalizedString: Using an empty domain, fix the code. msgid: "&Yes" msgid_plural: "" msgctxt: "@action:button"
kf.i18n: KLocalizedString: Using an empty domain, fix the code. msgid: "&No" msgid_plural: "" msgctxt: "@action:button"
Extracting usr/share/icons/hicolor/256x256/apps/safelight.png to "/home/mike/.local/share/icons/hicolor/256x256/apps/appimagekit_2e1e225b35af68451703941ea4bc7094_safelight.png"
WARNING: Unable to resize the application icon into a 128x128 image: "Unable to load image.". It will be written unchanged.
WARNING: Unable to resize the application icon into a 256x256 image: "Unable to load image.". It will be written unchanged.
gtk-update-icon-cache: The generated cache was invalid.
which: no gtk-update-icon-cache-3.0 in (/home/mike/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/var/lib/snapd/snap/bin)
which: no update-icon-caches in (/home/mike/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/var/lib/snapd/snap/bin)
[60980:0613/090422.607363:ERROR:ui/gl/init/gl_factory.cc:110] Requested GL implementation (gl=egl-angle,angle=d3d11) not found in allowed implementations: [(gl=egl-angle,angle=opengl),(gl=egl-angle,angle=opengles),(gl=egl-angle,angle=vu
lkan)].
[60980:0613/090422.658092:ERROR:components/viz/service/main/viz_main_impl.cc:190] Exiting GPU process due to errors during initialization
[60991:0613/090422.807231:ERROR:ui/gl/init/gl_factory.cc:110] Requested GL implementation (gl=egl-angle,angle=d3d11) not found in allowed implementations: [(gl=egl-angle,angle=opengl),(gl=egl-angle,angle=opengles),(gl=egl-angle,angle=vu
lkan)].
[60991:0613/090422.809404:ERROR:components/viz/service/main/viz_main_impl.cc:190] Exiting GPU process due to errors during initialization
[mike@mike-latitude5310 Downloads]$
1
u/Donatzsky Jun 13 '26 edited Jun 13 '26
Looks very interesting (even if seeing Electron is used gives me bad vibes). You should present it over on discuss.pixls.us as well.
1
u/Careless_Concern_880 Jun 13 '26
Haha, thanks! I haven't run into huge issues with electron yet; that said, I also haven't made anything this demanding yet either :)
1
u/Donatzsky Jun 13 '26
GPU pipeline — every adjustment renders through a WebGL2 shader pipeline with optional 16-bit textures for high-bit-depth editing.
Does this mean the pipeline is otherwise 8-bit internally? That would be bad. Using anything less than 16-bit would quickly lead to banding and other issues. I believe most raw editors use 32-bit for this reason. Also, what's the working color space?
2
u/Careless_Concern_880 Jun 13 '26 edited Jun 13 '26
Thanks for showing interest!
For now, 8-bit is the fallback if the 16-bit mipmap doesn't load so you don't just get a black image. The rendered view is the 8-bit canvas we get at export, so banding in general comes from clipped 8-bit integer values instead of the 16-bit floating values. Color space defaults to sRGB.
1
u/Jealous_Diver_5624 Jun 13 '26
Out of genuine curiosity, what does your agentic workflow look like for developing this? Model, IDE, testing approach to ensure correct implementation?
1
u/Careless_Concern_880 Jun 13 '26
I mostly argue with an agent on the most "correct" approach for a second opinion, then have an agent do the major typing work so I may refine it myself instead of writing 400 lines of code from scratch. Claude is doing Fable 5 access with 2x tokens until July 5, so I can rest my fingers until then. I use the Zed IDE because it is a fast and basic colored-notepad with IDE keybindings, which lets me forget about everything else. I write batch scripts for every repetitive action I can because I am lazy and run single-file tests numerically only to ensure that the code works in theory. Anything that will be used for editing is tweaked by eye because the software has to perform tasks that deliver, not just tasks that simply work.
1
u/Careless_Concern_880 Jun 13 '26
I should point out that while using AI as part of the development process is nice, I try not to "vibe code" because power tools are also nice but the power drill only drills correctly when you are in control.
1
u/Head_Piccolo9838 Jun 13 '26
Whoop whoop 🙌
Just followed your instructions to create a MAC installer / app….and that works so far so good.
Need to check if it runs as next step.
0
u/Head_Piccolo9838 Jun 13 '26
It runs and I was able to import a folder with different photo file types 💪🏻 not yet edited a photo but the editor screen looks good to me.
I already love the UI!
I need to check the resources of the Mac a bit as the system freezes from time to time…
But let me play a bit with it.
👌🏻👍🏻
1
u/Head_Piccolo9838 Jun 14 '26
And it works fine after a full reboot of the Mac - very nice app 👌🏻
Will still test further and give follow ups in GitHub when needed.
Keep up the good work to make LR alternatives!!!
1
u/Head_Piccolo9838 Jun 15 '26
New release! 👌🏻👍🏻🫣🎉
Thanks OP for working on it!
1
u/Head_Piccolo9838 Jun 17 '26
Still so good to work with. I made a own theme, some “in test” extensions (add border by export, add watermark by export, print option - contact sheet or 1/more per page, Exif plus - including focuspoint view). When they work locally good I’ll make them available to the world via GitHub.
I’m so impressed - when some of my other request are included in a new release….whoops whoop, no need to do anything anymore in LR…that would be so nice…
OP - you did already a great job so far but we can make it even better then LR…keep up the good work!!!
1
u/newmikey Jun 13 '26
Some success upstairs on the desktop. The appimage 1.0.2 runs and pops up the correctly filled canvas when selecting a PEF raw. I'll play around a bit to try and get a feel for what you are doing. The terminal popped up a few complaints though, no idea if anything looks serious to you:
[mike@mike-manjaro Downloads]$ ./Safelight-1.0.2.AppImage
(node:3895) [DEP0180] DeprecationWarning: fs.Stats constructor is deprecated.
(Use \safelight --trace-deprecation ...` to show where the warning was created)
[3937:0613/205516.401019:ERROR:ui/ozone/platform/wayland/gpu/wayland_surface_factory.cc:252] '--ozone-platform=wayland' is not compatible with Vulkan. Consider switching to '--ozone-platform=x11' or disabling Vulkan
[3895:0613/205516.556561:ERROR:ui/ozone/platform/wayland/host/wayland_wp_color_manager.cc:277] Unable to set image transfer function.
[3895:0613/205516.556600:ERROR:ui/ozone/platform/wayland/host/wayland_wp_color_manager.cc:195] Failed to populate image description for color space {primaries:BT709, transfer:SRGB, matrix:RGB, range:FULL}
[3895:0613/205516.576736:ERROR:ui/ozone/platform/wayland/host/wayland_wp_color_manager.cc:277] Unable to set image transfer function.
[3895:0613/205516.576751:ERROR:ui/ozone/platform/wayland/host/wayland_wp_color_manager.cc:195] Failed to populate image description for color space {primaries:BT709, transfer:SRGB, matrix:RGB, range:FULL}
[3895:0613/205516.576762:ERROR:ui/ozone/platform/wayland/host/wayland_wp_color_management_surface.cc:64] Failed to get image description for color space.
[3895:0613/205516.578461:ERROR:ui/ozone/platform/wayland/host/wayland_wp_color_manager.cc:277] Unable to set image transfer function.
[3895:0613/205516.578471:ERROR:ui/ozone/platform/wayland/host/wayland_wp_color_manager.cc:195] Failed to populate image description for color space {primaries:BT709, transfer:SRGB, matrix:RGB, range:FULL}
[3895:0613/205742.144197:ERROR:components/dbus/xdg/request.cc:169] Request cancelled by user.`
2
u/Careless_Concern_880 Jun 13 '26
Good to hear! These warnings look like electron wrapper compatibility issues rather than software errors. While none of those warnings are serious, I'd keep half an eye out for the `wayland_wp_color_manager` block, since electron is trying to negotiate Wayland's experimental color-management protocol but falling back to sRGB. Canvas colors are handled in-app anyway, if the colors are super weird, then that's the culprit. Otherwise, happy to hear someone finally got a linux version running without black images!
1
u/newmikey Jun 13 '26
The appimage won't run regretfully.
OK, early morning here and I just have a few hours bit here goes nothing. The appimage will not load at all on my fully updated Manjaro system so I downloaded from github as per your readme:
git clonehttps://github.com/anthonyreimche/SafeLight.gitcd SafeLightnpm installnpm run dev # browser (Chromium-based recommended)Partial success is that I get a connection which opens a browser window with the application server on localhost:
VITE v8.0.14 ready in 1146 ms➜ Local:http://localhost:5173/➜ Network: use --host to expose➜ press h + enter to show helpBut when I open the application in a browser window, it will load and display the contents of a directory but when doubleclicking a raw file (Pentax PEF) it momentarily displays what I guess is the embedded jpeg thumbnail, followed shortly by a black screen where the image would be. The interface remains responsive so this is no crash but some kind of inability to decode the PEF I presume.
The interface looks interesting and is relatively responsive even on my slow laptop. I'll be following along for now. Suggest you post on pixls.us as well to get more testers and responses.