A RAW photo editor and library for Linux.
Add a folder, cull the shoot, develop the frames you keep, export them.
Your originals are never moved, copied or written to.
Numa is also coming to iPhone, iPad and Mac, as a separate app: numa.photo
Download · numa.photo · Features · Installing · Building · How it works · Feature index
Numa is a native GTK 4 and libadwaita application written in Rust. It was built around a Fujifilm workflow, but it opens and develops every RAW format its decoder reads: twenty-nine formats from 850 cameras, plus JPEG, PNG, HEIF, TIFF and WebP. Everything runs on your own computer, including the machine-learning models behind masks, faces and the AI tools.
The code was written with Claude (Anthropic); see How it was made.
|
Library |
Culling |
Developing |
|
Masks |
Detail and repair |
Export |
Folders, not imports. A library is a folder on disk. Numa scans it and
leaves the files where they are. Each library keeps its catalog in a hidden
.numa folder inside it: ratings, flags, edits, analysis and the names on
faces. Move the folder to another drive or computer, add it there, and
everything comes with it. A weekly backup of that catalog is kept in the same
place. A library on a drive that is not connected stays in the list and opens
from what Numa remembers: the thumbnails it already made, each marked as away.
Stars and flags given meanwhile go into the library when the drive is back.
Rows at each photograph's own shape. Thumbnails are laid out in justified rows that fill the width, so portrait and landscape frames sit side by side without cropping. A popover sets the row size and the spacing. Thumbnails are made at the resolution the row needs on HiDPI screens, only what is near the screen is decoded, and the cache is kept to a budget, so a library of thousands scrolls without holding all of them in memory.
Rate, flag and filter from the keyboard. 0–5 rate, P picks, X
rejects and U clears, in the library, the loupe and the editor alike. Filter
by rating, flag, file type and the culling measures, and sort by date, name,
rating, sharpness or suggested rating. A filter that narrows the grid shows in
the accent colour, and it is remembered between sessions.
See what you have worked on. Photographs with adjustments carry a small pencil mark in the library and in the filmstrip. Opening a photograph does not count as editing it.
RAW and JPEG pairs. A camera set to write both leaves two files per frame. Both stay in the library as their own cards, and the file-type filter narrows the grid to the RAWs or to everything else.
Several libraries, and albums across them. Add, rename and remove libraries and switch between them from the header bar, or from the Libraries page, where each one is a stack of its best photographs. Albums are independent of folders and can hold photographs from any library.
Import from a card or a camera. Put in a card or plug in a camera and Numa offers to import it. Photographs a library already has are skipped, the rest are split into shoots by date, and each shoot is offered the library it belongs to, or a new folder beside the others, with a name pattern you choose.
Open with Numa. Numa can be the default application for RAW files, HEIF, JPEG, PNG, TIFF, WebP and BMP. A photograph opened from the file manager lands in the loupe, with the folder it came from in the grid behind it.
Deleting a photograph moves the file to the desktop's trash, and the dialog says first that its rating and edits go with it.
The loupe. Space shows the selected photograph large, with its
neighbours on either side. Left and Right step through the shoot, Up
picks and Down rejects and both go on to the next frame, and Backspace
takes the last mark back and returns to that frame. Enter opens the editor.
Delete does nothing while the loupe is open, so a cull is never one slip away
from losing a file; a reject never removes anything.
Analyse runs over a whole library in the background, with a progress count and a Stop button, and measures each frame:
- Sharpness, as Laplacian energy on a standardised version of the frame, so a contrasty photograph does not score as sharper than a soft one. A soft frame shot more than five stops slower than 1/focal length says soft · slow shutter.
- Blown highlights, counted on the raw's own values where there is a raw, because the camera's JPEG goes white well before the sensor does.
- Empty frames: a lens cap, a flash into the dark, a frame gone white, as nearly black, nearly white or nearly blank.
- Faces, found with YuNet, and how sharp each face is. A crisp background behind a soft face is a reject even when the frame as a whole measures sharp. Closed eyes are asked about (eyes closed?), never decided.
- Bursts, grouped by a perceptual hash and by time, with the sharpest frame of each burst marked as the best of it. The same scene shot again minutes or days later is recognised as well.
From these Numa suggests a rating from 0 to 5, shown beside each photograph with a short note (such as best of burst, soft or soft face) and available as a sort. The suggestion comes from explicit rules rather than a trained aesthetic model, and it never overwrites a rating you gave. Every mark given in the loupe is kept in the library's catalog with its time.
Compare two to four selected photographs side by side with C, zoomed and
panned together, and rate or reject them from there. The keys act on the
photograph under the pointer.
Numa recognises faces across all of your libraries with SFace, aligned on YuNet's landmarks.
- Name a face once. Every other photograph with a similar face offers that name as a guess. Enter confirms it, typing corrects it. Only the names you confirm are stored; the likeness does the rest, so a name given today also finds last year's photographs.
- Name faces in bulk. The People dialog groups faces that are probably the same person ("In 38 photographs — who is this?") so a whole group gets a name at once. Strangers who keep turning up can be set aside, renaming a person renames them everywhere, and giving two people the same name merges them.
- Browse by person. Everyone with a name is listed in the library picker under the libraries. Picking a person shows every photograph they appear in, across all libraries, and the rating, flag and sort filters still apply.
Everything is non-destructive. Edits are stored as a list of operations and parameters, and the original file is only ever read. Preview and export run the same code on the same edit stack; the preview just uses fewer pixels.
Light. Exposure, contrast, highlights, shadows, whites and blacks. Auto sets exposure and the black and white points and leaves the matters of taste alone. It is a button, never a default.
Tone curve. A point curve over the photograph's own histogram, on the composite channel and on red, green and blue separately. The curve is a monotonic cubic, so a steep section never folds back on itself, and it is applied with interpolation so it does not introduce banding in skies and shadows.
White balance. Temperature in Kelvin and tint, applied in the camera's own colour space before the colour matrix, which is where it is physically correct. Or pick a neutral in the photograph.
Colour. Vibrance and saturation. An eight-colour HSL mixer with a pipette: click the sky in the photograph and the mixer selects whichever colour the sky actually is. Black & white is a switch, as in Lightroom, and turns the mixer into the black-and-white mix: how light each colour's grey comes out.
![]() |
![]() |
| White balance, vibrance and the HSL mixer. | Colour grading per tonal range, with blending and balance. |
Colour grading with separate tints for shadows, midtones, highlights and the whole frame, plus blending and balance. A grade also tones a black and white conversion.
Effects. Clarity, texture and dehaze; a vignette with amount, midpoint, roundness and feather; and grain with amount, size and roughness.
Local tone mapping. HDR compression, clarity and texture use the same edge-aware guided filter at different scales: clarity works at the size of a cheek or a cloud, texture at the weave of a fabric or the bark of a tree. Negative texture softens skin without softening eyes. Negative clarity spreads light like a diffusion filter rather than blurring.
Camera profiles. Numa reads DNG camera profiles (.dcp): forward
matrices, hue/saturation maps and look tables, matched on the camera model
written inside the profile rather than on its filename. Automatic takes
Numa's own profile where there is one (Fujifilm X-T5, X-T4 and X-S10, Canon
EOS R5, Nikon D850, Sony A7R III), then RawTherapee's or Adobe's, then the
camera's own matrix; Preferences sets which of these Automatic means for the
whole library. The Looks tab, on top, offers every other profile installed for
your camera, and a profile is only ever used on the camera it was made for.
The base render. A RAW is developed with a tone curve fitted against the camera's own JPEGs, and exposure is matched per image to the camera's rendering, so the untouched starting point already looks like a finished photograph rather than a flat scan. Where all three channels hit the sensor's ceiling, white balance leaves them white instead of tinting them magenta.
Colour spaces. Export in sRGB, Display P3, Adobe RGB or ProPhoto RGB, with the matching ICC profile embedded. A wide-gamut export is rendered in its own space, so colours the sensor saw beyond sRGB reach the file. On screen, photographs are converted to your display's own colour profile, so a wide-gamut screen does not oversaturate them.
Looks and presets. The Looks tab has the camera profile on top, then
Presets and LUTs. Twelve looks are built in, each with a Strength slider
once it is chosen. Save an edit, or part of one, as a preset of your own, and
apply it to the open photograph or a whole selection. Every preset is shown as
a thumbnail of the photograph you are working on, and resting on one previews
it on the canvas. Lightroom Classic .lrtemplate, Lightroom .xmp and Capture
One .costyle and .costylepack presets can be imported; tone, presence,
the HSL mixer, colour grading, curves, white balance, detail, vignette and
grain are translated. LUTs in .cube and .3dl are applied with an
Amount.
As Shot, under the profile, is the photograph as the camera made it: every raw carries the camera's own JPEG of the same moment, with its film simulation, picture style or creative look and the recipe it was shot with, and Numa fits a small colour transform from its own rendering to that JPEG, per photograph. It has a Strength, your own edits go in before it, and where the JPEG clipped the highlights the raw's detail stays. Pasted or in a preset, it follows each photograph's own JPEG.
The built-in looks and Numa's own camera profiles are the photographer's own work: they come with the released Flatpak and AppImage, and a build from this source has neither.
Sharpening is an unsharp mask on log luminance, applied as a gain so edges do not grow colour fringes. It has amount, radius and masking, where masking keeps sharpening off flat areas and noise. It is on by default at a moderate 25, because every demosaic softens a little.
Noise reduction has separate luminance and colour controls. Luminance noise is smoothed with an edge-preserving guided filter, and Detail decides where grain ends and structure begins. Colour noise reduction takes hue from a heavily smoothed copy and brightness from the original. It is on by default, because colour speckle is never wanted. On X-Trans files the colour the demosaic invents is taken out before any of this.
AI denoise runs SCUNet over the whole photograph once, in the background, and keeps the answer, so a slider never waits on it. With the optional GPU download it runs in half precision on the graphics card: about two minutes for a 40 MP frame, five on the processor.
AI sharpen undoes the blur of a hand that moved, with Restormer, run once like AI denoise and on the denoised frame when both are on.
Super Resolution exports a photograph at twice its size each way with RealPLKSR, the faithful upscaler darktable uses: detail rather than blur, and no invented texture.
Moiré removes false colour from fine repeating patterns such as fabric and roof tiles. Defringe removes the purple and green rims that fast lenses leave on high-contrast edges.
Lens corrections. Vignetting, distortion and lateral chromatic aberration are corrected in a single resampling pass. Fujifilm cameras write their lens corrections into each RAF, and Numa uses those first. Everything else is corrected from the LensFun database, by Numa's own code.
Crop and straighten with handles, aspect ratio presets and a rule-of-thirds overlay. Quarter turns, mirroring and EXIF orientation are handled.
Perspective. Vertical, horizontal and aspect corrections, or Auto, which finds the photograph's own lines and puts converging verticals back upright. Guided lets you draw the lines that should be straight.
Every mask carries everything the photograph has that belongs to a region: Light and its curves, the colour mixer and black and white, point colours, colour grading, Effects with grain, and all of Detail. A local edit is the same edit as a global one, applied through a shape. Masks are kept in a list that can be reordered by dragging, and each can be inverted, feathered, and have its edge moved in or out. A mask survives a crop, a straighten or a quarter turn with the clicks and strokes that shaped it.
Draw them: linear and radial gradients, a brush and a lasso. The brush and lasso add to or subtract from any mask, so a sky mask that caught the roofline can be cleaned up by painting it out.
Let the photograph find them:
- Found in this photograph. Subject, Background, Sky, Water, Mountains, Greenery, Buildings, Ground and more, from EfficientViT-Seg trained on ADE20K. Only the masks for things actually in the frame are offered, and resting on one outlines it and says how much of the photograph it covers.
- Subject is what the photograph is about, whatever it is, found by BiRefNet: heads, hats and feet are not cut through. Person and Animal fall back to a matting model when the semantic model finds nothing, and the chip names the animal ("Bird", "Dog") when an image classifier is confident.
- Click to select. Click any object and SlimSAM cuts it out along the photograph's own edges, including things no segmentation model has a word for, such as a kite.
- Subtract what was found. A person, an animal, the sky or anything else the model finds can be cut back out of any mask: a gradient over the sky with the person on the horizon left as they were.
- Refine. Edge traces a real edge with BiRefNet; Hair follows hair and fur with ViTMatte.
- By colour or brightness. Colour range and luminance range masks select every pixel of a colour or between two brightnesses, anywhere in the frame.
A mask can be shown as a coloured wash, an outline, or both.
![]() |
![]() |
| Masks found in the photograph, only for what is in it. | A subject mask with its own exposure, refined from the mask bar. |
Heal replaces a spot with texture from elsewhere while keeping the surrounding tone, solved as a Poisson blend. Clone copies it as is. The source and destination are both drawn on the photograph, so it is always clear which is which. Remove takes out what is under a circle and fills it from around it with LaMa, which continues a wall, a fence or a horizon through the hole. Remove people finds the passers-by behind the subject and removes them the same way. Find dust heals the specks a dirty sensor leaves in skies and walls, and Pet eye puts out the glow of a flash in an animal's eye.
Face retouching appears only when a face has been found: automatic spot removal, skin smoothing, evenness, red-eye and teeth whitening.
- JPEG, PNG, 16-bit TIFF, AVIF, JPEG XL or DNG, with the quality you choose and the ICC profile of the colour space you export in. JPEG XL uses the libjxl on your computer. A DNG is the raw itself, with the edit as a preview and as Camera Raw settings Lightroom reads.
- HDR: a JPEG with a gain map, which HDR screens show with the highlights as bright as the scene had them and everything else shows as the ordinary photograph.
- Presets for export settings, a watermark in a corner of your choice, and a file name template.
- Full size, or a long edge from 4096 down to 1080 pixels, resized with Lanczos and never enlarged. Output sharpening restores the edge that downscaling takes off.
- The camera's own EXIF, carried over, with the GPS position removed if you ask. IPTC in XMP: creator, copyright, rating, and the people and albums a photograph is in as keywords.
- Batch export of a selection from the library, with the same settings as the editor. Masks are recomputed before export, so they apply the same way they did on screen.
- Never overwriting. Files go to an
editedfolder inside the library, or to a folder you choose.
- One bar. The header holds Undo, Redo, Before and Export; everything else is in the main menu, with the photograph's sections at the top and their keys beside them.
- Saving is automatic, two seconds after the last change, and when you step to another photograph, leave the editor or quit.
- Undo and redo cover every adjustment, geometry and mask, with a history list that names each step. Snapshots keep named versions of an edit to go back to.
- Before and after: hold
Spaceto see the as-shot rendering. - Reference: keep one developed frame beside the one you are working on and match a set to it, or show the camera's own JPEG there instead.
- A live histogram, waveform or RGB parade, chosen with a right click on the graph, with clipped shadows and highlights shown on the photograph.
- Copy and paste settings between photographs, with a checklist of what to paste: white balance, tone, colour, tone curve, detail and crop. Paste onto a single photograph or a whole selection.
- A filmstrip to move between frames without returning to the library.
- Zoom from fit to 1:1 and beyond. Above 1:1 pixels are drawn as pixels. When you zoom past what the preview resolution can show, the visible region is rendered from the full-resolution file.
- Adjusted sliders are highlighted, so you can see at a glance what was changed on a photograph. Double-click or right-click a slider to reset it, and hold Shift with the arrow keys to move it ten steps at a time.
- Info shows camera, lens, exposure, Fujifilm film mode and dimensions, for JPEG and HEIF files too; a photograph that records no camera says so.
- HDR merge combines a bracket into one high-dynamic-range image. A bracket shot by hand is lined up first.
- Keyboard shortcuts are listed under
Ctrl+/.
Three pages, with a search across all of them. General has the display profile, what Automatic means for camera profiles, opening photographs with Numa, and a daily check for new versions that is off until you turn it on; nothing about you or your photographs is sent. Add-ons lists the optional models with their size, licence and what they are for, to download one by one or all at once. Storage shows Numa's own folders and how much each takes, clears the thumbnail cache, and says what to delete to remove Numa again.
Numa reads anything rawler reads:
twenty-nine RAW formats from 850 cameras, plus JPEG,
PNG, HEIF (.heic, .heif, .hif), TIFF and WebP. The list of supported RAW
formats is taken from the decoder, so it grows when the decoder does. A JPEG,
HEIF or PNG opens exactly as it is, in its own colour space, without the
contrast and sharpening a RAW is given.
Fujifilm files get extra support: the Markesteijn X-Trans demosaic at full resolution, the film simulation the camera was set to, and the lens corrections stored in the RAF. Everything else goes through the same pipeline without them.
Tested end to end on Fujifilm RAF and Sony ARW files.
Numa comes in three forms for 64-bit Intel and AMD machines: a package for your distribution, a Flatpak and an AppImage. All three keep their libraries, presets and models in the same folders (see Where things live), so moving from one to another loses nothing.
The packages are built on the openSUSE Build Service. You add Numa's repository once, and from then on Numa updates with the rest of the system, in the terminal or in your software centre. Copy the lines for your distribution into a terminal.
Fedora 44
sudo dnf config-manager addrepo --from-repofile=https://download.opensuse.org/repositories/home:/Numa/Fedora_44/home:Numa.repo
sudo dnf install numadnf asks once whether to trust the repository's key; answer y.
openSUSE Tumbleweed
sudo zypper addrepo https://download.opensuse.org/repositories/home:/Numa/openSUSE_Tumbleweed/home:Numa.repo
sudo zypper refresh
sudo zypper install numazypper asks once whether to trust the repository's key; answer a (always).
Ubuntu 26.04
wget -qO- https://download.opensuse.org/repositories/home:/Numa/xUbuntu_26.04/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/numa.gpg
echo 'deb [signed-by=/etc/apt/keyrings/numa.gpg] https://download.opensuse.org/repositories/home:/Numa/xUbuntu_26.04/ /' | sudo tee /etc/apt/sources.list.d/numa.list
sudo apt update
sudo apt install numaDebian Testing
wget -qO- https://download.opensuse.org/repositories/home:/Numa/Debian_Testing/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/numa.gpg
echo 'deb [signed-by=/etc/apt/keyrings/numa.gpg] https://download.opensuse.org/repositories/home:/Numa/Debian_Testing/ /' | sudo tee /etc/apt/sources.list.d/numa.list
sudo apt update
sudo apt install numaArch, CachyOS, EndeavourOS
printf '\n[home_Numa_Arch]\nServer = https://download.opensuse.org/repositories/home:/Numa/Arch/$arch\n' | sudo tee -a /etc/pacman.conf
curl -fsSL https://download.opensuse.org/repositories/home:/Numa/Arch/x86_64/home_Numa_Arch.key | sudo pacman-key --add -
sudo pacman-key --lsign-key 5ADD29F2614AC31A0BD16A75AACA2C3967ED9794
sudo pacman -Syu numaThe third line trusts the repository's signing key; the number is its fingerprint. After this, Numa is also in Octopi.
Debian 13, Ubuntu 24.04 and older releases have no package yet, because their Rust is too old to build Numa. Use the Flatpak or the AppImage.
Both are on the Releases page.
Flatpak. Needs Flatpak with Flathub added; the GNOME 50 runtime is fetched the first time, about a gigabyte, and shared with other applications after that. A newer bundle installs over the old one the same way.
flatpak install --user Numa-*-x86_64.flatpak
flatpak run com.tijmen.NumaTo have photographs open in Numa, choose it under Open With in the file manager and switch on Always use for this file type.
AppImage. A single file, Numa-<version>-x86_64.AppImage, for glibc 2.39
or newer: Ubuntu 24.04 and later, Debian 13 and later, Fedora 40 and later, and
current rolling releases such as Arch.
A downloaded file is not executable, and until it is, double-clicking it does nothing. In GNOME Files, open Properties on the file and turn on Executable as Program; or in a terminal:
chmod +x Numa-*-x86_64.AppImage
./Numa-*-x86_64.AppImageAfter that it starts with a double-click. Keep the file where it is, for
example in ~/Applications; nothing is installed elsewhere.
The AppImage mounts itself with FUSE and needs the fusermount3 (or
fusermount) program, which most desktop installations already have. It does
not need libfuse2. If it does not start and running it from a terminal
mentions fusermount or FUSE, install:
| Distribution | Package |
|---|---|
| Debian, Ubuntu | sudo apt install fuse3 |
| Fedora | sudo dnf install fuse3 |
| Arch | sudo pacman -S fuse3 |
Where FUSE is not available at all, for example in a container, it can run without it; it then unpacks itself to a temporary folder on every start, which takes a few seconds longer:
./Numa-*-x86_64.AppImage --appimage-extract-and-runOpening photographs with Numa. Once it is in the applications menu, Numa
is offered under Open With for RAW files, HEIF, JPEG, PNG, TIFF, WebP and
BMP. To make it the one that opens them, turn on Open photographs with
Numa in Preferences — or, from a terminal,
packaging/set-default.sh ~/Applications/Numa-*.AppImage. A photograph opened
that way lands in the loupe, with the folder it came from in the grid behind
it: the next frame is one arrow key away, and Enter opens the editor.
On first start Numa offers to add itself to the applications menu, and to download the additional files described below: the machine-learning models and RawTherapee's camera profiles. If the AppImage is moved or replaced by a newer one, the menu entry follows it the next time Numa starts from the new place. Preferences has a switch to remove the entry again.
You need Rust 1.92 or newer, GTK 4.14 or newer, libadwaita 1.5 or newer, and
pkg-config.
git clone git@github.com:simmmmm/Numa.git
cd Numa
./dev/run.shSome features use additional files that are downloaded separately: the
machine-learning models for masks, click to select, subject edges, faces and
animal names, and RawTherapee's camera profiles. Numa offers them on first
start, and Preferences (Ctrl+,) downloads them, shows what is installed
and opens the folders they live in. Every file is checked against its SHA-256
before it is used. Without them everything else works. From a source checkout,
./dev/fetch-models.sh fetches the models as well.
| Library catalog, history, snapshots, backups | <your library>/.numa/ |
| Grid thumbnails | <your library>/.numa/thumbs/ |
| Application settings, list of libraries, albums | ~/.local/share/numa/catalog.db |
| Models | ~/.local/share/numa/models/ |
| Presets | ~/.local/share/numa/presets/ |
| Camera profiles you add | ~/.local/share/numa/profiles/ |
| Downloaded RawTherapee profiles | ~/.local/share/numa/rawtherapee-dcpprofiles/ |
| Larger thumbnails, AI denoise results | ~/.cache/numa/ |
| Exports | <your library>/edited/ unless another folder is chosen |
These are the usual locations, and the Flatpak uses them too, so it shares its libraries, presets and models with an AppImage or a build of your own. Preferences shows the actual folders. Deleting a thumbnail folder or the cache only means those files are made again.
The distribution packages are built from packaging/obs/ (see its README).
There is a Flatpak manifest in packaging/flatpak/ and an AppImage build in
packaging/appimage/, which builds inside a container so the result runs on
older distributions:
./packaging/appimage/build.shWanted: packagers. Apart from its own repository on the openSUSE Build Service, Numa is not in any distribution's repositories yet, nor on Flathub, the AUR or the Snap Store. If you would like to package it for one of them and keep it up to date, open an issue. Questions about the build get answered, and anything in the code that gets in a packager's way gets fixed.
One thing to know for Flathub: it does not accept a manifest that was written
or assisted by AI. Everything in this repository was, including
packaging/flatpak/, so a Flathub manifest has to be written by a person from
the start.
RAW file
└─ decode + demosaic ──────────> linear RGB, f32, scene-referred
│
├─ colour stage white balance in camera space, then the camera
│ matrix and its profile's tables (cached)
│
├─ geometry lens corrections, quarter turns, crop,
│ straighten, perspective
│
└─ pixel stack
heal and clone ──> face retouching
noise reduction ──> sharpening
exposure, contrast, the four tone regions, vibrance, saturation
the colour mixer
local tone mapping (HDR, clarity, texture)
masks, each the same stack again, faded in
colour grading
the base tone curve ──> your tone curves ──> output space ──> 8-bit
Values stay scene-linear until the last step. In linear light exposure is a multiplication, downscaling averages correctly, and highlights above 1.0 are still there for highlight recovery to work with.
While you edit, Numa renders only the region on screen, at the resolution the screen can show. During a slider drag it draws a fast draft and sharpens the picture as soon as you let go.
docs/ENGINEERING.md explains the decisions and the
measurements behind them: white balance in camera space, the tone curve fitted
against camera JPEGs, DNG profiles, the demosaic, lens corrections, face
recognition thresholds, and the bugs that were hardest to find.
| Crate | Used for |
|---|---|
gtk4 + libadwaita |
The interface. |
rawler |
RAW decoding, demosaic and colour matrices, in pure Rust with X-Trans support. |
heic-rs |
HEIF and HEIC, in pure Rust. |
zip |
Opening Capture One style packs. |
rusqlite |
The catalogs. A rating writes one row, and a filter is a WHERE clause. |
ort + ndarray |
ONNX Runtime for every model. |
image + rayon |
Pixel work across all cores. |
roxmltree |
Reading the LensFun lens database (CC BY-SA 3.0, the LensFun community), for lenses that do not describe themselves in the file. The corrections themselves are Numa's own code. |
serde · serde_json · dirs · log · env_logger · byteorder · libc |
Supporting work. |
| Model | Used for |
|---|---|
| EfficientViT-Seg-B2 (ADE20K) | Semantic mask presets |
| SlimSAM-77 | Click to select |
| BiRefNet | The subject, and refined edges |
| ViTMatte-S | Hair and fur in Refine edge |
| YuNet | Face detection |
| open-closed-eye-0001 (OpenVINO) | Asking about closed eyes in culling |
| SFace | Face recognition |
| PP-ResNet50 (ImageNet) | Naming the animal in a subject mask |
| SCUNet | AI denoise |
| Restormer | AI sharpen |
| RealPLKSR | Super Resolution |
| LaMa | Remove |
| YOLOX-s | Finding people to remove |
docs/FEATURES.md tracks every feature by ID and is the
only place status is kept: currently 274 built, 13 partly built, 3 planned
and 14 withdrawn, each withdrawal with its reason.
Still open. Numa's own camera profile for every camera, not only the 21 fitted so far · settling whether a developed frame is as sharp as Lightroom's · usage counts, sent only when you say so · HDR on an HDR screen.
The full list, generated from the status markers, is at the end of
docs/FEATURES.md. How each number in it was reached is in
docs/ENGINEERING.md — corrections welcome.
Numa is written by Claude, an AI model by Anthropic, working from the
photographer's feedback: comparisons with other raw developers and the
camera's own JPEGs, and reports of what looked wrong. Decisions and
measurements are recorded in docs/ENGINEERING.md, and
there are nearly 700 automated tests, run on every push together with one camera
file per make.
Copyright © 2026 Tijmen. GNU General Public License, version 3 or later. You may use, study, change and share Numa, also commercially. Whoever passes it on, changed or not, passes on the source under the same licence. This is Numa for Linux; Numa for iPhone, iPad and Mac is a separate app and is not open source.
The additional files each keep their own licence: the models are Apache-2.0 or
MIT, and RawTherapee's camera profiles are GPL-3.0. Three optional models were
trained on data licensed for non-commercial or research use only: ViTMatte-S
(hair and fur in Refine edge), SFace (recognising people) and IS-Net (a
fallback for Subject). They are not in Numa's packages but downloaded when
asked for, Add-ons marks the first two for non-commercial use only, and their
terms are in
data/MODELS-LICENSES.txt. The licence texts are
published with the downloads.
- RawTherapee for the DNG camera profiles, most
of them made by Maciej Dworak. Each names its author in its
ProfileCopyrighttag. They are redistributed unmodified under GPL-3.0. - rawler for RAW decoding in Rust.
- MIT Han Lab for EfficientViT, Xenova for the ONNX conversion of SlimSAM, BiRefNet (Peng Zheng et al.) and onnx-community for its ONNX export, and OpenCV Zoo for YuNet, SFace and PP-ResNet, SCUNet for the denoiser, darktable for choosing and converting RealPLKSR, LaMa and Carve's export of it, and YOLOX from Megvii, and Restormer for AI sharpen, and OpenVINO Open Model Zoo for the open-closed eye model.
The screenshots show sample RAW files from raw.pixls.us, which their photographers released there under CC0: seventy-two frames from seventy-one cameras, renamed for three demo libraries. Thank you to everyone who contributes to it; it is also how Numa is tested on cameras nobody here owns.
Not affiliated with or endorsed by Fujifilm.













