DarkTable
darktable.org Windows, Mac OS, LinuxA photography workflow application (similar to Adbobe Lightroom) Includes a non-destructive raw developer for raw images and managing digital negatives.
- Homepage: darktable.org
- GitHub: github.com/darktable-org/darktable
- Web info: web-check.xyz/check/darktable.org
DarkTable Source Code
Author
Description
darktable is an open source photography workflow application and raw developer
Homepage
https://www.darktable.orgLicense
GPL-3.0
Created
21 Mar 12
Last Updated
29 Jul 26
Latest version
Primary Language
C
Size
1,379,496 KB
Stars
12,818
Forks
1,382
Watchers
12,818
Language Usage
Star History
Top Contributors
-
@TurboGit (9585)
-
@hanatos (3946)
-
@houz (2480)
-
@LebedevRI (2430)
-
@hean01 (2030)
-
@jenshannoschwalm (1994)
-
@upegelow (1937)
-
@victoryforce (1873)
-
@AlicVB (1386)
-
@ralfbrown (1373)
-
@dterrahe (1075)
-
@pmjdebruijn (1047)
-
@aurelienpierre (926)
-
@pedrocr (863)
-
@dtorop (711)
-
@boucman (701)
-
@jpellegrini (588)
-
@phweyland (558)
-
@MRIG (488)
-
@kmilos (439)
-
@johnny-bit (430)
-
@parafin (380)
-
@zisoft (367)
-
@elstoc (367)
-
@jcsogo (318)
-
@andriiryzhkov (311)
-
@Nilvus (307)
-
@rawfiner (305)
-
@EdgarLux (291)
-
@MStraeten (281)
-
@lebmich (268)
-
@bieber (266)
-
@wpferguson (241)
-
@edgomez (215)
-
@cryptomilk (207)
-
@levitte (196)
-
@Mark-64 (191)
-
@kofa73 (184)
-
@rabauke (181)
-
@schenlap (169)
-
@edgardoh (155)
-
@peterbud (143)
-
@flannelhead (105)
-
@dumbbell (94)
-
@oliviertoulouse (89)
-
@prokoudine (76)
-
@shinoryo1216 (72)
-
@bruceg (67)
-
@christte (63)
-
@HSUfineprint (63)
-
@timur-davletshin (61)
-
@matjazjeran (60)
-
@bartokk (58)
-
@da-phil (58)
-
@tatica (56)
-
@moy (55)
-
@masterpiga (54)
-
@mazhe (53)
-
@josepvm (49)
-
@mlq (48)
-
@matt-maguire (48)
-
@pryds (46)
-
@bluesceada (44)
-
@jandren (43)
-
@jcrc (42)
-
@vertama (41)
-
@jakubfi (41)
-
@cytrinox (39)
-
@dependabot[bot] (36)
-
@mpaglia0 (34)
-
@codingdave (34)
-
@GrahamByrnes (34)
-
@serkan-maker (33)
-
@rtmongold (33)
-
@hlecleme (32)
-
@BathoryPeter (29)
-
@HansBull (29)
-
@lhietal (29)
-
@sbraitbart (28)
-
@bgodole (26)
-
@guitorri (25)
-
@franz (25)
-
@mepi0011 (25)
-
@richardwonka (24)
-
@sgotti (24)
-
@Solarer (23)
-
@esq4 (22)
-
@mmardegan (22)
-
@tony2001 (21)
-
@leclercj (21)
-
@sams96 (21)
-
@paolodepetrillo (21)
-
@VictorLamoine (19)
-
@piratenpanda (19)
-
@oexler (18)
-
@wgoetz (18)
-
@MarcusGama (17)
-
@pestasoft (17)
-
@cthbleachbit (17)
-
@jinxos (16)
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
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 -
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
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.
linuxserver/darktable:latestRun 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
-
A free, open source, cross-platform image editor. GIMP is a powerful tool for photo retouching, image composition, and image authoring. It is highly customizable, and supports a wide range of file formats.
-
A free, open source, professional vector graphics editor. It is a powerful tool for creating illustrations, icons, logos, diagrams, maps, and web graphics.
-
Digital painting application. Free and open source (backed by KDE), with cross-platform support, Krita is popular among both professional and amateur artists due to it's comprehensive feature set, and intuitive UI
-
A more advanced take on Microsoft Paint. Suitable for basic image editing, with support for basic layers, unlimited undo/redo, and extendable via plugins
-
A free online image editor, for both raster and vector graphics, with a very wide range of supported formats
Not Open Source -
A free web-based image editor, with a modern UI. Also offers premium/paid features, such as AI-powered generation, touchup and editing
Not Open Source -
A powerful raw photo processing system and editor, for non-destructive editing of raw digital photos
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!