Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Introduction

albedo develops RAW photos in the browser and edits them in layers. It keeps a catalog, culls, develops on the GPU, masks with local AI, removes distractions, denoises, composites and retouches in 16 or 32 bits, and exports JPEG, PNG, 16-bit TIFF, DNG, PSD or the original with an XMP sidecar.

Everything happens on your machine: the photos, the catalog and the AI models stay in the browser’s private storage, and nothing is uploaded. Installed as an app, albedo works offline and opens files from the desktop.

What it needs

  • A Chromium-based browser (Chrome, Edge, Brave, Arc) for WebGPU and file handling. Firefox and Safari run Library and Develop on the WebGL2 path; Compose needs WebGPU (Safari 26 and Firefox 141 have it).
  • A GPU. Any integrated GPU develops; the AI tools are fastest on a discrete one.
  • Disk space: the catalog stores a copy of every original you import.

Where things are

Librarythe catalog: a grid, filters, collections, metadata
Developone photo: every adjustment, masks, Remove, export
Composelayers: retouching, compositing, type, PSD in and out, RAW smart objects

Getting started

Open albedo

Open the app. To install it, use the browser’s install button in the address bar (Chromium) or Add to Dock (Safari). The installed app opens RAW, JPEG, PNG, TIFF and XMP files from the file manager’s Open with menu.

Import

Drop files on the window, or press O. albedo reads the RAW formats LibRaw supports (CR2, CR3, NEF, ARW, RAF, ORF, RW2, PEF, DNG and many more), plus JPEG and PNG. Files dropped together keep their order.

  • An .xmp sidecar named like a photo (IMG_1.xmp or IMG_1.CR2.xmp) applies its Lightroom edit to that photo.
  • Any other .xmp becomes a preset.
  • A .dcp file becomes a camera profile.

Thumbnails come from the preview the camera embedded, so a large import is browsable at once.

Edit

Double-click a photo, or press D. Every slider can be dragged anywhere on its row; Alt drags finely, Shift coarsely, a double-click resets it, and a click on the value types one. Each change is one undo step (⌘Z).

Edits are saved as you go. The original is never changed.

Export

Press ⌘E. See Export.

Library and culling

Flags, ratings, labels

key
P X Upick, reject, unflag
0–5rating
6–9red, yellow, green, blue label
⌫delete the selection (after a confirmation)

The filter bar narrows the grid by flag, rating and label; ⌘F searches file names, camera, lens, title, caption and keywords.

Cull, compare, survey

  • Cull (⇧C) shows one photo full screen. A flag or rating key stamps it and moves to the next photo that has no decision yet. The next three photos are prepared in advance.
  • Compare (C) shows the selected photo beside a candidate.
  • Survey (N) lays out the selection side by side.

Collections

  • Albums hold any photos you add to them.
  • Smart collections save a filter and update themselves.
  • The date tree groups photos by year and month of capture.
  • Keywords, a title and a caption live in the metadata panel and are searchable.

Many photos

The grid only draws what is on screen, and the catalog’s queries use indexes that match its sorts. A catalog of 10,000 photos filters in about 15 ms; numbers are in the benchmarks.

Develop

The right panel holds the adjustments, top to bottom.

section
Profilethe look: AgX, Linear or a camera profile (Profiles and lenses)
Toneexposure, contrast, highlights, shadows, whites, blacks; Auto
WBtemperature and tint, relative to the camera; Auto and an eyedropper
Curvea point curve; the target tool adjusts it by dragging on the image
Colorvibrance and saturation
B&Wblack and white with a mix per hue (V)
Mixerhue, saturation and luminance for eight hue bands
Gradingthree-way colour wheels
Effectsclarity, texture, dehaze, vignette, grain
Lensthe lens profile and manual distortion, CA and defringe; HL toggles highlight reconstruction
DetailAI Denoise, sharpening, noise reduction
Remove & Healremoval and spot healing (Remove and heal)
Versionsvirtual copies of the edit

Looking at the result

  • \ toggles before and after; a split view compares them side by side.
  • J shows clipped highlights and shadows.
  • Z toggles 100% and fit; drag to pan, or use the navigator.
  • The histogram follows every change.

Crop and straighten

R opens the crop. Drag the corners, rotate outside the frame or with the straighten slider, and set keystone correction. The crop zooms in just enough that no empty corner shows.

