Skip to content

About

An open-source, reimplementation of Adobe Lightroom in Rust while using Kotlin as the UI framework.

Resources

Stars

76 stars

Watchers

1 watching

Forks

Repository files navigation

LightCraft's app icon

LightCraft for Android

LightCraft-android is an open-source reimplementation of the Adobe Lightroom Android app, created using the same Rust engine, LightCraft, as the desktop app, and built with a Kotlin/Jetpack Compose UI framework.
Many credits to the original maintainers, storytold.

Get it on GitHub Get it on Obtainium
Each release has two APKs: the plain one for most phones, the -armeabi-v7a one for 32-bit ARM phones.

Rust engine Kotlin and Jetpack Compose Minimum: Android 10 (API 29) Target: Android 16 (API 36) License: MIT OR Apache-2.0 Status: beta


LightCraft for Android held sideways: Ansel Adams' The Tetons and the Snake River on the left, the Light panel with Exposure, Contrast, Highlights, Shadows, Whites and Blacks on the right, then the Edit sections and the tools in columns at the edge
Ansel Adams, "The Tetons and the Snake River" (1942). Public domain, U.S. National Archives. Developed in LightCraft for Android.


The point curve drawn over The Tetons and the Snake River with the phone held sideways: a gentle S with the black point lifted and the white point lowered, the curve on its grid in the panel at right, under its channels and Done
A gentle S on the RGB point curve, drawn right over the photo. Ansel Adams, 1942 (public domain).


Color grading

Migrant Mother toned warm like a print, with the Grading panel at right: Shadows, Midtones, Highlights and Global beside the highlights colour wheel, Hue 42 and Saturation 16 under it
The Highlights wheel in the Color panel's Grading. Dorothea Lange, "Migrant Mother" (1936). Public domain, Library of Congress.


Before & after

Before and after of The Tetons and the Snake River, side by side: the after has deeper clouds and more open shadows along the river
The Tetons and the Snake River. Highlights −45, Shadows +38, Clarity +28, Dehaze +18. Ansel Adams, 1942 (public domain).
Before and after of Migrant Mother, side by side: the after is warmer, with lifted shadows
Migrant Mother. Shadows +42, Texture +18, split-toned grade, vignette. Dorothea Lange, 1936 (public domain).
Before and after of Earthrise, side by side: the Earth over the lunar horizon, the after slightly warmer and richer
Earthrise. Dehaze +22, Highlights −30, warmer white balance, Vibrance +22. NASA / Bill Anders, Apollo 8, 1968 (public domain).
Before and after of The Blue Marble, side by side: the after has deeper blacks and firmer cloud detail
The Blue Marble. Highlights −38, Blacks −20, Dehaze +15, Vibrance +30. NASA, Apollo 17, 1972 (public domain).

Masking

A radial gradient mask drawn as a red overlay around the sun over a lake at first light, with its handles, the list of masks open beside it (Sky and Sun glow), and the mask's Color settings at right (Temp +40, Saturation +15) above its colour swatch
A radial sun-glow mask (Temp +40, Exposure +0.5) layered over a linear sky mask (Exposure −0.6, Dehaze +20). Photo from LightCraft's procedurally generated demo library.


Presets, profiles & the Color Mixer

The Presets panel beside a lavender field: Golden Hour chosen at an amount of 100, among Crisp Landscape, Blue Hour Boost, Crisp Vista, Deep Sky and Lush Greens in the Landscape group
The Presets panel: Golden Hour at 100 %, each preset previewed on the photo. Demo library.
The 8-band Mix in the Color panel, open on purple, with its Hue, Saturation and Luminance sliders beside the lavender field
The 8-band Mix, open on purple. Demo library.
Crop on The Tetons and the Snake River: a 16 by 9 crop straightened by 2.48 degrees on its dial, the aspect's name over it, and the Aspect tab at right: Original, Ratios, Instagram and TikTok
A 16:9 crop straightened +2.5°. Ansel Adams, 1942 (public domain).
Sand dunes in colour on the left and in high-contrast black and white with vignette and grain on the right
The colour original on the left; the High Contrast B&W preset with Vignette and Grain on the right. Demo library.

Organization

The library held sideways: the justified grid of all 28 photos (the demo library and the four showcase photos), clean cells, beside the pane of views and albums
The library sideways: the grid beside the views and albums. Demo library.
The Showcase album in the square grid: the four public-domain showcase photos beside the albums pane
Square grid of the four public-domain showcase photos.
Info and rating for Earthrise: the photo over a sheet with five stars, Pick chosen, then Info and Metadata tabs with the file name, 5.8 megapixels, 2400 by 2400 and JPEG
More › Info and rating: the rating, the flags and the photo's file, size and format. NASA / Bill Anders, "Earthrise", Apollo 8, 1968 (public domain).

How it's organized

The editor held sideways with no tool open: The Tetons and the Snake River, and the six tools labelled in a column at the right edge: Actions, Presets, Crop, Edit, Masking and Remove
The editor: the photo, and its six tools in a column at the edge. Ansel Adams, 1942 (public domain).
The library's side menu open over the grid: LightCraft's lynx icon, Preferences, Local storage, About LightCraft and Help
The library's menu: Preferences, Local storage, About and Help.
The Export as page: Settings Large JPG, file type JPG, dimensions Full size (2400 by 1922), quality 90%, and switches to include a watermark and a border
Export as, from the editor's download button (or Share › Export as…): the settings, file type, size, quality, watermark and border.

Architecture

Architecture diagram: the photographer uses the Android app (App navigation, which shows the Photo editor and the Photo library and uses the App state, which calls the Session bridge); the editor adjusts Develop controls, selects Presets and profiles and configures Masking, offers Denoise and HDR and panorama, and exports; the Session bridge opens the Mobile Rust API, which uses Photo sources and the Catalog and search the library browses; Photo sources read Photo metadata, render with the Develop pipeline (which produces the Export) and decode with the Image codecs
How the app and the engine fit together. Generated with GitDiagram.


Planned features

LightCraft for Android is in beta.

Area Status
Library: views, albums (create, rename, delete, cover), filter, sort, search, select mode, justified and square grids, date segments, slideshow ✅
Import: photo picker, files (raws), camera, Share from other apps; the Gallery tab (the phone's photos) ✅
Light, Color (white balance, eyedropper), Mix, Grading, Effects, Detail, Optics, Tone Curve (+ targeted) ✅
Profiles and presets (with amount), copy and paste settings ✅
Crop (ratios, Instagram and TikTok formats), straighten, Upright, turns and flips, manual transforms ✅
Masking: brush, linear, radial, colour and luminance range (a point or an area), add and subtract, each part's menu, a colour tint ✅ · AI masks (subject, sky) ⬜
Remove, heal and clone spots ✅
Save or share: JPG, TIF, AVIF (DNG for raws) or the original; small, full or custom size; quality, naming, sharpening, colour space, metadata, watermark and border ✅
Upright and sideways layouts ✅
Lens blur ⬜ (the engine doesn't render it yet)
Community, cloud sync 🚫 LightCraft is a local app

✅ works today · 🚧 in progress · ⬜ not started · 🚫 not planned


Building Instructions

One Gradle command builds the whole app: it compiles the Rust engine with cargo-ndk and generates the Kotlin bindings.

  • Clone this repository
  • Make sure you have at least 3 GB of free disk space
  • enter apps/lightcraft-android/android and run ./gradlew assembleRelease, or open that folder in Android Studio and press Run.

Build time dependencies:

required tools
    rustup (it installs the Rust release and Android targets rust-toolchain.toml names)
    cargo install cargo-ndk --version 4.1.2 --locked
    Android SDK (API 37) and NDK 29.0.14206865
    JDK 17 or newer

Builds are only tested on Windows 11.


License

MIT OR Apache-2.0, at your option. LightCraft for Android is not affiliated with Adobe; Lightroom is a trademark of Adobe Inc.


Misc info for myself

Try to use semantic commit messages. Use feat: / fix: / chore: / docs: / etc.

About

An open-source, reimplementation of Adobe Lightroom in Rust while using Kotlin as the UI framework.

Resources

Stars

76 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages