DarkTable
darktable.orgWindows, 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.orgRepository
- LicenseGPL-3.0
- Created21 Mar 12
- Primary languageC
- Size1,325,652 KB
- Stars13,018
- Forks1,416
- Watchers13,018
Top Contributors
@TurboGit (9667)
@hanatos (3946)
@houz (2480)
@LebedevRI (2430)
@jenshannoschwalm (2033)
@hean01 (2030)
@upegelow (1937)
@victoryforce (1922)
@AlicVB (1386)
@ralfbrown (1373)
@dterrahe (1076)
@pmjdebruijn (1047)
@aurelienpierre (926)
@pedrocr (863)
@dtorop (711)
@boucman (701)
@jpellegrini (594)
@phweyland (558)
@MRIG (488)
@kmilos (439)
@johnny-bit (430)
@zisoft (381)
@parafin (380)
@elstoc (367)
@andriiryzhkov (337)
@jcsogo (318)
@Nilvus (307)
@rawfiner (305)
@EdgarLux (294)
@MStraeten (284)
@lebmich (268)
@bieber (266)
@wpferguson (242)
@Arecsu (219)
@edgomez (215)
@cryptomilk (207)
@levitte (196)
@Mark-64 (191)
@kofa73 (190)
@rabauke (181)
@schenlap (169)
@edgardoh (155)
@peterbud (143)
@flannelhead (105)
@dumbbell (94)
@oliviertoulouse (89)
@da-phil (80)
@prokoudine (76)
@shinoryo1216 (76)
@masterpiga (72)
@bruceg (67)
@christte (63)
@HSUfineprint (63)
@timur-davletshin (61)
@matjazjeran (61)
@bartokk (58)
@tatica (56)
@moy (55)
@mazhe (53)
@josepvm (49)
@mlq (48)
@matt-maguire (48)
@pryds (46)
@bluesceada (44)
@jandren (44)
@jcrc (42)
@vertama (41)
@jakubfi (41)
@rtmongold (40)
@dependabot[bot] (39)
@cytrinox (39)
@GrahamByrnes (34)
@codingdave (34)
@mpaglia0 (34)
@serkan-maker (33)
@hlecleme (32)
@piratenpanda (29)
@lhietal (29)
@HansBull (29)
@BathoryPeter (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)
@oexler (18)
@wgoetz (18)
@MarcusGama (17)
@pestasoft (17)
@cthbleachbit (17)
Recent Commits
Hanno Schwalm(02 Sept 26)
Some more minor OpenCL kernel improvements 1. Use the Areadpixel/single() variants where it's safe for a subtle perf gain. 2. Some dtcl_log() usage for better performance when using the OpenCL fast mode.
Pascal Obry(03 Sept 26)
Merge pull request #22139 from andriiryzhkov/thread_scope_probe Fix ONNX Runtime probe crash on Windows
Victor Forsiuk(03 Sept 26)
Update README for 5.6.1 release
Andrii Ryzhkov(03 Sept 26)
RELEASE_NOTES.md: ONNX Runtime probe crash on Windows
Andrii Ryzhkov(03 Sept 26)
Thread-scope the ORT probe and release resources on recovery
Matjaž Jeran(02 Sept 26)
Update Slovenian translation.
Hanno Schwalm(02 Sept 26)
Ensure module->gui_lock mutex initialize When re-creating the list of deleted iop modules in _create_deleted_modules() we must ensure the module's gui_lock mutex is correctly initialized.
Victor Forsiuk(02 Sept 26)
Bump libheif version to the latest for AppImage build
Pascal Obry(02 Sept 26)
Merge pull request #22103 from jenshannoschwalm/fix_22069 Invalidate watermark cachelines for tag/metadata change
Hanno Schwalm(02 Sept 26)
Invalidate watermark cachelines for tag/metadata change As reported a metadata or tag change leaves an invalid cacheline, the suggested fix is good and the performance penalty is neglectable as those changes are rare and the module has a high iop_order. Also ensure recalculation of lighttable mipmaps. While being in lighttable view we don't have the iop_order ready so we simply clear the darkroom pipe caches for the next run. Fixes #22069
Hanno Schwalm(02 Sept 26)
Introduce `dt_history_hash_unset_mipmap()` Sets the image mipmap hash to zero, used to invalidate that mipmap.
Pascal Obry(02 Sept 26)
RELEASE_NOTES.md: ColorEQ interactive editing mode.
Tom Poczos(01 Sept 26)
preview_data: guard the pipe-nodes walk in dt_preview_data_is_fresh with busy_mutex dt_preview_data_is_fresh() (introduced in 8a26f35f92 / #21397, the shared preview-data service for interactive editing) walks dev->preview_pipe->nodes and hashes the matching piece from the GUI thread while holding only the module's own gui_lock. pipe->nodes is actually protected by pipe->busy_mutex: dt_dev_pixelpipe_cleanup_nodes() frees every piece under that lock whenever a history change rebuilds the pipe topology (DT_DEV_PIPE_REMOVE in dt_dev_pixelpipe_change), and that can run concurrently on the pipe-processing thread. A caller that walks pipe->nodes off the GUI thread without busy_mutex can therefore dereference a piece that gets freed out from under it -- reproduced as a segfault dereferencing a freed piece->module in _dev_pixelpipe_cache_basichash(), from a module's preview-pipe-finished GUI callback calling dt_preview_data_is_fresh(). colorequal.c's own interactive hue-editing mode (also from #21397) calls dt_preview_data_is_fresh() from mouse-hover/scroll handlers and is exposed to the same race in principle, just from a narrower window that makes it harder to trigger in practice. Take pipe->busy_mutex around the walk. It must be a trylock, not a blocking lock: a module's process() runs under busy_mutex for the whole pipe run (dt_dev_pixelpipe_process) and can itself call dt_preview_data_store() (colorequal.c does, twice), which takes this same module's gui_lock -- the opposite order -- so a blocking lock here would AB-BA deadlock against it. A pipe that's currently busy can't have fresh data for us anyway, so treating "busy" as "not fresh" costs nothing. Co-Authored-By: Claude Sonnet 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01WpGKm49b4w1L51YETXyGpU
Arecsu(02 Sept 26)
gui: refresh resize indicators after child motion
Arecsu(02 Sept 26)
gui: prevent resize handles from starting graph drags Resizable drawing areas share their widget with the resize wrapper. A press on the resize handle could therefore start the graph gesture as well and change interactive graph parameters while resizing.\n\nRun the resize click and motion controllers in the capture phase. Handle presses are claimed before graph gestures, while presses outside the handle are denied so normal graph interaction remains available.\n\nFixes #22106
Andrii Ryzhkov(01 Sept 26)
RFC: add AGENTS.md (#21924) * Add AGENTS.md with conventions for AI coding agents AI-assisted contributions arrive with a recurring set of problems the existing docs do not speak to: commit series where only the final commit compiles, which leaves git bisect useless, and patches written by inferring an API instead of reading the page that documents it. The conventions are not new. They are collected from the Developer's guide, dev-doc/ and the existing history into the file name that most coding assistants read by default. Two wiki corrections are folded in: .clang-format and tools/beautify_style.sh no longer exist, having been removed in 46b054cf15 and b734b014cf. Related: #21881 * Add CLAUDE.md importing AGENTS.md Claude Code reads CLAUDE.md and does not pick up AGENTS.md on its own. The `@AGENTS.md` import keeps the conventions in one file rather than duplicating them, and a one-line pointer works where a symlink would not, such as checkouts with core.symlinks disabled. * AGENTS.md: require a release notes entry with each PR Maintainers now hold a PR until RELEASE_NOTES.md carries an entry for it. Record which changes qualify and which do not, so an agent settles the question while writing the PR rather than at review time. * Support personal agent instructions in AGENTS.local.md Per-project personal instructions have no cross-platform home. Agents offer a global user layer and a committed project layer, but nothing scoped to a single checkout, so carrying the same personal rules across several agents means one file per agent, each excluded by hand. AGENTS.md now points at an optional AGENTS.local.md, written as prose rather than an import directive so that agents which do not expand `@` still act on it, and .gitignore carries the file so nobody has to edit their own exclude list.
Pascal Obry(01 Sept 26)
src/tests/integration: Update sub-module. Update expected output after the border precision fixes.
Pascal Obry(01 Sept 26)
Merge pull request #22108 from masterpiga/borders_ui borders: disable frame line controls when border geometry prevents it
Daniele Pighin(01 Sept 26)
borders: fix asymmetric frame line centering and rounding precision Frame line boundary coordinates previously subtracted 1 to represent inclusive pixel indices, but were assigned directly to half-open interval endpoints (fl_right, border_right, fl_bot, border_bot). This caused the inner border on the right and bottom sides to be 1 pixel narrower and the outer border 1 pixel wider, noticeably shifting the frame line off-center at smaller border sizes and downscaled preview resolutions. Define the bottom-right frame coordinates as exclusive upper bounds, matching CPU slice lengths and OpenCL bounding box expectations, and use roundf() on fractional offset and size products.
Daniele Pighin(01 Sept 26)
borders: disable frame line controls when border geometry prevents it The frame line width is proportional to the minimum border width across all four sides. When border size is 0 or when horizontal/vertical offsets are set to extreme values (0.0 or 1.0), the minimum border width collapses to 0, making the frame line invisible. Disable frame line width, offset, and color controls when geometry prevents the frame line from rendering, and update their tooltips to explain the required adjustment.
Pascal Obry(01 Sept 26)
RELEASE_NOTES.md: clean-up the changed dependencies.
Mario Zimmermann(01 Sept 26)
remove mention of Intel Macs from README (#22114) * remove mention of Intel Macs from README * update README for the nightly builds
Victor Forsiuk(31 Aug 26)
Add protection against memory allocation failure
Pascal Obry(01 Sept 26)
Merge pull request #22116 from andriiryzhkov/fix_22052 Fix path feather being lost on scroll resize
Daniele Pighin(01 Sept 26)
borders: fix memory corruption on non-positive coordinate deltas Commit 257e632e67 widened the loop index variable in set_pixels() and copy_pixels() from int to size_t. In dt_iop_copy_image_with_border(), these functions are called with slice lengths computed from coordinate differences such as fl_right - image_right. Under boundary conditions (e.g. scaled thumbnail generation or tiling), the difference can be negative. With a signed int counter, 0 < npixels evaluated to false and safely skipped the loop. With size_t, signed-to-unsigned conversion caused the loop to iterate 18446744073709551615 times, corrupting heap memory and causing a SIGSEGV. Revert the loop variables back to int, and clamp image_right and image_bottom to roi_out bounds in dt_iop_setup_binfo.
Andrii Ryzhkov(01 Sept 26)
RELEASE_NOTES.md: path feather lost on scroll resize
Andrii Ryzhkov(01 Sept 26)
Keep a path's feather when the shape is resized Scroll-resizing a path morphs a cached baseline of its nodes and swaps the result in whole, borders included. The feather branch of the same scroll handler edits every node's border in place without dropping that cache, so the next resize restored the borders the baseline was captured with and the feather collapsed. Invalidate the resize state there, as _path_modify_property already does for DT_MASKS_PROPERTY_FEATHER. Reproduced by resizing a path with the wheel, raising the feather with shift+scroll, then resizing again; circles and ellipses are unaffected as they have no baseline to go stale. Fixes #22052
Yannic Meyer(01 Sept 26)
fix module-border-settings not saving
Hanno Schwalm(01 Sept 26)
Improved usability of dump files For debugging we have some cli switches to write intermediate pixelpipe results like CPU vs GPU diffs to files for inspection. For long those have been written in pfm format, the main reason to use that format was file writing speed. We now use ppm/pgm files (16-bit per color), writing is even somewhat faster, file size is 50% of what we had and these file types are more widely supported. The precision loss is not relevant.
Pascal Obry(01 Sept 26)
Merge pull request #22105 from victoryforce/fix-usermanual-url-table Fix errors in the online help URLs table
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 Address65.108.31.59
- Hostnametron.pixls.us
- LocationHelsinki,Uusimaa,Finland,EU
- ISPHetzner Online GmbH
- ASNAS24940
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.
View on DockerHub
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:latestCompose 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-stoppedEnvironment Variables
- Var NameDefault
- PUID1000
- PGID1000
- TZEtc/UTC
Port List
- 3000:3000/tcp
- 3001:3001/tcp
Volume Mounting
- Container PathHost Bind
- /config/srv/lsio/darktable/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 SourceA free web-based image editor, with a modern UI. Also offers premium/paid features, such as AI-powered generation, touchup and editing
Not Open SourceA powerful raw photo processing system and editor, for non-destructive editing of raw digital photos
About the Data: DarkTable
Change History
- Added
Edit DarkTable Data
You can edit DarkTable's entry in this section of awesome-privacy.yml by submitting a PR to our GitHub repo.
Note that some of the information shown above has been aggregated from external
sources, a list of these can be found data documentation.
Origin Data
Modify Data
API
You can access DarkTable's data programmatically via our API. Simply make a GET request to:
https://api.awesome-privacy.xyz/v1/services/darktableThe 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!
