DarkTable

darktable.org
DarkTable

A photography workflow application (similar to Adbobe Lightroom) Includes a non-destructive raw developer for raw images and managing digital negatives.

Open Source

DarkTable Source Code

Author

darktable-org

Description

darktable is an open source photography workflow application and raw developer

Homepage

https://www.darktable.org

License

GPL-3.0

Created

21 Mar 12

Last Updated

29 Jul 26

Latest version

release-5.7.0

Primary Language

C

Size

1,379,496 KB

Stars

12,818

Forks

1,382

Watchers

12,818

Language Usage

Language Usage

Star History

Star History

Top Contributors

Recent Commits

  • Andrii Ryzhkov (27 Jul 26)

    Fix AI model extraction on Windows profiles with non-ASCII paths

  • Andrii Ryzhkov (28 Jul 26)

    Log strerror on AI models/cache directory creation failure

  • Daniele Pighin (27 Jul 26)

    Re-introduce previously reverted raster mask release fix

  • Pascal Obry (27 Jul 26)

    Fix French translation.

  • 94tiger (27 Jul 26)

    Korean translation based on pot file (2026/07/24)

  • Arecsu (14 Jul 26)

    gtk4-prep: pass current state to all GtkStyleContext getters In GTK4, `get_color()`, `get_margin()`, `get_border()`, `get_padding()` drop the state argument entirely. `get()` and `get_property()` keep it but require the current state. - bauhaus.c `_popup_draw()`: add `_popup_get_state_color()` helper that uses `gtk_style_context_set_state()` + save/restore to query per-state CSS colors without passing a non-current state arg. This preserves the exact CSS cascade for `.dt_bauhaus_popup` pseudo-class selectors and makes the GTK4 switch trivial (drop state arg from `get_color()`). - libs/tools/darktable.c: use `gtk_widget_get_state_flags()` instead of `GTK_STATE_FLAG_NORMAL` for the foreground color lookup. - gui/gtk.c: same fix in `_window_set_titlebar_color_callback()`.

  • Arecsu (14 Jul 26)

    gtk4-prep: replace `gtk_main()` family with `GMainLoop` / `GMainContext` `gtk_main()` and related APIs are removed in GTK4. Changes: - `gtk_main()` / `gtk_main_quit()` → `g_main_loop_new()` / `g_main_loop_run()` / `g_main_loop_quit()` - Main event loop in `dt_gui_gtk_run()` stores loop in `dt_gui_gtk_t.main_loop` - Nested loops in standalone dialog functions pass loop via `result_t` - `dt_gui_gtk_quit()` now quits the main loop - `gtk_events_pending()` → `g_main_context_pending(NULL)` - `gtk_main_iteration_do()` → `g_main_context_iteration(NULL, FALSE)` Left `gtk_main_do_event()` / `gdk_event_handler_set()` in global_toolbox.c for the event signals prep item (event controller conversion). Corresponds to the "Stop using gtk_main() and related APIs" section of the GTK4 migration guide.

  • Jeronimo Pellegrini (27 Jul 26)

    Updates to pt_BR

  • Arecsu (26 Jul 26)

    gtk4-prep: update copyright years in previously touched files

  • Seb Hirsch (25 Jul 26)

    lens: keep the Lensfun page usable when nothing is recognised When the camera or lens couldn't be matched in the Lensfun database the module became a dead end: - The camera field cleared itself rather than showing what the file was shot with, so there was no hint of what had been searched for. Fall back to the EXIF maker and model, and say in the tooltip that the body isn't in the database. - _camera_set() was only reached when the stored camera name was non-empty, leaving the field blank in the one case where feedback matters most. Call it unconditionally. - The lens search was skipped entirely unless a camera had been matched, even though FindLenses() without a camera simply widens the search to the whole database -- which is exactly what the lens button already offers. Drop that condition and keep the EXIF lens name on the button. - modflags, target geometry, scale, mode and the TCA override sliders were all greyed out via lensfun_trouble, though none of them need a lens profile: scale and target geometry are pure geometry and tca_override installs its own TCA calibration. Graying them out only made the panel look broken while removing the one workaround available for an uncatalogued lens. The trouble message now points at what can actually be done instead of just asking the user to select a lens manually.

  • Pascal Obry (26 Jul 26)

    Merge pull request #21641 from piratenpanda/refactorCheckboxes fix GTK critical error

  • piratenpanda (26 Jul 26)

    add ellipsize mode to labels, default to END, set MIDDLE for exposure module as before

  • piratenpanda (26 Jul 26)

    fix GTK crital error

  • deekayhd (26 Jul 26)

    add implementation has_preset_label

  • Pascal Obry (26 Jul 26)

    Merge pull request #21636 from piratenpanda/refactorCheckboxes Refactor checkboxes to bauhaus widgets

  • Arecsu (26 Jul 26)

    gtk4-prep: fix smooth scroll direction detection gdk_event_get_scroll_direction() returns FALSE for smooth scrolling events (trackpad, magic mouse), leaving the output parameter unset. The wrapper dt_gdk_event_get_scroll_direction() defaulted to GDK_SCROLL_UP in this case, causing all smooth scrolls to be interpreted as scrolling up — both Ctrl+scroll-up and Ctrl+scroll-down zoomed in. Fix by returning GDK_SCROLL_SMOOTH when the accessor fails. The consuming code (dt_gui_get_scroll_delta, dt_gui_get_scroll_unit_deltas, _event_scroll pan routing, _scroll_proxy_real, navigation zoom) already handles GDK_SCROLL_SMOOTH correctly by reading the actual scroll deltas. Fixes #21622.

  • piratenpanda (26 Jul 26)

    Double pass for filmic's special checkbox

  • piratenpanda (26 Jul 26)

    Refactor checkboxes to bauhaus checkboxes

  • Martin Straeten (26 Jul 26)

    Update de.po to recent pot file

  • Pascal Obry (26 Jul 26)

    Fix wrong HTML tag on French translation.

  • Daniele Pighin (24 Jul 26)

    Updates to mask manager Following the addition of path grow/shrink and path/stroke rotation: - Reset the grow-shrink slider after each cache-invalidating action (resize/feather). - Add an explicit control for rotation. - Automatically select in the editor the last shape selected/added in the canvas. - Prevent the mask manager panel from scrolling (to make the current shape visible in the list view) while sliders are being operated.

  • Pascal Obry (26 Jul 26)

    Merge pull request #21628 from victoryforce/translations-260725 Translations update: en@truecase and Ukrainian

  • Victor Forsiuk (26 Jul 26)

    Ukrainian translation update

  • vertama (26 Jul 26)

    Update Finnish translation

  • Arecsu (14 Jul 26)

    gtk4-prep: replace `gtk_widget_set_app_paintable()` with `dt_transparent_background` CSS class `gtk_widget_set_app_paintable()` is removed in GTK4 with no direct replacement. The migration guide recommends CSS `background: transparent` for widgets that need transparent backgrounds. All 11 call sites across 9 files are custom-drawn widgets that handle their own painting via draw signal handlers. Replace each with the existing `dt_transparent_background` CSS class (`background-color: transparent; border: none`). Corresponds to the "Stop using gtk_widget_set_app_paintable" section of the GTK4 migration guide.

  • Arecsu (14 Jul 26)

    gtk4-prep: replace `GtkWidget.destroy` vfunc with `GObject.dispose` `GtkWidget.destroy` vfunc override is removed in GTK4. The migration guide recommends using `GObject.dispose` instead. Two custom widgets override the destroy vfunc: - `gradientslider.c`: `_gradient_slider_destroy` -> `_gradient_slider_dispose` - `range.c`: `_range_select_destroy` -> `_range_select_dispose` Both now implement `GObjectClass->dispose`, take `GObject *` parameter, and chain to `G_OBJECT_CLASS(parent_class)->dispose(object)`. Corresponds to the "Stop using the GtkWidget.destroy vfunc" section of the GTK4 migration guide.

  • Arecsu (13 Jul 26)

    gtk4-prep: replace direct GdkEvent struct access with accessor functions Replace all direct GdkEvent struct member accesses (`event->type`, `event->button`, `event->x`, `event->y`, `event->state`, `event->keyval`, `event->time`, `event->window`, `event->scroll.direction`, `event->delta_x`/`event->delta_y`, `event->direction`, `event->hardware_keycode`, etc.) with the corresponding `gdk_event_get_*()` accessor functions via thin inline wrappers in `src/common/gdk_event_utils.h`. The wrapper functions (`dt_gdk_event_get_*`) accept `const void*` so any typed event pointer (`GdkEventButton*`, `GdkEventKey*`, etc.) can be passed without an explicit cast. They return the field value directly instead of using out-parameters. This removes ~500 direct struct accesses across 65 files. Remaining direct accesses are limited to: - Synthetic event construction (writing to `gdk_event_new()` events) - Event mutation before forwarding - Fields without GTK3 accessor functions (`configure.width`/`configure.height`, `crossing.mode`/`crossing.detail`, `key.is_modifier`) See https://docs.gtk.org/gtk4/migrating-3to4.html

  • Victor Forsiuk (25 Jul 26)

    en@truecase update

  • EdgarLux (24 Jul 26)

    Update es.po

  • Pascal Obry (24 Jul 26)

    Update French translation.

DarkTable Security

4.9/10

Repo Security Summary

Updated 13 Jul 26

  • Maintained 10/10
  • Code-Review 4/10
  • Packaging N/A
  • Dangerous-Workflow 10/10
  • Token-Permissions 0/10
  • CII-Best-Practices 2/10
  • Binary-Artifacts 10/10
  • Security-Policy 0/10
  • License 10/10
  • Fuzzing 0/10
  • Branch-Protection N/A
  • Pinned-Dependencies 0/10
  • SAST 0/10
  • Signed-Releases 6/10

DarkTable Website

Website

darktable

darktable is an open source photography workflow application and raw developer

Redirects

Does not redirect

Security Checks

All 65 security checks passed

Server Details

  • IP Address 65.108.31.59
  • Hostname tron.pixls.us
  • Location Helsinki, Uusimaa, Finland, EU
  • ISP Hetzner Online GmbH
  • ASN AS24940

Associated Countries

  • FR FR
  • FI FI

Safety Score

Website marked as safe

100%

Blacklist Check

www.darktable.org was found on 0 blacklists

  • AntiSocial Blacklist
  • Artists Against 419
  • Badbitcoin
  • Bambenek Consulting
  • CERT Polska
  • CoinBlockerLists
  • CRDF
  • CryptoScamDB
  • EtherAddressLookup
  • EtherScamDB
  • Fake Website Buster
  • MetaMask EthPhishing
  • NABP Not Recommended Sites
  • OpenPhish
  • PetScams
  • PhishFeed
  • PhishFort
  • Phishing.Database
  • PhishStats
  • PhishTank
  • Phishunt
  • RPiList Not Serious
  • Scam.Directory
  • SecureReload Phishing List
  • Spam404
  • StopGunScams
  • Suspicious Hosting IP
  • ThreatFox
  • ThreatLog
  • TweetFeed
  • URLhaus
  • ViriBack C2 Tracker

Website Preview

Website preview

DarkTable Docker

Container Info

Darktable

[darktable](https://www.darktable.org/) is an open source photography workflow application and raw developer. A virtual lighttable and darkroom for photographers. It manages your digital negatives in a database, lets you view them through a zoomable lighttable and enables you to develop raw images and enhance them.

#Photos linuxserver/darktable:latest

Run Command

docker run -d \
  -p 3000:3000/tcp \
  -p 3001:3001/tcp \
  -e PUID=${PUID} \
  -e PGID=${PGID} \
  -e TZ=${TZ} \
  -v /srv/lsio/darktable/config:/config \
  --restart=unless-stopped \
  linuxserver/darktable:latest

Compose File

version: 3.8
services:
  darktable:
    image: "linuxserver/darktable:latest"
    ports:
      - "3000:3000/tcp"
      - "3001:3001/tcp"
    environment:
      PUID: 1000
      PGID: 1000
      TZ: Etc/UTC
    volumes:
      - "/srv/lsio/darktable/config:/config"
    restart: unless-stopped

Environment Variables

  • Var Name Default
  • PUID 1000
  • PGID 1000
  • TZ Etc/UTC

Port List

  • 3000:3000/tcp
  • 3001:3001/tcp

Volume Mounting

  • /srv/lsio/darktable/config /config

DarkTable Reviews

More Image Editors

About the Data: DarkTable

Change History

  • Added

API

You can access DarkTable's data programmatically via our API. Simply make a GET request to:

https://api.awesome-privacy.xyz/v1/services/darktable

The REST API is free, no-auth and CORS-enabled. To learn more, view the API Docs or read the API Usage Guide.

Share DarkTable

Help your friends compare Image Editors, and pick privacy-respecting software and services.
Share DarkTable and Awesome Privacy with your network!

View Image Editors (8)