Presets, copy and paste

The left rail holds built-in looks and your presets; hovering one previews it, a click applies it. ⌘C copies chosen modules of the edit, ⌘V pastes them onto the selection. Presets can be exported as albedo files or for Lightroom.

History, snapshots and versions

Every change is one undo step. Snapshots save the current edit under a name; versions keep alternative edits of the same photo.

Profiles and lenses

Looks

A RAW starts with the AgX look: a filmic tone curve that rolls highlights off toward white instead of clipping each channel, after a half stop of baseline exposure. Baseline and Look Sat. adjust it. Linear clamps instead, the way a JPEG is shown.

Camera profiles

Drop .dcp files (Adobe’s, RawTherapee’s, or any profile following the DNG specification) on the window. The Profile section then offers the ones made for the photo’s camera under Camera profile…. A profile replaces the colour matrix, applies its hue and saturation tables, and its tone curve replaces the look’s.

Lens corrections

When a RAW opens, albedo looks its lens up in the lensfun database and corrects distortion, lateral chromatic aberration and vignetting. The Lens section names the lens it found; Profile Dist. and Profile Vign. scale the corrections, and the PROFILE switch turns them off. Fisheye lenses are not corrected.

Highlights

Clipped highlights are rebuilt from the channels that did not clip, so a blown sky turns white instead of magenta. The HL switch in the Lens section turns this off.

Masks

M opens masking. A mask limits exposure, temperature, contrast, highlights, shadows, saturation and clarity to part of the photo. Up to eight masks are active at once.

toolkey
LinearLa graduated filter: drag from where it starts to where it is full
Radial⇧Man ellipse: drag its size, then move, rotate and feather it
BrushKpaint; [ and ] change the size, Alt erases
Subjectthe main subject, found by a local AI model
Skythe sky
Backgroundeverything but the subject
ObjectBclick an object, or drag a box around it

The red wash shows the selected mask; O keeps it visible. Touching an adjustment hides it.

Refine edge softens an AI mask’s edge. Range narrows any mask to a band of brightness, or to colours near one you pick.

Brush and AI masks share four slots between them.

The AI models run on your machine, on the GPU when the browser has WebGPU. The first use of each loads it; after that a mask takes well under a second.

Remove and heal

Remove

Press Q, then paint over what should go: a person, a sign, a wire, dust. When you let go, a local inpainting model fills the area from its surroundings. A click without dragging removes the object under the pointer.

[ and ] (or the scroll wheel) change the brush size.

Each removal is listed in the Remove & Heal section and can be restored with its ×; undo works as for any other change. The original file is never altered.

Heal and clone

Press H, then drag from the blemish to a clean area: the blemish is replaced by that area, matched in brightness (heal) or copied as is (clone). Drag either circle to move it, scroll to resize, ⌫ deletes the selected spot.

AI Denoise

AI Denoise in the Detail section removes noise with a neural network that works on the RAW data itself, before demosaicing, the way the sensor recorded it. It keeps fine detail that ordinary noise reduction smooths away.

Moving the slider above 0 starts it; a 45-megapixel photo takes a few seconds on a discrete GPU, and the progress shows under the slider. The slider then sets how much of the denoised image is used, without running the model again.

It works on Bayer sensors. X-Trans and other sensors keep the regular noise reduction, which AI Denoise replaces while it is on.

Exports wait for a denoise that is still running.

Compose

Compose (E) is albedo’s layered editor, for the work that comes after Develop: retouching, compositing, exposure blending and type. It runs on the GPU and keeps every layer at 8, 16 or 32 bits per channel. Nothing leaves your machine, and nothing is metered.

Starting a document

  • From Develop, ⌘⇧E (or Edit in Compose under Export) opens the photo as a smart object carrying its edit.
    • The RAW stays inside, so you can change its development at any time.
    • It opens instantly: Compose uses the image Develop already has on the GPU.
  • From the Library, the start screen offers to open the selected photo as a smart object.
  • A new document takes a size, a depth (8, 16 or 32-bit) and a background.
  • Opening a file works for JPEG, PNG and TIFF (including Photoshop’s layered TIFF and multi-page TIFF), PSD and .albedo files. You can also drop one onto Compose.
  • Dropping an image onto an open document places it as a new layer.

Documents save themselves into the browser’s storage as you work (⌘S saves at once). The start screen lists them.

