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

Repository

  • LicenseGPL-3.0
  • Created21 Mar 12
  • Primary languageC
  • Size1,325,652 KB
  • Stars13,018
  • Forks1,416
  • Watchers13,018

Language Usage

Language Usage

Project Health

  • Last commit5 days ago
  • Open issues686
  • Latest releasev5.4.0-ai

Top Contributors

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

5.7/10

Repo Security Summary

Updated 24 Aug 26

  • Dangerous-Workflow10/10
  • Code-Review9/10
  • Maintained10/10
  • Token-Permissions0/10
  • CII-Best-Practices2/10
  • Binary-Artifacts10/10
  • Security-Policy0/10
  • License10/10
  • Packaging10/10
  • Fuzzing0/10
  • Branch-ProtectionN/A
  • Signed-Releases6/10
  • Pinned-Dependencies0/10
  • SAST0/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 Address65.108.31.59
  • Hostnametron.pixls.us
  • LocationHelsinki,Uusimaa,Finland,EU
  • ISPHetzner Online GmbH
  • ASNAS24940

Associated Countries

  • FRFR
  • FIFI

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

View on DockerHub

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 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

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/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!