Letture sulla teoria del colore
Quali risorse si possono trovare online e nelle biblioteche per aiutare a comprendere un po’ di teoria del colore?
Quali risorse si possono trovare online e nelle biblioteche per aiutare a comprendere un po’ di teoria del colore?
Questa pagina affronta la maggior parte degli errori e degli equivoci su Ansel che si possono trovare online.
Questo articolo documenta la matematica attualmente implementata nel modulo diffuse or sharpen di Ansel, così come si trova in src/iop/diffuse.c, src/common/bspline.h, data/kernels/diffuse.cl e data/kernels/bspline.cl. Non è una guida all’uso. È una ricostruzione del modello numerico a partire dal codice sorgente, con le affermazioni scientifiche ricondotte ai riferimenti citati nei commenti del codice.1
Questo articolo presenta la matematica della ricostruzione delle alte luci di Ansel: il progetto originale
dei guided laplacians del 2021, le cui idee generali erano state solo abbozzate sul forum
pixls.us,1 e la trasposizione armonica, il metodo che l’ha sostituito dopo che uno
studio con ground truth ha rivelato un bug nel recupero della magnitudine.2 È organizzato in modo che ogni lettore trovi la
propria sezione: i risultati e la sezione Intuizione e contesto di ogni metodo non richiedono
matematica; gli sviluppatori troveranno le sottosezioni Implementazione e ottimizzazioni e lo
studio sulle prestazioni; i
risultati teorici e l'
appendice del cimitero sono scritti per essere
riutilizzabili al di fuori della fotografia; e
come questo lavoro è stato effettivamente svolto documenta il protocollo di ricerca
uomo–macchina che vi sta dietro.
Linux è ancora ampiamente in ritardo rispetto a MacOS e persino a Windows quando si tratta di garantire la coerenza dei colori visualizzati sul monitor. L’adozione forzata su larga scala del server grafico Wayland nella maggior parte delle distribuzioni Linux ha danneggiato ulteriormente questa situazione, poiché la gestione del colore è stata a lungo rifiutata dagli sviluppatori di Wayland. La specifica per un CMS in Wayland è stata finalmente redatta nel 2020 e il codice è stato integrato a monte in Wayland nel 2025, da collaboratori esterni, e dopo una lunga battaglia degli sviluppatori dei precedenti software CMS contro gli sviluppatori storici di Wayland.1 Da allora, lo stato del supporto CMS è molto altalenante tra i vari ambienti desktop e le varie distribuzioni. Eppure, i risultati preliminari della telemetria di Ansel mostrano un’adozione di Wayland del 67 % tra gli utenti di Ansel.
Jiyoné (Guillaume Stutin) ha assunto la manutenzione di Ansel da ottobre 2025. L’obiettivo attuale è trasformare Ansel in una cooperativa in cui gli utenti possano diventare membri e controllare democraticamente gli orientamenti e le priorità del progetto, ma anche garantire una retribuzione equa e un ambiente di lavoro sicuro a chi dedica la propria forza lavoro al progetto. Ho esposto la descrizione del problema e la soluzione proposta nella pagina democrazia.
Compilare il software nativamente sul computer permetteva di migliorare i tempi di esecuzione su CPU di circa il 30 %, rispetto ai pacchetti precompilati. Il motivo è che il compilatore effettua ottimizzazioni specifiche per l’hardware di destinazione su cui viene compilato, mentre i pacchetti precompilati devono restare generici e attivare ottimizzazioni più conservative per garantire un ampio supporto. Nota che i kernel OpenCL vengono comunque compilati per la tua GPU specifica tramite il tuo driver OpenCL, quindi lì la storia è diversa.
Nel suo libro, La società tecnologica (1954), Jacques Ellul presenta la differenza tra l’epoca pre- e post-rivoluzione industriale nel modo seguente:
L’era preindustriale è il regno dello strumento e dell’artigianato. La proprietà principale degli strumenti è di essere generici, versatili e adattabili. Spetta all’artigiano sviluppare le proprie abilità per far seguire agli strumenti la sua intenzione, così che la mano compensi i limiti dello strumento. Questo concetto è ancora ben noto ai musicisti di oggi: bisogna esercitarsi, imparare, provare, fallire, riprovare… non ci sono scorciatoie. Ellul sottolinea l’idea di parsimonia che accompagna gli strumenti: le risorse sono limitate, quindi il tuo insieme di strumenti è praticamente definito da ciò che puoi permetterti, trasportare, padroneggiare e costruire localmente. Le tendenze cambiano lentamente e sono locali, perché usano risorse locali e si adattano a bisogni locali, e gli strumenti seguono lo stesso schema. Gli strumenti sono cimeli tramandati dal maestro all’apprendista, dal genitore al figlio. Non diventano incompatibili né obsoleti.
Tra gennaio 2022 e marzo 2026, Ansel ha registrato 297 commit non di merge riguardanti la griglia del tavolo luminoso, le sue miniature e la loro pipeline di rendering e caching. Ho cercato di arrangiarmi con il trasandato codice del tavolo luminoso di Darktable, solo sgrassato, il più a lungo possibile, ma purtroppo era puro debito tecnico ed era penosamente lento.
In effetti, Darktable «gestisce» la scadente qualità del suo tavolo luminoso riducendone le dimensioni: i pannelli laterali di sinistra e di destra occupano molta superficie di visualizzazione, il che lascia ancora meno area da ridisegnare per il tavolo luminoso. Poiché Ansel ha rimosso il pannello laterale di destra, fondendone il contenuto con quello di sinistra e con il menu globale, c’era più superficie da disegnare, più lavoro per la CPU da svolgere, e il pessimo design del tavolo luminoso è diventato tanto più dannoso.
Da quando ho iniziato a usare Darktable, intorno al 2012, sono sempre rimasto sorpreso dalla poca RAM che utilizzava. La gente pensa che sia una buona cosa che un’applicazione usi la memoria con parsimonia, e questo è senz’altro vero se parliamo del tuo ambiente desktop. Ma parlando di un software di produzione che esegue un pesante rendering dei pixel su immagini da 12 a 54 Mpixel, questo significa che gli stessi calcoli pesanti vengono ripetuti più e più volte invece di essere salvati per essere riutilizzati in seguito. È a questo che serve una cache: evitare calcoli costosi. E dovrebbe usare tutta la RAM disponibile a tale scopo, perché calcolare significa sprecare energia, e questo ha un impatto concreto se stai lavorando a batteria. Inoltre, hai pagato per quella RAM e usarla non ti scarica la batteria. La CPU/GPU d’altro canto…
Memorie di un tizio che ha passato troppo tempo a ripulire la merda degli altri e a pagare per le loro cattive decisioni, episodio #troppi.
Copiare/incollare cronologie e stili sono funzioni fondamentali in Ansel, e quella che gli fa meritare (o meno) il suo titolo di «app per il flusso di lavoro». Ma è anche tra le più difficili da realizzare correttamente a livello interno. Gli utenti vedono un elenco di modifiche, ma sotto il cofano quelle modifiche dipendono dall’ordine della pipeline, dalle istanze dei moduli e dalle maschere. Se due immagini hanno topologie di pipeline diverse, copiare le modifiche in modo ingenuo può produrre incoerenze.
Nel mio articolo fondativo, Darktable: schiantarsi contro il muro al rallentatore, ho presentato il disastro che era il nuovo «Grande turducken MIDI». Lo scopo di questo turducken1 era riscrivere il sistema di scorciatoie da tastiera per estenderlo ai dispositivi MIDI.
Ancora oggi sono arrabbiato per questa impresa di distruzione di massa, ecco un riepilogo delle ragioni:
if/switch-case illeggibili annidate su 4 livelli, nel bel mezzo di funzioni da 1000 righe (ho pubblicato esempi di frammenti nel mio articolo),Keypad End,Shift+&, o Shift+" su BÉPO,

Il grafo delle dipendenze di src/gui/accelerators.c (Grande turducken MIDI) prima della riscrittura. Indovina perché lo chiamiamo «spaghetti code »… Questo rende evidente che esiste una dipendenza a doppio senso tra il codice degli acceleratori e il resto del codice della GUI. È un incubo da mantenere.
Dopo aver finalmente collegato l’intero sito web e la documentazione a un flusso di lavoro di traduzione a tenuta stagna (usando po4a sopra Hugo), che per inciso utilizza esattamente lo stesso insieme di strumenti e la stessa logica dell’applicazione Ansel, mi è venuta l’idea di automatizzare le traduzioni vuote, prima a partire dai file di traduzione del software, poi tramite l’API di ChatGPT, che fa un lavoro davvero discreto nel tradurre la sintassi Markdown.
Alain Oguse learned photographic printing with Claudine and Jean-Pierre Sudre in the late 1960’s, and spent his early career in commercial photography. After retiring, he started to investigate how to bring back the photographic (silver halide) grain in digital scans of film negatives, finding the same sharpness and quality he had with near-point light enlargers in the 1970’s.
The point light printing technique uses a very tiny source of light that gives a very precise and detailed reproduction of B&W film negatives, as opposed to diffuse lighting. It is very demanding, as its unforgiving sharpness and contrast do not hide scratches and dust on the film surface. Prints done this way would often need manual (painted) corrections on paper, inducing more work and more costs. By the end of the 1970’s, it was usually replaced by diffuse light… better at hiding manipulation mistakes and at maximizing print labs profits.
Già nel dicembre 2019, chiesi che qualcuno si occupasse di fornire pacchetti AppImage per Darktable. Il vantaggio evidente sarebbe stato quello di consentire test anticipati, prima della versione, da parte di persone che non sono in grado di compilare da sole il codice sorgente, così da si spera fornire un riscontro anticipato e aiutare a fare il debug prima di rilasciare. Questo non è mai stato una priorità, il che significa che andava bene avere una corsa a correggere i bug sia prima sia dopo la pubblicazione.
We all know what “white” is. We can picture a white sheet of paper. We know it is white because we learned it. But if you put your paper sheet under a summer sun, or a cloudy sky, or at home with those warm living-room bulbs, that white will change color. It might disturb you for the first few seconds, then you will just forget about it: your brain will adapt. But adapt (to) what ?
This will apply to upstream Darktable as to Ansel since they share most of their color pipeline. The following procedure will help you troubleshoot your color issues, whether it is inconsistent appearance between export vs. preview, or between screen vs. print, or between 2 apps.
The inherent problem of color is it exists only as a perception, and that perception is highly contextual and fluid. If I take any color patch and display it over a white, middle-grey or black background, it will not appear the same even though a colorimeter would confirm it’s the exact same color. I have built a little web animation to showcase this effect, displaying sRGB gamut slices at constant hue, over user-defined background lightness : the sRGB book of color .
…
Ansel eredita da Darktable la sua struttura portante di database: le cronologie di modifica non distruttive vengono salvate per ogni immagine in un database SQLite, insieme ai metadati e ad altri dati definiti dall’utente. Rendere il database consapevole di nuove immagini avviene tramite l’«importazione» delle immagini da un disco o da una scheda di memoria. È qui che entra in gioco lo strumento di importazione.
Purtroppo, l’importatore di Darktable è un’altra di quelle cose massacrate intorno al 2020 e trasformate in qualcosa di profondamente sconcertante, essendo un file browser che non somiglia a nessun file browser precedentemente noto, e che riesce a mancare di funzioni basilari (come Ctrl+F o l’anteprima EXIF) pur restando appesantito da funzioni inutili (vedi sotto). È qui che perdiamo molti futuri utenti, ed è solo lo step 0 del flusso di lavoro. Che magnifica vetrina di ciò che una «app per il flusso di lavoro» sa fare!
mindmap
root((COLOR))
color appearance model
uniform color space
chromaticity
U, V
a, b
lightness
L
delta E
chromatic adaptation transform
illuminant
color reproduction index
color temperature
surround lighting
background lightness
dimensions
Munsell
hue
chroma
value
natural color system
blackness
saturation
hue
CIE
lightness
brightness
saturation
chroma
colorfulness
hue
measure
colorimetry
tristimulus
sensor
Luther-Ives criterion
metamerism
dynamic range
noise
mosaicing
Bayer
XTrans
zipper artifacts
spaces
rgb(RGB)
HSV
HSL
LMS
Yrg
XYZ
Yxy
Yuv
Ych
CYM
CYMK
primaries
cone cells
LED
ITU BT.Rec 709
ITU BT.Rec 2020
DCI P3
inks
spectrometry
light spectrum
wavelengths
energy
photometry
luminance
correction
profile
matrix
lookup table
transfert function
color grading
ASC CDL
channel mixer
curves
white balance
Ho pensato, per moltissimo tempo, che ci fosse qualche meccanismo di kill-switch sulla pipeline dei pixel. Il caso d’uso è il seguente :
In quel caso, vuoi terminare tutte le pipeline attive perché il loro output non verrà usato, e iniziare immediatamente a ricalcolare tutto con i nuovi parametri. Solo che Darktable non fa questo, lascia che la pipeline finisca prima di riavviarla e, guardando i commenti nel codice sorgente, sembra essere una regressione piuttosto recente e non il comportamento originariamente previsto.
Darktable ha una propria libreria di widget per la GUI, per gli slider e le combobox (ovvero i menu a tendina o caselle di selezione), chiamata Bauhaus (nel codice sorgente si trova in src/bauhaus/bauhaus.c). Sebbene usino Gtk come backend, i Bauhaus sono oggetti personalizzati. E come molte cose in Darktable, personalizzato equivale a marcio.
Nel 2022 ho notato ridisegni parassiti e latenze usandoli, che portavano a un’esperienza utente frustrante: il ridisegno del widget sembrava attendere il completamento dei ricalcoli della pipeline, il che significava che gli utenti non erano davvero sicuri che la loro modifica di valore fosse stata registrata, cosa che poteva indurli a riprovare, avviando un altro ciclo di costoso ricalcolo e di fatto congelando il loro computer per diversi minuti molto frustranti di inutili ricalcoli intermedi della pipeline.
Rawspeed (la libreria che fornisce i decodificatori per i file raw delle fotocamere) ha deprecato il supporto per GCC < 12. Di conseguenza, non posso più compilare l’AppImage su Ubuntu 20.04 (usando i runner di Github), ma devo compilarla su 22.04.
Ciò significa che qualsiasi distribuzione Linux con libc più vecchia della 2.35 non sarà in grado di avviare le nuove AppImage a partire da oggi. Questo non dovrebbe interessare la maggior parte degli utenti che usano distribuzioni aggiornate nel 2021 o più di recente. Ubuntu 20.04 e altre distribuzioni LTS/stabili datate (Debian stable) potrebbero essere interessate.
The scene-referred workflow promises an editing independent from the output medium. It will typically produce an image encoded in sRGB colorspace with 8 bits, that is code values between 0 and 255. To simplify, we will consider here only the 8 bits case. Concepts are the same in 16 bits, only the coding range goes from 0 to 65535, which is anecdotal.
Unfortunately, nothing guarantees that the printer is able to use the whole encoding range. The minimum density (Dmin in analog) is reached with naked paper, and matches an RGB code value 255. The maximum density (Dmax in analog) is reached with 100% ink coverage.1 Problem is, if Dmin matches an RGB code value of 255, Dmax never matches an RGB value of 0.
Se vieni da Darktable, potresti essere abituato a questo nella camera oscura:

mentre Ansel ti offre questo:

Non è un caso, ed è ora di spiegare perché, e perché questo non verrà esteso con opzioni di personalizzazione.
Ho scoperto per caso che lo script di build per Linux usava una build «package», il che significa che le ottimizzazioni della CPU sono limitate a quelle generiche per produrre binari portabili installabili su qualsiasi piattaforma x86-64. Con «usava» intendo che la build package non era esplicitamente disabilitata, quindi era abilitata per impostazione predefinita.
Comunque, ora è disabilitata per impostazione predefinita, dato che i pacchetti veri e propri (.exe e .appimage) non vengono compilati tramite quello script, che è pensato principalmente per aiutare gli utenti finali. Per ripristinare il comportamento precedente, dovresti eseguire:
Il 2022 è stato talmente pessimo in termini di email spazzatura e rumore che ho avviato la Virtual Secretary , un framework Python per scrivere filtri email intelligenti incrociando informazioni provenienti da diverse fonti per indovinare cosa siano le email in arrivo e se siano importanti/urgenti o meno. Quando parlo di email spazzatura, intendo anche le notifiche di Github, i ping su pixls.us (grazie al cielo ho chiuso il mio account su quello stupido forum), YouTube ed email dirette da persone che sperano di ottenere un po’ di aiuto in privato.
Here is how to get started with Ansel editing, going through only the most basic steps that should serve you well most of the time.
The video was recorded on Darktable 3, but the same modules and principles apply to Ansel.
This article will demonstrate how to perform monochrome toning on digital images in Ansel, to emulate the color rendition of cyanotypes, platinotypes, sepia and split-toning developments.
Set the global exposure and filmic scene white and scene black, as in any other editing. See basic editing steps. This is our base image, by Glenn Butcher :

Sono passati all’incirca 3 mesi da quando ho ribattezzato «R&Darktable» (che nessuno sembrava capire correttamente) in «Ansel», poi ho acquistato il nome a dominio e creato il sito web da zero con Hugo (non avevo mai programmato in Golang prima, ma si tratta perlopiù di codice di template).
Poi ho impiegato un totale di 70 h per far funzionare le build dei pacchetti nightly per Windows e Linux ai fini della distribuzione continua, qualcosa che Darktable non ha mai fatto bene («puoi compilarlo da solo, non è difficile»), solo per vedere il tracker dei bug esplodere dopo il rilascio (niente di meglio che concatenare lo sprint pre-rilascio con uno post-rilascio per ridurre la propria aspettativa di vita).
Cosa succede quando un gruppo di fotografi amatoriali, trasformatisi in sviluppatori amatoriali, a cui si aggiunge una manciata di sviluppatori back-end che sviluppano librerie per sviluppatori, decide di lavorare senza metodo né struttura su un software professionale destinato agli utenti finali, la cui competenza fondamentale (colorimetria e psicofisica) si colloca da qualche parte tra una laurea triennale in fotografia e una laurea magistrale in scienze applicate, promettendo al contempo di rilasciare 2 versioni all’anno senza gestione di progetto? Il tutto, ovviamente, in un progetto dove i fondatori e la prima generazione di sviluppatori sono passati ad altro e se la sono data a gambe?
In this article, you will learn what the scene-referred workflow is, how Ansel uses it and why it benefits digital image processing at large.
The scene-referred workflow is the backbone of the Ansel’s imaging pipeline. It is a working logic that comes from the cinema industry, because it is the only way to achieve robust, seamless compositing (also known as alpha blending) of layered graphics, upon which movies rely heavily to blend computer-generated special effects into real-life footage. For photographers, it is mostly for high dynamic range (HDR) scenes (backlit subject, sunsets, etc.) that it proves itself useful.
You can also ask Chantal, the AI search engine.
(section) •(summary)