Image › Mode changes a document’s depth at any time: 8 bits, 16 bits (half float) or 32 bits (float, in linear light, like Photoshop’s 32-bit mode).

Layers

The Layers panel shows the stack, top first.

  • Blend mode sits above the stack. All of Photoshop’s 27 modes are there, and groups add Pass Through.
  • Opacity and Fill. Drag the label to scrub, or type a value. Number keys set opacity: 1 is 10% and 0 is 100%.
  • Reorder by dragging a row. Drop onto the middle of a group to move a layer into it.
  • Clip a layer to the one below with ⌥-click between them, or ⌥⌘G.
  • Hide with the eye; double-click a name to rename it.
  • The buttons along the bottom add a style, a mask, an adjustment, a group or a layer, and delete.
layerwhat it holds
Pixelpaint, retouching, placed images
Smart objecta photo and its Develop edit, re-developed whenever the edit changes
AdjustmentDevelop (every Develop control), Curves, Levels, Brightness/Contrast, Exposure, Hue/Saturation, Channel Mixer, Photo Filter, Gradient Map, Invert, Posterize, Threshold
Filla solid colour or a linear or radial gradient
Typetext, shaped and laid out live
Shaperectangle, ellipse, polygon or star, line
Grouplayers that blend together (Pass Through) or as one (any other mode)

Masks. Every layer and group can have a mask: white shows the layer, black hides it. Add one with the mask button; ⌥-click it to start from Hide All. With a selection active, the new mask starts from that selection. Paint on the mask with the brush by switching the brush to Mask, or press \. The Mask section of Properties sets density and inverts. Refine edge fits the mask’s edge to the image, and Select loads the mask as a selection.

Blend If. Properties holds Photoshop’s Blend If for any layer. Fade a layer by its own brightness, or by the brightness of what is below. This is a luminosity mask that never goes stale: it follows the layers under it as they change.

Layer styles (the fx button) add a drop shadow, a stroke (outside, centre or inside) and an outer glow.

Smart objects and Develop

Select a smart object and choose Edit in Develop in Properties.

  • Develop opens the photo with that layer’s edit and shows a Back to Compose bar.
  • Every change re-develops the layer in the document.
  • Nothing is exported or saved in between.
  • The catalog’s own edit of the photo is left alone. The smart object keeps its own copy, so the same photo can sit in a document twice with two different developments.

A Develop adjustment layer shows Develop’s own panels in Properties: Tone, WB, Curve, Color, B&W, Mixer, Grading, Effects, Detail. They apply to everything below the layer, through its mask and blend mode, and can be changed at any time. Use it to grade a whole composite, or to clip a white balance correction to one layer.

Selections

toolkey
MarqueeMrectangle; ⇧M for the ellipse
LassoLfreehand; ⇧L for the polygon lasso (click points, ⏎ closes)
Magic wandWby colour, contiguous or not, from the layer or all layers
AI select⇧WSelect subject, Select sky, or click or drag a box around an object

How a selection combines with the existing one:

  • ⇧ adds to the selection;
  • ⌥ subtracts from it;
  • ⇧⌥ intersects with it;
  • the mode buttons in the options bar do the same.

The Select menu holds All (⌘A), Deselect (⌘D), Reselect, Inverse (⇧⌘I), Color Range, and the modifiers: expand, contract, feather, smooth, border.

Refine edge fits a selection’s edge to the image with a guided filter. It is made for hair and fur: the soft band along the edge follows the strands, and the rest stays crisp. AI select refines its result this way by default.

Retouching

toolkey
Spot healingJpaint over a blemish, a wire or a sensor spot: the local model fills it from around it, on a new layer
Healing brush⇧J⌥-click a source, then paint: texture from the source, tone and colour from the destination
Clone stampS⌥-click a source, then paint
Dodge and burnOlighten or darken shadows, midtones or highlights; New D&B layer makes a neutral Soft Light layer to work on instead
SmudgeRsmear paint, as with a finger

Clone and heal sample the current layer, the current layer and those below it, or all layers. Use Current & below on an empty layer to keep your retouching apart from the photo. Aligned keeps the offset from one stroke to the next.

Content-aware fill (Edit menu) fills the selection from its surroundings, on a new layer. It uses MI-GAN, a 28 MB model that runs on your GPU in a fraction of a second. There are no credits and no content filter. It continues what is around the hole and does not invent new things; Resource limits explains why there is no prompted generative fill.

Frequency separation (Filter menu) splits the active layer into a Low frequency layer (colour and tone) and a High frequency layer (texture, in Linear Light), grouped. Together they recombine to the original exactly in 16 and 32-bit documents. Retouch tone on Low with a soft brush or the healing brush, and texture on High with the clone stamp.

Painting

The brush (B) and eraser (E) have:

  • size [ ], hardness ⇧[ ⇧], opacity (the number keys) and flow;
  • spacing and smoothing;
  • pen pressure, which can control size, opacity or flow.

Opacity caps a stroke and flow builds up within it, as in Photoshop. A stroke stays inside the active selection.

Gradient (G) drags out a gradient fill layer from the foreground colour to transparent. On a gradient fill layer, the drag moves its gradient instead.

X swaps the foreground and background colours, D resets them to white and black, and the eyedropper (I) picks a colour from the image.

Transform and liquify

Free transform (⌘T) has three modes:

  • Free. Drag inside to move, outside to rotate, and a handle to scale. It keeps the proportions unless you hold ⇧.
  • Distort. Drag the four corners, for perspective.
  • Warp. Drag the points of a 4×4 grid.

⏎ applies and Esc cancels. Transforms never resample the layer: scale it down and back up and it is as sharp as before. The pixels are re-rendered only when you paint on a transformed layer.

Liquify (Q) pushes, bloats, puckers, twirls, smooths and reconstructs the active layer. It works on pixel layers, smart objects and type. It stays editable: Reconstruct paints the original back, and Restore all removes the liquify entirely.

Crop (C) drags a new frame; ⏎ applies it. Layers keep the pixels outside the frame.

Type

Click with the type tool (T) to type, or drag a box for text that wraps. Click a type layer to edit it.

  • Shaping. Type is shaped by HarfBuzz, the engine browsers and Photoshop use. Arabic and other complex scripts join correctly with no setting to change. Lines that mix right-to-left and left-to-right text follow the Unicode bidirectional rules.
  • Fonts. IBM Plex Sans and IBM Plex Sans Arabic are built in. Add any TTF, OTF or WOFF file, or, in Chrome and Edge, use your installed fonts. A run that the chosen font cannot show falls back to a font that can.
  • Settings in Properties: size, weight, tracking, leading, box width, colour, alignment, direction, and the font’s own kerning and ligatures.

Shapes (U) draw rectangles (with rounded corners), ellipses, polygons and stars, and lines. Each has a fill and a stroke, and stays editable.

Export

Export (in the status bar, or the Image menu):

format
JPEG, PNGflattened (JPEG on white); JPEG also at 2048 or 4096 px on the long edge
TIFFflattened, 16 bits per channel
PSDlayers, groups, masks, blend modes, opacity, fill, clipping and Blend If. Develop adjustments, smart objects, type and styles are rendered into pixels with their mode, opacity, mask and clipping kept
PSD with albedo datathe same, plus the whole albedo document inside: albedo reopens it with everything editable, and Photoshop ignores the extra data
albedo documenteverything, editable, with the smart objects’ originals inside

When albedo opens a PSD, it reads its pixel layers, groups, masks, modes, clipping, Blend If and the common adjustment layers. Anything it cannot keep live arrives as the pixels Photoshop saved.

Speed

Compose draws at the resolution of your screen, not the document’s: on the reference machine a 50-layer, 24 MP document redraws in about 7 ms. While you paint or drag a slider, everything below that layer is drawn once and reused. Panning and zooming show the last drawing again, moved or scaled, and draw afresh once you stop. Measured times are in Benchmarks.

Export

⌘E exports the photo in Develop, or the selection in the Library.

format
JPEGquality 60–100
PNG8 bits per channel
TIFF16 bits per channel, sRGB, compressed
DNGthe RAW data, with the edit inside as XMP
Originalthe file as imported, untouched, with an XMP sidecar

For JPEG, PNG and TIFF: a long edge to resize to, output sharpening, and for JPEG and PNG a text watermark. JPEG keeps the camera’s EXIF.

XMP sidecar writes the edit next to each file in a form Lightroom, Camera Raw and darktable read.

The filename pattern takes {name}, {seq}, {date} and {rating}. Several photos, or a format with a sidecar, go into one folder you choose.

