LightCraft v0.17.0

LightCraft is a free, open-source photo management and RAW development application designed as an alternative to Adobe Lightroom. Built in Rust, it combines photo library organization with a comprehensive set of image editing tools, allowing photographers to adjust exposure, refine colors, apply local corrections, and prepare images for export without modifying their original files.

LightCraft is designed for desktop use on Windows, macOS, and Linux, with a WebAssembly version that runs in a browser. It also supports automation through a command-line interface and the Model Context Protocol (MCP), making it an interesting option for photographers who want local control over their workflow.

Features

Non-Destructive Photo Editing

LightCraft keeps original images intact and stores editing operations separately. You can experiment with different adjustments without permanently changing the source files.

Its editing tools include exposure, contrast, highlights, shadows, whites, blacks, tone curves, white balance, vibrance, and saturation. The application uses a wide-gamut, 32-bit floating-point processing pipeline designed to preserve tonal and color information throughout editing.

Color Grading and Presets

The color tools include an eight-band Color Mixer, RGB tone curves, and separate color grading controls for shadows, midtones, and highlights. These features provide flexibility for natural photo correction as well as creative color treatments.

LightCraft also includes built-in presets and lets users save custom looks. You can copy, paste, or synchronize selected adjustments across multiple photos, which is useful when editing a collection of images from the same shoot.

Local Masking and Adjustments

LightCraft supports brush masks, linear gradients, and radial gradients, along with selection tools for luminance, color, sky, subject, and background. Masks can be combined, subtracted, intersected, and inverted.

Local adjustments let you change exposure, contrast, color, texture, sharpness, and other properties in specific parts of an image. This helps users refine skies, brighten subjects, or create more controlled lighting effects without applying every adjustment globally.

Crop, Geometry, and Black-and-White Editing

The cropping tools support common aspect ratios, straightening, rotation, flipping, and manual geometric transformations. Composition overlays help photographers align images and refine framing.

For monochrome photography, LightCraft includes black-and-white conversion, an eight-band monochrome mixer, and additional color grading controls for creating tinted or split-tone results.

Photo Library Management

LightCraft includes tools for organizing photo collections, including folders, albums, smart albums, stacks, virtual copies, ratings, flags, labels, filtering, searching, and sorting.

Its local-first approach avoids requiring an online account or cloud catalog. The project describes its catalog as a human-readable log of editing operations, making it easier to inspect, back up, and replay changes.

Command-Line and AI Automation

In addition to its graphical interface, LightCraft provides a command-line application for rendering images and applying adjustments. MCP support allows compatible AI agents to interact with the application through an automation interface.

These capabilities are useful for repeatable editing tasks, scripted workflows, and experimentation with AI-assisted photo processing.

Download LightCraft v0.17.0 - Software Mirrors

LightCraft v0.17.0 for Windows

lightcraft-0.17.0-windows-x86.msi | 91.21 MB

lightcraft-0.17.0-windows-x86-portable.zip | 110.19 MB

lightcraft-0.17.0-windows-x64.msi | 93.46 MB

lightcraft-0.17.0-windows-x64-portable.zip | 114.81 MB

lightcraft-0.17.0-windows-arm64.msi | 89.67 MB

lightcraft-0.17.0-windows-arm64-portable.zip | 110.12 MB

LightCraft v0.17.0 for macOS

lightcraft-cli-0.17.0-macos-universal.zip | 112.99 MB

lightcraft-0.17.0-macos-universal.dmg | 118.61 MB

LightCraft v0.17.0 for Linux

lightcraft-0.17.0-linux-x86_64.tar.gz | 114.46 MB

lightcraft-0.17.0-linux-x86_64.rpm | 115.44 MB

lightcraft-0.17.0-linux-x86_64.pkg.tar.zst | 88.58 MB

lightcraft-0.17.0-linux-x86_64.flatpak | 82.09 MB

lightcraft-0.17.0-linux-x86_64.deb | 116.12 MB

lightcraft-0.17.0-linux-x86_64.AppImage.zsync | 189.44 kB

lightcraft-0.17.0-linux-x86_64.AppImage | 108.11 MB

lightcraft-0.17.0-linux-riscv64.tar.gz | 111.37 MB

lightcraft-0.17.0-linux-riscv64.rpm | 112.4 MB

lightcraft-0.17.0-linux-riscv64.deb | 112.83 MB

