Color theory readings
What resources can be found online and in libraries to help understand some color theory ?
What resources can be found online and in libraries to help understand some color theory ?
This page addresses most of the mistakes and misconceptions about Ansel that can be found online.
Ten artykuł dokumentuje matematykę aktualnie zaimplementowaną w module diffuse or sharpen Ansela, w postaci, w jakiej występuje w plikach src/iop/diffuse.c, src/common/bspline.h, data/kernels/diffuse.cl oraz data/kernels/bspline.cl. Nie jest to poradnik użytkowania. To rekonstrukcja modelu numerycznego na podstawie kodu źródłowego, w której twierdzenia naukowe zostały prześledzone aż do odwołań cytowanych w komentarzach kodu.1
This article presents the mathematics of Ansel’s highlight reconstruction : the original 2021
guided laplacians design, whose general ideas had only ever been sketched on the pixls.us
forum,1 and harmonic transposition, the method that replaced it after a ground-truth
study exposed a magnitude-recovery bug.2 It is organized so each reader finds their
section : the results and each method’s Intuition & background need no
mathematics ; developers will find the Implementation & optimizations subsections and the
performance study ; the
theoretical findings and the
graveyard annex are written to be
reusable outside photography ; and
how this work was actually done documents the man–machine
research protocol behind it.
Linux wciąż ogromnie pozostaje w tyle za MacOS-em, a nawet za Windowsem, jeśli chodzi o zapewnienie spójności kolorów wyświetlanych na monitorze. Powszechnie wymuszane przyjęcie serwera graficznego Wayland w większości dystrybucji Linuksa jeszcze bardziej pogorszyło ten stan, ponieważ zarządzanie kolorami było przez długi czas odrzucane przez twórców Waylanda. Specyfikacja CMS w Waylandzie została ostatecznie naszkicowana w 2020 roku, a kod scalono z główną gałęzią Waylanda w 2025 roku, przez zewnętrznych współtwórców, po długiej walce twórców wcześniejszego oprogramowania CMS z historycznymi twórcami Waylanda.1 Od tego czasu stan obsługi CMS jest bardzo niejednoznaczny w różnych środowiskach graficznych i dystrybucjach. A mimo to wstępne wyniki telemetrii Ansela pokazują 67 % przyjęcia Waylanda wśród użytkowników Ansela.
Jiyoné (Guillaume Stutin) przejął opiekę nad Anselem od października 2025. Obecnym celem jest przekształcenie Ansela w spółdzielnię , w której użytkownicy mogą stawać się członkami i demokratycznie kontrolować kierunki i priorytety projektu, a także zagwarantować sprawiedliwe wynagrodzenie oraz bezpieczne środowisko pracy tym, którzy angażują swoją siłę roboczą w projekt. Opisałem problem i proponowane rozwiązanie na stronie demokracja.
W oczekiwaniu na prawdziwą strukturę Guillaume potrzebuje darowizn, aby opłacać swoje rachunki, i możesz wesprzeć go na Liberapay .
Kompilowanie oprogramowania natywnie na komputerze poprawiało czasy działania na CPU o około 30 % w porównaniu z gotowymi pakietami. Powodem jest to, że kompilator dokonuje specyficznych optymalizacji dla docelowego sprzętu, na którym jest kompilowany, podczas gdy gotowe pakiety muszą pozostać uniwersalne i uruchamiają bardziej zachowawcze optymalizacje ze względu na szerokie wsparcie. Zwróć uwagę, że jądra OpenCL i tak są kompilowane dla Twojego konkretnego GPU przy użyciu Twojego sterownika OpenCL, więc tam sytuacja wygląda inaczej.
W swojej książce Społeczeństwo technologiczne (1954) Jacques Ellul przedstawia różnicę między okresem przed- i porewolucji przemysłowej w następujący sposób:
Epoka przedindustrialna to panowanie narzędzia i rzemiosła. Najważniejszą cechą narzędzi jest to, że są ogólne, wszechstronne i łatwe do przystosowania. To rzemieślnik musi rozwijać swoje umiejętności, aby narzędzia podążały za jego intencją, tak by ręka nadrabiała ograniczenia instrumentu. Koncepcja ta jest wciąż dobrze znana dzisiejszym muzykom: musisz ćwiczyć, uczyć się, próbować, ponosić porażki, próbować ponownie… nie ma dróg na skróty. Ellul podkreśla ideę oszczędności, która towarzyszy narzędziom: zasoby są ograniczone, więc Twój zestaw narzędzi jest w zasadzie określony przez to, na co Cię stać, co możesz nosić, opanować i zbudować lokalnie. Trendy zmieniają się powoli i są lokalne, ponieważ wykorzystują lokalne zasoby i dostosowują się do lokalnych potrzeb, a narzędzia podążają za tym samym wzorcem. Narzędzia to dziedzictwo przekazywane od mistrza do ucznia, od rodzica do dziecka. Nie stają się niekompatybilne ani przestarzałe.
Między styczniem 2022 a marcem 2026 do Ansela trafiło 297 commitów (nie licząc merge’y) dotyczących siatki stołu podświetlanego, jej miniatur oraz potoku (pipeline) ich renderowania i buforowania. Tak długo, jak się dało, próbowałem radzić sobie z niechlujnym kodem stołu podświetlanego z Darktable, jedynie odtłuszczonym, ale niestety był to czysty dług techniczny i działał boleśnie wolno.
Rzeczywiście, Darktable „radzi sobie" z kiepską jakością swojego stołu podświetlanego, zmniejszając jego rozmiar: lewy i prawy panel boczny zajmują dużą część powierzchni wyświetlania, przez co stołowi podświetlanemu zostaje jeszcze mniej obszaru do przemalowania. Ponieważ Ansel usunął prawy panel boczny, scalając jego zawartość z lewym panelem i menu globalnym, powierzchni do malowania było więcej, pracy dla procesora więcej, a fatalny projekt stołu podświetlanego stał się tym bardziej szkodliwy.
Odkąd zacząłem używać Darktable, mniej więcej w 2012 roku, zawsze zaskakiwało mnie, jak mało pamięci RAM zużywa. Ludzie sądzą, że to dobrze, gdy aplikacja oszczędnie gospodaruje pamięcią — i to z pewnością prawda, gdy mowa o Twoim środowisku graficznym. Ale gdy mówimy o oprogramowaniu produkcyjnym, które wykonuje ciężkie renderowanie pikseli na obrazach od 12 do 54 Mpikseli, oznacza to, że te same ciężkie obliczenia wykonywane są w kółko, zamiast być zapisane do ponownego wykorzystania później. Właśnie od tego jest pamięć podręczna (cache): od unikania kosztownych obliczeń. I powinna używać do tego całej dostępnej pamięci RAM, ponieważ obliczanie to marnowanie energii, a to ma konkretny wpływ, jeśli pracujesz na baterii. Poza tym zapłaciłeś za tę pamięć RAM, a jej używanie nie rozładowuje baterii. Z kolei CPU/GPU…
Wspomnienia gościa, który spędził zbyt wiele czasu na sprzątaniu cudzego gówna i płaceniu za cudze złe decyzje, odcinek #zbyt wiele.
Kopiowanie/wklejanie historii i stylów to kluczowe funkcje w Anselu i te, które sprawiają, że zasługuje on (lub nie) na miano „aplikacji do pracy”. Są to jednak zarazem jedne z najtrudniejszych do poprawnego zaimplementowania wewnętrznie. Użytkownicy widzą listę edycji, ale pod maską edycje te zależą od kolejności w potoku, instancji modułów i masek. Jeśli dwa zdjęcia mają różne topologie potoku, naiwne kopiowanie edycji może wywołać niespójności.
W moim przełomowym wpisie, Darktable: crashing into the wall in slow-motion, przedstawiłem katastrofę, jaką był nowy „Wielki turducken MIDI". Celem tego turduckena1 było przepisanie systemu skrótów klawiszowych, aby rozszerzyć go o urządzenia MIDI.
Do dziś jestem wściekły na to przedsięwzięcie masowego niszczenia, oto podsumowanie powodów:
if/switch-case zagnieżdżone na 4 poziomach, w środku funkcji liczących 1000 linii (przykładowe fragmenty zamieściłem w moim artykule),Keypad End,Shift+& lub Shift+" na BÉPO,

Graf zależności src/gui/accelerators.c (Wielki turducken MIDI) przed przepisaniem. Zgadnij, dlaczego nazywamy to „kodem spaghetti "… Widać wyraźnie, że istnieje dwustronna zależność między kodem akceleratorów a resztą kodu GUI. Utrzymanie tego to koszmar.
Po tym, jak w końcu połączyłem całą stronę i dokumentację w szczelny przepływ pracy tłumaczeniowej (używając po4a na bazie Hugo), który akurat wykorzystuje dokładnie ten sam zestaw narzędzi i logikę co aplikacja Ansel, wpadłem na pomysł automatyzacji pustych tłumaczeń, najpierw z plików tłumaczeń oprogramowania, a potem poprzez API ChatGPT, które całkiem nieźle radzi sobie z tłumaczeniem składni Markdown.
Pracując w pojedynkę, nie możesz liczyć na próżniactwo społeczne , więc musisz być sprytny. Możesz zobaczyć listę rzeczy, które już zautomatyzowałem w tle dla Ansela.
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.
W grudniu 2019 roku poprosiłem, aby ktoś zajął się dostarczaniem pakietów AppImage dla Darktable. Oczywistą korzyścią byłoby umożliwienie wczesnego testowania, przed wydaniem, przez osoby, które nie potrafią samodzielnie zbudować kodu źródłowego, tak by z nadzieją uzyskać wczesne opinie i pomóc w usuwaniu błędów przed wydaniem. Nigdy nie było to priorytetem, co oznacza, że można było mieć pośpiech z naprawą błędów zarówno przed wydaniem, jak i po nim.
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 dziedziczy po Darktable jego bazodanowy kręgosłup: nieniszczące historie edycji zapisywane są dla każdego zdjęcia w bazie danych SQLite, wraz z metadanymi i innymi danymi zdefiniowanymi przez użytkownika. Uświadomienie bazie danych istnienia nowych zdjęć odbywa się poprzez „importowanie" zdjęć z dysku lub karty pamięci. I tu pojawia się narzędzie importu.
Niestety, importer Darktable to kolejna rzecz, którą sknocono około 2020 roku i zamieniono w coś głęboko niepokojącego, ponieważ jest to przeglądarka plików, która nie przypomina żadnej wcześniej znanej przeglądarki plików, a przy tym udaje jej się nie mieć podstawowych funkcji (jak Ctrl+F czy podgląd EXIF), będąc jednocześnie napchaną bezużytecznymi (patrz niżej). To tutaj tracimy niejednego przyszłego użytkownika, a jest to dopiero krok 0 procesu pracy. Cóż za wspaniała wizytówka tego, co potrafi „aplikacja do pracy z procesem" (workflow app)!
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
Przez bardzo długi czas myślałem, że w potoku pikseli istnieje jakiś mechanizm wyłącznika awaryjnego. Przypadek użycia jest następujący:
W takim przypadku chcesz zabić wszystkie aktywne potoki, ponieważ ich wynik nie zostanie użyty, i natychmiast rozpocząć przeliczanie wszystkiego z nowymi parametrami. Tyle że Darktable tego nie robi — pozwala potokowi zakończyć się przed jego ponownym uruchomieniem, a patrząc na komentarze w kodzie źródłowym, wygląda na to, że jest to dość niedawna regresja, a nie pierwotnie zamierzone zachowanie.
Darktable ma własną bibliotekę widżetów GUI, dla suwaków i list rozwijanych (znanych też jako menu rozwijane lub pola wyboru), nazwaną Bauhaus (w kodzie źródłowym znajduje się ona w src/bauhaus/bauhaus.c). Choć jako backendu używają Gtk, obiekty Bauhaus są niestandardowe. A jak wiele rzeczy w Darktable, niestandardowe znaczy zepsute.
W 2022 roku zauważyłem pasożytnicze przerysowania i opóźnienia podczas ich używania, prowadzące do frustrującego doświadczenia użytkownika: przerysowanie widżetu zdawało się czekać na zakończenie ponownych obliczeń potoku (pipeline), co oznaczało, że użytkownicy nie byli do końca pewni, czy zmiana ich wartości została zapisana, co mogło skłaniać ich do ponawiania próby, uruchamiając kolejny cykl kosztownych ponownych obliczeń i skutecznie zawieszając ich komputer na kilka bardzo frustrujących minut bezużytecznych, pośrednich ponownych obliczeń potoku.
Rawspeed (biblioteka dostarczająca dekodery dla plików raw z aparatów) porzuciła obsługę GCC < 12. W związku z tym nie mogę już budować AppImage na Ubuntu 20.04 (za pomocą runnerów Github), lecz muszę budować go na 22.04.
Oznacza to, że żadna dystrybucja Linuksa mająca libc starsze niż 2.35 nie będzie w stanie uruchomić nowych AppImage, począwszy od dzisiaj. Nie powinno to dotyczyć większości użytkowników korzystających z dystrybucji zaktualizowanych w 2021 roku lub później. Ubuntu 20.04 oraz inne dystrybucje LTS/stare stabilne (Debian stable) mogą być tym dotknięte.
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.
Jeśli przychodzisz z Darktable, prawdopodobnie znasz taki widok w ciemni:

podczas gdy Ansel oferuje Ci to:

To nie przypadek i czas wyjaśnić, dlaczego tak jest i dlaczego nie zostanie to rozszerzone o opcje dostosowywania.
Przypadkiem odkryłem, że skrypt kompilacji dla Linuksa używał kompilacji „pakietowej", co oznacza, że optymalizacje CPU są ograniczone do ogólnych, aby wytwarzać przenośne pliki binarne, które można zainstalować na dowolnej platformie x86-64. Przez „używał" mam na myśli, że kompilacja pakietowa nie była jawnie wyłączona, więc była domyślnie włączona.
W każdym razie jest to teraz domyślnie wyłączone, ponieważ właściwe pakiety (.exe i .appimage) nie są budowane przez ten skrypt, który jest przede wszystkim przeznaczony do pomocy użytkownikom końcowym. Aby przywrócić poprzednie zachowanie, musisz uruchomić:
Rok 2022 był tak fatalny pod względem śmieciowych e-maili i szumu, że rozpocząłem projekt Virtual Secretary , framework w Pythonie do pisania inteligentnych filtrów poczty, które krzyżują informacje z kilku źródeł, aby odgadnąć, czym są przychodzące e-maile i czy są ważne/pilne, czy nie. Kiedy mówię o śmieciowych e-mailach, chodzi też o powiadomienia z Githuba, pingi na pixls.us (dzięki Bogu zamknąłem konto na tym głupim forum), YouTube oraz bezpośrednie e-maile od ludzi liczących na uzyskanie prywatnej pomocy.
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 :

Minęły mniej więcej 3 miesiące, odkąd zmieniłem nazwę „R&Darktable" (której nikt zdawał się nie rozumieć poprawnie) na „Ansel", a następnie kupiłem domenę i stworzyłem stronę internetową od zera przy użyciu Hugo (nigdy wcześniej nie programowałem w Golangu, ale to głównie kod szablonów).
Potem spędziłem łącznie 70 h na tym, żeby nocne kompilacje pakietów dla Windowsa i Linuksa działały w ramach ciągłego dostarczania — coś, czego Darktable nigdy nie zrobił porządnie („możesz skompilować samodzielnie, to nietrudne") — tylko po to, by po wydaniu zobaczyć eksplozję w systemie zgłaszania błędów (nic tak nie skraca oczekiwanej długości życia jak połączenie sprintu przedwydaniowego ze sprintem powydaniowym).
Co się dzieje, gdy grupka fotografów amatorów, przekwalifikowanych na programistów amatorów, w towarzystwie zgrai programistów back-endu, którzy piszą biblioteki dla programistów, postanawia pracować bez metody ani struktury nad przemysłowym oprogramowaniem dla użytkowników końcowych, którego kluczowa kompetencja (kolorymetria i psychofizyka) leży gdzieś pomiędzy licencjatem z fotografii a magisterium z nauk stosowanych, obiecując jednocześnie dostarczać 2 wersje rocznie bez zarządzania projektem? A wszystko to, rzecz jasna, w projekcie, w którym założyciele i pierwsze pokolenie programistów poszli dalej i uciekli?
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)