Export settings can be saved as presets.

Lightroom and other programs

Bringing edits in

Drop a Lightroom or Camera Raw .xmp sidecar with its photo, and the edit applies: exposure and tone, white balance, the tone curve, HSL, B&W, colour grading, clarity, texture, dehaze, vignette, grain, crop and angle, perspective, sharpening, noise reduction and lens settings. A line after the import names anything that could not be carried over.

Lightroom presets (.xmp) dropped on their own become presets in albedo.

Taking edits out

  • Export Original to get the untouched file with an XMP sidecar, or tick XMP sidecar for any format.
  • Export DNG to get a raw file Lightroom opens with the edit already applied.
  • In the preset rail, a preset’s menu has Export for Lightroom….

Masks, removals, heal spots and the look are albedo’s own; they travel inside the sidecar in albedo’s namespace, so albedo reads its own files back exactly while other programs read what they understand.

Camera profiles

Adobe’s camera profiles (.dcp) work in albedo; see Profiles and lenses.

Storage, backups and offline use

Where your photos are

albedo keeps everything in the browser’s private storage for its site: a copy of every original, thumbnails and previews, edits, masks and a SQLite catalog. Nothing is uploaded. The browser is asked to keep this storage even when the disk fills up.

Each browser, and each site address, has its own catalog. One tab at a time can use it.

Backups

Back up catalog… at the bottom of the Library’s left panel writes one archive with every original, edit, preset and mask. Restore backup… reads it into an empty catalog, in this browser or another.

Offline

Once albedo has loaded, it works without a network: the app and its data are cached. The AI models are cached the first time each one is used.

Hosting your own copy

albedo is a static site. Build it and serve the dist/ folder from any web server, at a domain root or under a path:

git clone https://github.com/ZahakJ/albedo.git && cd albedo
npm install
npm run setup-models   # the AI models, checked by SHA-256
npm run build
npx serve dist         # or any static server

The server needs no special headers. It should serve .wasm as application/wasm and answer requests in parallel.

Without setup-models everything but the AI tools works. The models and their licenses are listed in MODELS.md.

Keyboard

⌘ is Ctrl on Linux and Windows. ? shows this list in the app, and ⌘K finds any command by name.

Everywhere

key
G D ELibrary, Develop, Compose
Oopen files
← →previous, next photo
⌘Z ⇧⌘Zundo, redo
⌘C ⌘Vcopy, paste settings
⌘Eexport
⌘Kcommand palette
Iinfo overlay
Llights out

Library

key
P X Upick, reject, unflag
0–5rating
6–9colour label
⌫delete
+ −thumbnail size
C N ⇧Ccompare, survey, cull
⌘Fsearch
⌥\clear filters

Develop

key
\before and after
Jclipping
Z100% or fit
Vblack and white
Rcrop (O cycles the grid)
Mmasking: L linear, ⇧M radial, K brush, B object, O keep the wash
Qremove
Hheal and clone
[ ]brush size
⇧⌘Rreset to the original
⌘⇧Eedit in Compose

Compose

Photoshop’s keys.

key
Vmove (⌘T free transform)
M L Wmarquee, lasso, magic wand (⇧ cycles: ellipse, polygon, AI select)
Ccrop
B E Rbrush, eraser, smudge
S J Oclone stamp, spot healing (⇧J healing brush), dodge and burn
G T U Qgradient, type, shape, liquify
I H Zeyedropper, hand, zoom; Space pans
[ ]brush size (⇧[ ⇧] hardness)
1–0opacity, 10% to 100%
X Dswap colours, default colours
\paint on the mask or the pixels
⌘0 ⌘1 ⌘+ ⌘−fit, 100%, zoom in, zoom out
⌘J ⌘G ⇧⌘Gduplicate, group, ungroup
⌥⌘Gclipping mask
⌘E ⇧⌘E ⌥⇧⌘Emerge down, merge visible, stamp visible
⌘A ⌘D ⇧⌘D ⇧⌘Iselect all, deselect, reselect, inverse
⌘M ⌘L ⌘U ⌘Icurves, levels, hue/saturation, invert (as adjustment layers)
⌥⌫ ⌘⌫ ⌫fill with foreground, fill with background, clear
⌘Z ⇧⌘Zundo, redo
⌘Ssave