lightcraft-0.17.0-linux-aarch64.tar.gz | 109.56 MB

lightcraft-0.17.0-linux-aarch64.rpm | 111.45 MB

lightcraft-0.17.0-linux-aarch64.pkg.tar.zst | 85.48 MB

lightcraft-0.17.0-linux-aarch64.flatpak | 77.28 MB

lightcraft-0.17.0-linux-aarch64.deb | 112.24 MB

lightcraft-0.17.0-linux-aarch64.AppImage.zsync | 181.57 kB

lightcraft-0.17.0-linux-aarch64.AppImage | 103.61 MB

LightCraft v0.17.0 for BSD

lightcraft-0.17.0-freebsd-x86_64.tar.gz | 113.84 MB

lightcraft-0.17.0-freebsd-aarch64.tar.gz | 108.41 MB

Others Download related to LightCraft v0.17.0

lightcraft-web-0.17.0.zip | 69.92 MB

LightCraft v0.17.0 Source Code

LightCraft v0.17.0 Source code (zip)

LightCraft v0.17.0 Source code (tar.gz)

LightCraft v0.17.0 Release Notes:

What's Changed

  • Updates: shared check-result dialog from craft-update by @aiongg in #3437
  • docs: tidy agent, contributor and asset docs by @aiongg in #3436
  • Integration r3: 178 reviewed PRs by @aiongg in #3430
  • Issue #3405: Auto Import waits for an import that starts during its listing by @finaler1x in #3409
  • LR-BEHAV-ACCESS: a date header in the photo grid is named with the text it shows by @nledford in #3212
  • LR-BEHAV-ACCESS: a slider's value field is named " value" and describes how to use it by @nledford in #3214
  • LR-VIEW-PHOTOGRID: the grid's empty view names Import Photos' shortcut as the keymap has it by @nledford in #3221
  • Issue #3228: the hard-link originals test holds under SeBackupPrivilege (Git Bash, the CI gate) by @THEtheChad in #3230
  • Reject signed ports in Url::parse by @Silvertree2010 in #3233
  • Reject signed numbers in Content-Range parsing by @Silvertree2010 in #3234
  • Show the remembered crop ratio's box on an untouched photo by @Silvertree2010 in #3235
  • Reject EXIF offsets beyond 18 hours by @TheGalitube in #3242
  • LR-BEHAV-ACCESS: an icon button's accessible name is its label, with the shortcut as its description by @nledford in #3253
  • LR-BEHAV-ACCESS: a dialog is exposed to screen readers as a dialog, not a group by @nledford in #3260
  • LR-BEHAV-ACCESS: the photo in Detail is named with its file name by @nledford in #3262
  • LR-BEHAV-ACCESS: the grid's Thumbnail size reads as a slider by @nledford in #3265
  • LR-BEHAV-ACCESS: panels and bars are named as landmarks and toolbars by @nledford in #3273
  • LRC-LIB-FOLDERS: the home folder and Local's built-in places can't be renamed or moved by @nledford in #3276
  • Develop exports from a source at least twice the output size by @Silvertree2010 in #3281
  • Refuse a signed or malformed Content-Length in HTTP responses by @Silvertree2010 in #3283
  • FACES: a person's page finds its look-alikes in seconds, not minutes by @tabasko78 in #3286
  • MENU-BAR: merge the native menu's identical quit/about/settings branches (clippy::if_same_then_else) by @Peaperfish in #3295
  • Issue #3293: README no longer lists an MCP mask helper by @Peaperfish in #3296
  • Issue #3251: People card badge shows the full photo count by @Peaperfish in #3297
  • Issue #3272: AI masks are enlarged along the photo's edges, no outline under a raised Exposure by @Peaperfish in #3298
  • Contributors: add my entry (Peaperfish) by @Peaperfish in #3307
  • Reject malformed base64 in MCP and segmask decoders by @Silvertree2010 in #3309
  • LR-IMP-FORMATS: decode compressed RAF 13–17 % faster with a buffered bit reader by @cbram in #3321
  • LRC-LIB-CATALOG-SWITCH: a library missing at launch is reported instead of being made anew with demo photos (#3239) by @Bruno-Alumn in #3322
  • LR-MASK-PINS: Object and Describe masks show a pin that selects them (#3049) by @Bruno-Alumn in #3323
  • LRC-LIB-FOLDERS: Move Folder To… asks for the destination without freezing the window (#3140) by @Bruno-Alumn in #3325
  • LR-VIEW-HISTOGRAM: the histogram's clipping buttons read in every theme by @nledford in #3331
  • LR-BEHAV-TITLEBAR: a dialog leaves the macOS title bar undimmed by @nledford in #3332
  • fix(ui): translate the white balance preset menu by @newdives in #3364
  • Reject multiple GPX document roots by @TheGalitube in #3367
  • Issue #3368: drop_import's launch-list tests wait for the library checks before clicking by @THEtheChad in #3369
  • Ignore negative XMP pixel dimensions by @TheGalitube in #3371
  • LR-IMP-FORMATS: a Samsung panorama JPEG with its SEF trailer imports (#3350) by @Bruno-Alumn in #3375
  • LR-MASK-COLORRANGE: a colour-range mask keeps at most 64 samples however it is loaded (#2556) by @Bruno-Alumn in #3379
  • PERF-SMART: a File path rule over a non-ASCII path folds case in stack buffers instead of allocating two strings per photo by @nledford in #3383
  • LR-MASK-OBJECTS: a SAM 3 checkpoint in Meta's original format is named as such, not as an unsupported dtype (#3378) by @Bruno-Alumn in #3384
  • Never crash: a mask id at the u32 limit doesn't overflow the next mask's id by @Bruno-Alumn in #3385
  • Never crash: strip byte counts near u64::MAX don't overflow their sum in ORF, SRW, ARW and PEF by @Bruno-Alumn in #3386
  • LRC-LIB-MISSING: settling waits for the Missing Photos count, which can't panic on spawn by @mpratsaki in #3392
  • LR-EXP-DIM: export sizes keep the pixels typed (#3300) by @Bruno-Alumn in #3396
  • Never crash: a photo renders at most 64 red eye corrections (#2556) by @Bruno-Alumn in #3398
  • Never crash: a Samsung encryption key past i64::MAX doesn't overflow keyed() by @Bruno-Alumn in #3400
  • RAW.colour: fit the per-file look on the vignetting-corrected sensor by @cbram in #3402
  • LRC-LIB-CATALOG-SWITCH: files waiting for a library wait for a running import instead of being dropped (#2779) by @Bruno-Alumn in #3403
  • Control: pointer and scroll gestures refuse numbers past any screen instead of queueing NaN positions by @Bruno-Alumn in #3408
  • Issue #3406: Auto Import says when it can't read the watched folder by @finaler1x in #3410
  • i18n(it): panel and tab group menus, update check, rules, import and retouch labels by @fabiodalez-dev in #3411
  • Issue #3412: accessibility audit allows missing glyphs without craft-fonts by @finaler1x in #3413
  • Issue #1764: running out of device memory falls back without stopping the GPU by @finaler1x in #3419
  • fix(ui): wrap the Edit header buttons instead of letting Reset cover HDR by @Enthendor in #2804
  • Enable Filters: a folder moved while filters are off is followed by the filter put aside, and Cmd+L still brings it back (follow-up to #2709) by @marcoarnulfo in #2805
  • LR-META-LOCATION: reject malformed typed GPS coordinates by @ronibalthazar in #2821
  • LR-BEHAV-DRAGDROP: a right-click on a text field while photos are carried opens no menu by @nledford in #2823
  • LR-LIB-ALBUM: album commands skip photos the library lacks and record nothing when they add nothing by @nledford in #2825
  • LR-BEHAV-MULTISELECT: replacing the selection with a repeated id keeps each photo once by @nledford in #2830
  • Write sidecar keywords as names in dc:subject and paths in lr:hierarchicalSubject by @j-a-b-r-o-n-i in #2841
  • GPU: black pixels take the colour tools and a light vignette as on the CPU by @radialmonster in #2844
  • LRC-SS-LAYOUT: the Slideshow settings page no longer moves when the slide preview finishes rendering by @nledford in #2848
  • LR-EXP-METADATA: refuse Originals with embedded place names by @ronibalthazar in #2849
  • i18n(fr): complete the French catalog (1,154 entries) by @Atalantis in #2851
  • Keywords: start and stop painting with the keyboard shortcut by @dotCooCoo in #2856
  • LRC-LIB-LIBFOLDERS: Don't ask again when moving photos is kept only when the move started by @nledford in #2858
  • docs(linux): document LLVM 23 ThinLTO SIGILL workaround (#2811) by @Zaxaerith in #2885
  • Export: note when LZW is picked for TIFF, 16-bit ZIP size test (#2882) by @radialmonster in #2890
  • Reject signed chunk sizes in the HTTP chunked decoder by @Silvertree2010 in #2908
  • Reject incomplete ISO timestamps in metadata and track logs by @ronibalthazar in #2912
  • PERF-WINDOW: the window queues one frame, not two (eframe's low-latency surface) by @ZJHeepfixer in #2919
  • Issue #2936: build the GPU kernels on parallel threads by @iluebbe in #2942
  • LR-EDIT-COLOR-TEMP: a one-field white balance partial keeps the other field's look (#2910) by @hnoerenberg in #2952
  • LR-IMP-ADD-DIALOG: an import checks its probes and looks up sidecars several at a time by @nledford in #2954
  • Accept a UTF-8 BOM at the start of lightcraft-cli --script files by @Silvertree2010 in #2963
  • LR-IMP-ADD-DIALOG: handle rename sequence exhaustion by @ronibalthazar in #2964
  • LR-META-EXIF-FULL: reject malformed EXIF clocks by @ronibalthazar in #2977
  • Issue #2819: the histogram stays SDR when HDR is switched off by @x-labb in #2981
  • Issue #2980: Clear Color Label can be given a keyboard shortcut by @x-labb in #2986
  • GPU-TESTS: every WGSL kernel parses and validates in the test run, without a GPU by @OneSlips in #2989
  • LR-EDIT-EFFECTS-GRAIN: grain skips a degenerate frame instead of producing NaN pixels by @emmertex in #3003
  • CLI-HOSTILE: render --set refuses inf / NaN instead of dropping the value by @emmertex in #3006
  • LR-EDIT-OPTICS-PROFILE: lens profiles for compact cameras with a built-in lens by @emmertex in #3013
  • Never crash: an oversize export size is an error, not a multiply overflow by @emmertex in #3015
  • LR-PROF-CAMERACOLOR: docs count 9 bundled camera profiles, not 5 by @Peaperfish in #3027
  • i18n(it): launch library chooser, Lightroom import destination and new settings by @fabiodalez-dev in #3035
  • Windows: declare the gvfs test path only where it is used by @eliets2 in #3042
  • Issue #3069: --connect resends a command that crossed the app's idle-close notice by @THEtheChad in #3076
  • Issue #3065: the settings test puts the memory budget back as it found it, one budget-changing test at a time by @THEtheChad in #3088
  • Issue #3070: the CLI's refused-connection tests use a free port, not 18437 by @THEtheChad in #3098
  • Issue #3067: ui-egui test apps render on two workers, not six (peak −22 %) by @THEtheChad in #3113
  • PERF-CATALOG: a smart album's per-photo test stops storing an answer nothing can read by @nledford in #3121
  • LC-002: reject non-object script parameters by @DAnaeto in #3122
  • LC-001: stop commands after failed imports by @DAnaeto in #3123
  • LC-003: reject non-Unicode CLI arguments without panicking by @DAnaeto in #3124
  • Reject signed list indexes in indexed develop control ids by @Silvertree2010 in #3165
  • LR-BEHAV-DIALOGS: a one-line prompt that's refused stays open and says why by @nledford in #3167
  • LR-IMP-ADD-DIALOG: an import's probe opens each file once by @nledford in #3176
  • Disarm color picking when adding mask components by @TheGalitube in #3182
  • Drop the sign from slider text that rounds to zero by @Silvertree2010 in #3188
  • MENU-BAR: the macOS menu bar keeps every row when two rows run the same command by @nledford in #3196
  • MENU-BAR: shortcuts list their modifiers in one order everywhere on macOS (⇧⌘I, not ⌘⇧I) by @nledford in #3200
  • LR-BEHAV-ACCESS: the sidebar's disclosure triangles name their row by @nledford in #3209
  • MENU-HELP-HELP: on macOS the Help menu is registered with AppKit after the menu bar is installed by @nledford in #3220
  • LR-MAP-TRACKLOG: Decode XML character references in GPX by @ronibalthazar in #2529
  • Return None from shift_iso for impossible calendar dates by @Silvertree2010 in #2530
  • Tests: discovery tests use the platform's path separator (Windows) by @OneSlips in #2547
  • i18n(ka): Georgian for 336 interface strings, 48 format messages and the 559 untranslated What's New lines by @devius in #2582
  • Reset the profile section to the default profile by @eliets2 in #2583
  • Write capture time UTC offset and sub-seconds in write_exif by @Silvertree2010 in #2605
  • LR-CROP-RECT: sidecar settings kept in range; a turned crop bounded to the photo (#2555) by @insideTheFlux in #2623
  • i18n(it): translate the effect presets, slideshow, print, people and overlay strings by @fabiodalez-dev in #2624
  • raw: CR3 preview box scan checks 32-bit lengths for overflow (#2569) by @radialmonster in #2628
  • LRC-LIB-MISSING: library.missing from the control channel checks the files off the UI thread by @nledford in #2629
  • LR-EDIT-DETAIL-DENOISE: GPU denoise doesn't hang when its tiles in flight fail (#2577) by @Bruno-Alumn in #2631
  • MCP: render and screenshot PNGs go through a private temp folder (#2573) by @Bruno-Alumn in #2632
  • LR-MASK-BRUSH: with the mask overlay hidden, the stroke being painted no longer tints the photo (#2549) by @Bruno-Alumn in #2639
  • LR-LIB-SMARTALBUM: editing a smart album made from an album view keeps the album by @nledford in #2647
  • Never crash: the work gate's byte count saturates instead of overflowing (#2576) by @insideTheFlux in #2648
  • LR-FILT-FLAG: the filter bar's flag buttons combine, Picked + Unflagged hides only the rejects by @marcoarnulfo in #2651
  • LR-PROF-CAMERACOLOR: limit tone-curve steps between pixel populations (#1904) by @radialmonster in #2656
  • raw: read Canon CR3/CR2 preview colour space from the maker note (#2654) by @radialmonster in #2664
  • LR-PREF-GENERAL: Esc in a Settings text box gives the text back instead of closing Settings by @nledford in #2691
  • "Favorite" and "Listing folders" in the catalogs that lack them by @nledford in #2693
  • LRC-LIB-LIBFOLDERS: a count never covers a name in a narrow sidebar by @nledford in #2696
  • LR-IMP-FORMATS: AHD blends its candidates where noise alone would pick one, no maze in noisy raws (#2094) by @pick2510 in #2698
  • LR-BEHAV-LOCALIZE: the translation report also lists plain tr() strings a catalog lacks, wrapped calls included by @nledford in #2703
  • Never crash: NaN in tone curves and an i16::MIN UTC offset (#2579 items 3 and 4) by @darthnut in #2712
  • Never crash: History is bounded on load and by every op that sets it (#2579 item 8) by @darthnut in #2714
  • Never crash: rational tag lists show 16 values like every other list (#2579 item 7) by @darthnut in #2717
  • LR-VIEW-FILMSTRIP: photos drag from the filmstrip like from the grid by @nledford in #2722
  • Control port: close gracefully so the client reads its last reply (Windows reset) by @insideTheFlux in #2723
  • fix(codecs): validate JPEG ICC APP2 chunk sequences by @ronibalthazar in #2724
  • LRC-LIB-CATALOG-LOCK: quitting on macOS removes the lock's owner note by @nledford in #2725
  • LR-BEHAV-LOCALIZE: panel layout toasts, face recognition prompts and the second window title are translated by @nledford in #2726
  • Brush dabs: build only as far as the caller will look (#1520) by @saad-mughal435 in #2731
  • LR-EDIT-OPTICS-PROFILE: Sony ILCE-6700 in-file distortion by @Enthendor in #2732
  • LR-BEHAV-DRAGDROP: a drop's destination is named with its parent when another folder or album has the same name by @nledford in #2735
  • Never crash: ARW and SRW strips shorter than declared are refused before allocating (#2561) by @mercuryVM in #2740
  • LR-VIEW-HISTOGRAM: the histogram stays in view while the Edit panel's sliders scroll (#2679) by @Bruno-Alumn in #2741
  • LR-MERGE-PANO: the merge dialog makes a new preview each time it opens, also after a failed one (#2708) by @Bruno-Alumn in #2743
  • LR-CLOUD-SMARTPREVIEW: the smart-previews folder test cleans up the folder it takes offline by @nledford in #2748
  • Never crash: tiles far larger than the image are refused before decoding (#2554) by @mercuryVM in #2750
  • KEYC-RATING: deleting the only keyword of the filter Enable Filters put aside leaves filtering on by @nledford in #2758
  • LR-VIEW-PHOTOGRID: a thumbnail that can't be read is tried again only when its photo changes (#2682) by @insideTheFlux in #2764
  • LR-VIEW-PHOTOGRID: the grid asks the image decoders for no thumbnail of a video (#2682) by @insideTheFlux in #2765
  • LR-BEHAV-DRAGDROP: only the primary button drags and drops photos from the grid by @nledford in #2766
  • Read Canon maker-note lens when LensModel is missing by @eliets2 in #2771
  • Reject signed numeric character references in XML entity decoding by @Silvertree2010 in #2776
  • LR-EDIT-OPTICS-PROFILE: Fujifilm X-S20 embedded lens corrections and spectral matrices by @samuelili in #2777
  • LR-LIB-VIRTUALCOPY: prevent numbering overflow in copy batches by @ronibalthazar in #2781
  • docs: gap 9 — the CI gate runs the tests on Linux x64; macOS, Windows and the GPU tests still don't by @nledford in #2796
  • LR-LIB-SMARTALBUM: the catalog refuses an edit that makes a smart album include itself by @nledford in #2798
  • LR-BEHAV-DRAGDROP: a right-click while photos are carried opens no context menu by @nledford in #2808
  • LR-CROP-AUTO: Auto straighten reads the vertical vanishing point and the horizon by @ingolfteetz in #2809
  • Alt/Option-drag previews for clipping and sharpening (#937) by @itrycodinganditsbad in #999
  • Do not read a sibling's shared stem sidecar for a non-owner photo (#1523) by @MarekSpodBiedry in #1575
  • Bound interpolation for extreme brush segments by @eliets2 in #1654
  • Fix Lightroom catalog video classification and filtering by @harrisonoconnorhover in #2021
  • KEY-TOGGLEZOOM: hold Space over a tool to pan and click-zoom, as in Lightroom (#1895) by @helgehelge123 in #2065
  • LR-BEHAV-DIALOGS: dialog confirm buttons name their action by @nledford in #2075
  • LR-VIEW-PHOTOGRID: the active photo's selection ring shows on light themes and differs from the other selected photos by weight by @nledford in #2162
  • LR-IMP-ADD-DIALOG: remembered import thumbnail-size slider by @tylerphotos in #2237
  • Lightroom catalog import: turn masks into the photo's upright frame by @marcoarnulfo in #2246
  • #2284: read the Exif and XMP items of HEIF files by @john01px2022 in #2290
  • LR-CROP-RECT: a free crop corner on a straightened photo grows both sides (#2308) by @chordpli in #2322
  • fix(windows): add opt-in DirectComposition workaround for VRR flicker by @Kaan88 in #2421
  • PERF-SMART: test a smart album's rules cheapest first by @nledford in #2423
  • i18n: complete the Simplified Chinese (zh-hans) catalog (162 missing strings) by @joblonfk001 in #2427
  • i18n: complete the Traditional Chinese (zh-hant) catalog (200 missing strings) by @joblonfk001 in #2429
  • Kelvin for Fujifilm X-Trans III bodies from the RAF's own neutral pair (#730) by @radialmonster in #2514
  • i18n: add Vietnamese (vi) interface language by @sonth87 in #2520
  • LR-VIEW-ZOOM: test pinch display fitting with controlled completions by @AlexChambers in #2521
  • Issue #136: applying the GPU setting never waits for the device on the UI thread by @OneSlips in #2545
  • LR-IMP-FORMATS: GIF and BMP sizes from the header; a canvas the file can't fill is refused (#2553) by @insideTheFlux in #2607
  • LC-SAFETY: Refuse to create a library photo's XMP sidecar by @endthestart in #2658
  • LR-BEHAV-ACCESS: the Flatpak may talk to the accessibility bus, so Orca can read LightCraft by @nledford in #3390
  • packaging(flatpak): add OCI image build and GHCR publishing helper by @dylanmtaylor in #3498

New Contributors

  • @finaler1x made their first contribution in #3409
  • @tabasko78 made their first contribution in #3286
  • @cbram made their first contribution in #3321
  • @newdives made their first contribution in #3364
  • @mpratsaki made their first contribution in #3392
  • @j-a-b-r-o-n-i made their first contribution in #2841
  • @ZJHeepfixer made their first contribution in #2919
  • @iluebbe made their first contribution in #2942
  • @hnoerenberg made their first contribution in #2952
  • @x-labb made their first contribution in #2981
  • @DAnaeto made their first contribution in #3122
  • @pick2510 made their first contribution in #2698
  • @darthnut made their first contribution in #2712
  • @saad-mughal435 made their first contribution in #2731
  • @mercuryVM made their first contribution in #2740
  • @samuelili made their first contribution in #2777
  • @harrisonoconnorhover made their first contribution in #2021
  • @Kaan88 made their first contribution in #2421
  • @sonth87 made their first contribution in #2520
Full Changelog: v0.16.0...v0.17.0

Performance and Compatibility

LightCraft is written in Rust and uses background rendering to keep the interface responsive during common editing operations. The project reports that it can display embedded camera previews or cached renders quickly while preparing full-resolution images in the background.

The application supports Windows, macOS, and Linux, as well as a browser-based WebAssembly build. Available Linux packages include AppImage, DEB, and RPM formats, with builds for x86-64 and ARM64 systems.

However, LightCraft is still a developing project. Its feature list should not be interpreted as proof of complete Adobe Lightroom compatibility. Photographers with established Lightroom workflows should verify RAW camera support, editing results, and catalog migration before moving their primary library.

System Requirements

  • Operating systems: Windows, macOS, and Linux.

  • Browser support: A WebAssembly build is available.

  • Processor architectures: Linux releases include x86-64 and ARM64 builds.

  • Build requirements: Rust and the project's documented dependencies are needed to compile from source.

The project does not establish a comprehensive minimum hardware specification in the information reviewed. Actual performance will depend on image resolution, RAW processing requirements, and available system resources.

Pros and Cons

Pros

  • Free and open-source under the MIT and Apache 2.0 licenses.

  • Non-destructive editing preserves original photos.

  • Extensive controls for exposure, tone curves, color grading, and local adjustments.

  • Photo library organization tools for managing larger collections.

  • Native applications for major desktop operating systems.

  • Browser-based build for experimentation without a traditional desktop installation.

  • Command-line and MCP support for automation.

  • Local-first workflow without a mandatory cloud account or subscription.

Cons

  • Still under active development, so feature completeness and reliability may vary.

  • Compatibility with existing Lightroom catalogs and established workflows needs verification.

  • RAW format support may not cover every camera model or file variation.

  • Users accustomed to Lightroom may encounter differences in editing behavior and output.

  • Advanced automation and browser workflows may require additional setup.

  • Published minimum hardware requirements are limited.

How to Install

The simplest option is to download a suitable package from the project's GitHub Releases page. Linux users can choose the available AppImage, DEB, or RPM package, while macOS and Windows packages are also provided.

For users who prefer to build from source, install Rust and the required development tools, then run:

git clone https://github.com/storytold/lightcraft
cd lightcraft
cargo run --release -p lightcraft

To open a specific photo folder, pass its path when launching the application:

cargo run --release -p lightcraft -- ~/Pictures/trip

To try the browser-based build, follow the project's WebAssembly setup instructions and run:

cargo xtask web --serve

The project also provides a command-line renderer for scripted workflows. Consult the official documentation for supported formats, available adjustment parameters, and platform-specific installation details.

Final Verdict

LightCraft is a promising open-source alternative for photographers who want a local photo library and RAW editing workflow without relying on a commercial subscription. Its combination of non-destructive editing, color grading, masking, presets, and catalog management makes it more ambitious than a basic image editor.

Its strongest differentiators are its Rust-based architecture, local-first design, and automation support. These features may appeal to technical users and photographers interested in building repeatable editing workflows.

The main reservation is maturity. Before switching from Lightroom, users should test their own camera RAW files, compare exported images, and confirm that the library features they depend on are available and reliable. LightCraft is worth trying, but photographers with demanding production workflows should evaluate it alongside their existing tools rather than assume full feature parity.

LightCraft v0.17.0
Free
Software Informations:
Developer:

Operating System:
Windows / macOS / Linux / BSD
Date Added:
2026-11-02T05:07:16.186Z
Categories:

Post a Comment/Report Broken Link: