Skip to content

Releases: jessolmstead/greycard

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 28 Sep 03:17

Quality of life improvements. A library root on a network share neither freezes
the window nor goes stale. Frames can be deleted from the disk with
confirmation. The scopes can be read for the chosen
mask alone, a slider's value can be typed, and White Balance has an
Auto. A folder of thousands of cached thumbnails opens at once. And
the fixes from the first day with 0.2.0 on a NAS root are here too.
Read the
guide for testers
for installing on each system, the hotkeys, and how to report a problem.

  • The scopes can be restricted to the chosen mask: a Selection toggle
    beside them, off at launch, so a skin mask shows the skin's cloud on
    the vectorscope and a face its level on the waveform; the clipping
    lamps follow it too while it is on (§189)
  • Delete from disk supported in all modes, with the Delete key.
    The delete runs off the window's thread (§190, §196)
  • A folder of thousands whose thumbnails are all in the cache shows
    its window at once and stays responsive while they come: the pool
    delivers in batches, the rows on screen first, and rows far off keep
    their picture until scrolled near; the 20,000-frame case filled in
    1.6 s with the window drawing throughout, against 3 s of a blank
    window (§191)
  • A view of the library roots that takes a while to read shows a bar with a
    count of the sidecars read, in the grid and the loupe alike, after
    the first 200 ms; a read that stops moving is given up on rather
    than left hanging (§192)
  • A slider's value can be typed: click the number, Enter sets it
    clamped to the range, Escape leaves it; the point curve's selected
    point stays selected and takes a typed In and Out in 0–255 (§193)
  • The camera match sheet no longer grows past the window after a run
    over many groups: its body scrolls and the buttons stay in reach
  • An Auto button beside Neutral in WHITE BALANCE: grey-world over the
    frame in camera space, clipped and black pixels dropped and one pass
    re-weighting toward what is already near grey, through the same
    path as the Neutral picker, so the answer is the same whatever
    white the frame was showing and a second press changes nothing;
    frames with nothing neutral in them still fool it (§194)
  • A root's chip in the library row goes off when a folder is opened
    over its view; before, the old chip stayed lit
  • A library root on a network share (NFS, SMB, sshfs and the like) is
    no longer watched on Linux and macOS, where setting the watch up
    froze the editor while every folder was registered and saw only this
    machine's changes; it is passed over every 10 minutes instead
    (network_poll_minutes in settings.json, 0 for never), and the
    watcher on the other roots is set up off the window's thread, so
    adding, removing or starting with a root never holds the window
    (§188)
  • When Move rejects takes away the frame on screen, culling now shows
    the nearest frame that is left, as the loupe already did; before, it
    kept showing the moved frame with nothing selected
  • Opening the Settings sheet no longer freezes the window over a
    large root: the count of sidecars that are out of place, and the move that
    settles them, run off the window's thread, the sheet saying
    "Counting..." and "Moving..." meanwhile
  • The Crop, Masks, and Retouch tabs no longer open blank after the
    Develop tab was scrolled down: each tab starts at its top
  • The terminal no longer shows winit's Wayland event loop warning
    about a re-registered source, which is harmless
  • The test build's dead-code lints on macOS and Windows, which turned
    the tag's CI red, are gated

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 27 Sep 21:18

The second release. The library arrived: folders added as roots and
indexed, browsed across roots with filter chips, imported from a card,
and read without freezing the window when a root is on a network
drive. Culling got its keys answered on the picture. A button fits
the camera's own look from its JPEGs. Masks gained a learned Sky.
And the editor now says when a newer release is out. Read the
guide for testers
for installing on each system, the keys, and how to report a problem.

  • A library root on a network drive no longer freezes the editor while
    it is walked: the list, the new frames' sidecars and their rows are
    read off the window's thread, and a burst of passes is one read. A
    root that stops answering shows as offline within 3 s and no longer
    stops the list of the other roots; the indexer itself still waits on
    it, so nothing new is indexed until it answers (§187, 2026-09-27).
  • The user guide says where a camera profile comes from (Adobe's
    folders, RawTherapee's set, a chart shot) and that the embedded matrix
    is what most people need (2026-09-27).
  • Check for a newer release at launch, at most once a day, and offer it
    in the left pane; a switch and Check now in Settings, which now
    scrolls on a short window (§186, 2026-09-27).
  • The Windows package and the Mac bundle have now been installed and run
    by testers, which closes the 0.1.0 line that named them as the parts
    not verified by running them (2026-09-27).
  • A library root can have a name of its own ("Archive" for a folder
    called Photos), set from its chip's right-click menu and shown in
    place of the folder's name; the folder is not renamed or moved. Escape
    closes the name sheet and the preset sheet from their fields (§185,
    2026-09-27).
  • The Develop, Crop, Masks and Retouch tab bar stays at the top of the
    panel while the sections under it scroll (§184, 2026-09-27).
  • A half-copied ARW (and a CR3, once rawler stops panicking on one) is
    refused with the half-copied message instead of opening as a picture
    blank below the copied part (§182, 2026-09-27).
  • Culling shows the frame's stars, flag and label on the picture, on the
    loupe and on each compare tile, and a word for each key pressed ("3
    stars", "Rejected") and for each undo and redo that fades on its own
    and is not wiped by the arrow; both with Tab on. A held culling key is
    one press (§183, 2026-09-27).
  • Move on after a rating, flag or label: a switch in the CULLING
    section, off by default, kept in the settings (§183, 2026-09-27).
  • Fit this camera's look: a button in the Look section surveys the
    library or the open folder by body and picture style, develops
    about forty frames a group, lays the camera's own JPEG over each
    and fits the maker's rendering as a look, written to the look
    directory under the body's and the style's name; a group under
    twenty frames borrows the style from another body or is skipped,
    and an existing table is never replaced without the switch; the
    picker says where a look was fitted when the open frame is another
    body, and picture style is a filter facet. The maker's style and
    adaptive settings join the library index by a migration in place
    (§180, §181, docs/camera-match.md, 2026-09-26).
  • A right-click menu on a frame in the strip, the grid or the
    viewport: copy the settings of that frame, paste them onto the
    selection through the sync sheet's section list, rating, flag and
    label, reveal in the file manager, export; every item the code of
    its key. Ctrl+C and Ctrl+V do the copy and paste from the keys, and
    each pasted frame's history reads "Paste from FILE" (§171,
    2026-09-25).
  • Thumbnails are made on a pool of threads of their own instead of one
    at a time behind the develop: a cold folder of 35 fills the grid in
    0.6 s instead of 3.6, and 300 in 4 s instead of 17, the first
    picture no later; a file no picture can be made of marks its cell
    "Unreadable", and a --grid --snapshot no longer waits forever on
    it; a folder listing takes only regular files (§172, 2026-09-25).
  • Import from a card: Ctrl+Shift+I or Import... in the grid's header,
    a card found under the mount points, a destination with folder and
    name patterns ({date}, {seq}, {camera}, {name} and the rest,
    names safe on every file system), a preset laid on each frame as one
    history step, and a backup copy; every file copied to a temporary,
    hashed as read, synced, read back and renamed only when the hashes
    agree, and never a write on the card; a frame already imported is
    known by its size and its first and last 64 KiB, Verify compares
    every byte; --import SRC --to DEST runs one headless (§173,
    2026-09-25).
  • Roots: folders added to the library, kept in roots.json beside
    the index; a pass over every root at launch and a watcher on them
    while the editor runs, so a file copied into a root is in the grid
    half a second later and a moved frame is found rather than flagged
    missing; an all-roots view of every file under every root with the
    filter bar over it, a root's chip narrowing to it, an unplugged
    root shown offline and left alone; the filter remembered between
    sessions; rejects moved to a rejects folder in each shoot's own
    folder; --roots DIR,DIR and --all-roots (§174, 2026-09-25).
  • A Sky mask on the Masks tab: a learned prior (EoMT-S, MIT weights,
    96 MB, fetched on first use) finds the sky, a gate refuses a frame
    with none rather than paint one, SAM 2 draws the outline, and a
    color-line matte at the frame's full resolution takes the edge
    through hair and bare branches; clicks add or remove sky. Under a
    second from click to mask on the GPU at 24 MP. On the 41-frame test
    set, no false sky on the five frames without one and 31 of 36 skies
    found; sky through a window, and sky behind dense blossom, are
    refused or missed (§175, 2026-09-25).
  • Undo on a clone or heal spot takes it away in one step: the source
    the develop chooses completes the step that placed it instead of
    recording a second one, and sidecars 0.1.1 wrote heal themselves
    (#7, §177, 2026-09-25).
  • The Tone curve switch is gone: the base curve always applies to a
    raw, and the Light section switched off leaves the picture as it
    opens; masks' tone sliders act whatever the picture's Light says
    (#9, §177, 2026-09-25).
  • Removing a preset asks first, and Settings restores any default
    preset that is missing without touching the user's own (#4, §177,
    2026-09-25).
  • A linear gradient's end line turns and stretches it about its
    center; Alt moves just that end, as before (#6, §177, 2026-09-25).
  • A frame turned from the Crop tab turns on screen at once instead of
    a second or two later, and without a lens profile or defringe the
    develop at the new turn takes a third of the time (#5, §177,
    2026-09-25).
  • The Masks tab sets the chosen shape's controls in a card under the
    shape list, marks the chosen row, labels Add / Subtract / Intersect
    as the next shape's, and heads the look sections with the
    adjustment's name, "ADJUSTMENT 1 · LIGHT" (#10, §177, 2026-09-25).
  • The left pane scrolls instead of growing the window: a long list of
    snapshots no longer takes the window out of fullscreen on Windows,
    and a list's bins sit clear of its scrollbar (#2, §177, 2026-09-26).
  • The left pane, the develop panel and the strip put away one at a
    time: F7, F8 and F6, or the small arrow on each one's edge of the
    viewport; Tab still puts all three away and brings them back, and
    what was put away stays put away on the next launch (#3, §178,
    2026-09-26).
  • A raw that rawler panics on, such as a CR3 still being copied, fails
    to open with a reason instead of taking the frame, or on some paths
    the editor, down with it; one whose end is zeros is called
    half-copied (§179, 2026-09-26).
  • Ctrl+Z while culling takes back the session's ratings, flags and
    labels, newest first, going to each frame it changes, and
    Ctrl+Shift+Z makes them again; it no longer undoes a develop edit
    or leaves culling (§179, 2026-09-26).

v0.1.2

Choose a tag to compare

@github-actions github-actions released this 25 Sep 06:06
  • Fix JPEG, PNG and TIFF files opening brighter and more contrasty
    than the file: they took the 0.8-stop baseline and the display
    curve meant for a raw. A picture with nothing done to it now looks
    as it does anywhere else (#1, §152, 2026-09-23).
  • Keep sidecars in a hidden .greycard folder inside the shoot's
    folder instead of beside each raw, with sidecars_in_folder in the
    settings or --sidecar-folder for a run. Both places are read
    whatever the setting says, and a frame's sidecar moves to the
    chosen place the next time it is saved. Hidden by attribute on
    Windows; XMPs stay beside the raw (§153, 2026-09-23).
  • A plain cargo test no longer prints ERROR lines from the UI
    crate's tests: the log module's test had installed a terminal sink
    for the whole test binary (2026-09-23).
  • app.slint split into one file a panel section under ui/panel/,
    the window keeping every property and callback so the Rust side is
    untouched; 4,949 lines down to 1,687, verified by whole-window
    captures against the previous build and a differential event fuzz,
    no behavior change (§154, 2026-09-23).
  • Tab hides everything but the photo and brings it back; --hide-panels
    opens that way for a capture (§155, 2026-09-23).
  • The lens profiles are offered once, unasked, the first time a picture
    opens with no lens database, with the reason; Not now is remembered
    and the LENS section keeps its button (§155, 2026-09-23).
  • The PRESETS section moves to the left pane, under the navigator, out
    of the develop panel's scroll; the presets and history lists give up
    room when the pane is short of it (§155, 2026-09-23).
  • A Settings sheet (Ctrl+, or the Settings... button) for where sidecars
    are written and whether XMPs are, with a "move the open frames'
    sidecars" action that reports what it renamed and what stale copies it
    removed; --sheet settings and --sheet lenses for captures (§155,
    2026-09-23).
  • The release binaries are stripped: greycard-ui 112 MB to 84 MB on
    Linux, no behavior change (§155, 2026-09-23).
  • Several frames at once in the strip and the grid: Ctrl+click adds
    one, Shift+click a run, Shift+arrows extend, Escape collapses; the
    rating, flag, label, reject and turn keys act on the whole set
    (§156, 2026-09-23).
  • Sync settings: Ctrl+Shift+S or the Sync button lays the chosen
    sections of the frame on screen over every other selected frame
    through the preset path, one history step each; the camera profile
    only onto the body it was made for, Noise bringing the learned
    denoiser along, masks off by default; the preset and sync sheets in
    two columns so they fit a 768 px screen (§156, 2026-09-23).
  • Export presets: the export sheet's choices kept by name, picked at
    the top of the sheet, saved and deleted there, and --export-preset NAME for a headless export; a metadata choice of All, No edit or
    None (§157, 2026-09-23).
  • A watermark on the export: text in the system's sans-serif or a PNG,
    at one of nine positions with a margin, a size as a share of the long
    edge and an opacity, so it lands the same at every export size;
    never in the viewport; an empty or undrawable mark fails the export
    rather than letting an unmarked picture out (§157, 2026-09-23).
  • Two range masks on the Masks tab: a Luminance window on the picture's
    lightness (Oklab L, 100 the sensor's white, the ends open) and a
    Color window on its hue and chroma in Oklab, each with fades, a
    dropper that centers the hue on a click and a Skin preset; sampled
    from the developed picture before the look, so a mask does not move
    under its own edit; on the CPU and in the viewport shader alike
    (§158, 2026-09-23).
  • A sidecar carrying a mask shape from a later build now loads with
    that shape left out and a warning, instead of being refused whole;
    builds before 0.1.2 still refuse a sidecar with a range mask (§158,
    2026-09-23).
  • The Subject and Background masks run on the GPU where WebGPU is
    available: a rewrite of the BiRefNet lite export, published by
    greycard under its MIT license, that takes 0.16 s a mask against 2.9 s
    on the CPU; fetched on first use, the original offered when it
    cannot be had (§159, 2026-09-23).
  • greycard models --fetch all carries on past a model that fails and
    reports the failures at the end (§159, 2026-09-23).
  • The library index, greycard-library: a SQLite index of every raw
    and picture's path, size, content hash, EXIF and sidecar meta,
    incremental, finding a moved file by hash and leaving an unmounted
    drive alone; greycard library index DIR and greycard library list 'camera:R6' 'iso>=3200' 'rating>=3' with a filter language that
    refuses what it cannot answer. Not yet wired into the editor (§160,
    2026-09-24).
  • The probe reads the lens, focal length and date, and a JPEG or PNG's
    EXIF from its head without decoding it (§160, 2026-09-24).
  • A save counter in the sidecar: when a frame has a sidecar both beside
    it and under .greycard/, the one saved more times wins, and the
    files' times decide only when a copy carries no count, so a copy tool
    or a restore cannot make the next save drop an edit (§161,
    2026-09-24).
  • A preset click lays the preset over every selected frame, one
    history step each, the way a sync does; a camera profile in a preset
    reaches only frames of the body it was made for, the open frame
    included, and the status says which it left off (§162, 2026-09-24).
  • A preset applied in culling now writes the frame's sidecar; before,
    the step lived only in memory until the next save (§162, 2026-09-24).
  • A thumbnail cache on disk, keyed by the file's content hash and its
    time, so a folder reopened, moved or renamed shows its thumbnails at
    once (the 35 sample files: 4 s to 0.01 s); 300 MB by default, with a
    cap field and a Clear button in the Settings sheet's new THUMBNAILS
    row; a thumbnail made while the file was still being copied is never
    kept (§163, 2026-09-24).
  • The profiled denoiser's wavelet chain runs on planes a block at a
    time: the 45 MP develop with the hybrid denoise at six threads goes
    from about 26 s to 12.7 s, the 24 MP from 11.3 to 5.7, output within
    a 16-bit step of before (§164, 2026-09-24).
  • Faster develop ops, output bit-identical: the lens correction 17
    percent and its vignetting four times at four threads, the CFA gains
    twice and the levels a quarter at one thread, the Gaussian blur, the
    dehaze, and the RCD demosaic 11 percent from an inlining decision
    pinned (§165, 2026-09-24).
  • Name a history step by what made it: "Preset: Faded film", "Preset
    ×3: Faded film" over a set, "Sync from 5M0A3021.CR3", "Snapshot:
    Before the crop", where the rows read as the list of sections that
    moved. The words are kept with the step in the sidecar, an older
    build reads the file as before, and a --preset step is now written
    on quit (§166, 2026-09-24).
  • Export the frames selected, not only the one on screen: each under
    its own edit, one at a time on the worker behind the develop, with
    progress on the status line, a Stop, and a finished line that counts
    what was skipped or failed. A set never writes over one of its own
    sources. --export DIR --also ROWS does it from the command line
    (§167, 2026-09-24).
  • The library index in the editor: the open folder is indexed on a
    thread of its own and kept up to date as sidecars are saved, and
    the grid's filter grows chips for camera, lens, ISO, focal length,
    day and keyword with their counts, a text field that takes the
    filter language (camera:R6 iso>=3200 rating>=3), and --filter
    on the command line. The database is greycard/library.sqlite
    under the platform's data directory, or --library PATH (§168,
    2026-09-24).
  • Fix a click with the color range, white balance or defringe
    dropper zooming the view as well, and a drag with one panning it
    (§169, 2026-09-24).
  • Drop the color mask's Skin button: a new color window starts at the
    skin already, and the button only put the sliders back there (§169,
    2026-09-24).
  • Offer the GPU Subject model where the store holds the original and
    it is on record as falling back to the CPU on this card, with the
    reason on the sheet; an offer accepted mid-session is used at once,
    and one declined leaves the original working (§169, 2026-09-24).

v0.1.1

Choose a tag to compare

@github-actions github-actions released this 23 Sep 07:03
  • Fix the macOS package failing at launch with "Library not loaded:
    liblcms2.2.dylib" on any Mac without Homebrew's little-cms2. lcms2 is
    now built into the app, and packaging refuses a Mac build that links
    a library outside the system and the bundle (notes §151).

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 23 Sep 06:09

The first test build of greycard, a raw editor for Linux, macOS and
Windows. It is a pre-release: some things are missing and some are
wrong, and the reason it is out is to hear about both. Read the
guide for testers
before you start; it covers installing on each system, the keys, and
how to report a problem.

What you can do with it

  • Open a folder of raws and move through it in a filmstrip, a grid or
    a single frame, with the camera's own JPEG shown at once and the
    develop replacing it a moment later.
  • Cull from the camera's JPEG without developing anything: ratings,
    picks and rejects, color labels, a filter over all of them, compare
    two or four frames, and move the rejects into a folder of their own.
  • Develop: exposure and tone, a parametric and a point curve, a color
    mixer, grading, black and white, texture, clarity and dehaze, grain
    and vignette; white balance and camera profiles; lens corrections
    from lensfun; demosaicing, highlight reconstruction, chromatic
    aberration correction, deconvolution sharpening and two denoisers.
  • Mask with gradients, radial shapes and a brush, or let a learned
    model find the subject or an object; heal, clone and fill.
  • Crop, straighten and correct perspective.
  • Use presets, including Lightroom's, and 3D LUT looks.
  • Export JPEG or TIFF in sRGB, Display P3 or Rec.2020, with the
    profile and the EXIF embedded.
  • Keep every edit in a .gcd file beside its raw, and share ratings,
    labels and keywords with Lightroom and darktable through XMP.

Known rough edges

  • The default look and the Highlights, Whites and Shadows sliders are
    close to Lightroom's but not there yet; that is the next release.
    Tell us when a frame looks too dark, too flat or wrong in a way you
    can name.
  • Fujifilm X-Trans bodies and Nikon's High Efficiency raws do not open.
  • On Windows and macOS the display is taken as sRGB unless you choose
    your monitor's ICC profile by hand.
  • On a Mac, a double-click in the Finder launches greycard without
    opening the file. The app is not signed, so each system warns once
    before it first opens; the guide says what to click.
  • The best denoisers take tens of seconds on a large frame.

Report a problem from the button at the foot of the left panel: it
fills in the version, your system and your GPU, and shows you the log
to attach.