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.
Obrazy rodzą się z potoków
Potok pikseli (pixel pipeline) to sekwencja filtrów, w której piksele są przetwarzane, aby ostatecznie trafić na jakiś nośnik. Photoshop nazywa te filtry warstwami , zgodnie z metaforą odziedziczoną po papierze i malarstwie matte. Da Vinci Resolve, Blender, Natron itd. nazywają je węzłami , zgodnie z metaforą osadzoną w grafach skierowanych i schematach blokowych , najlepiej znanych inżynierom. Oba mają sposób pokazywania, jak te filtry są zorganizowane — albo za pomocą stosu warstw, albo za pomocą grafu węzłów (czyli schematu blokowego).
Ważne jest to, że kolejność ma znaczenie.
Krótka historia złego projektu
Darktable nazywa te filtry modułami. Ale „moduły" odnoszą się do logiki programowania modularnego : każdy moduł jest kodowany oddzielnie, z użyciem jednolitego API, i nie wie nic o pozostałych modułach. Sam potok również nic nie wie o wnętrzu modułów, jedynie łączy wejścia i wyjścia. To czysty sposób programowania, ale zupełnie nieistotny dla użytkownika końcowego.
Problem w tym, że Darktable ma 2 rodzaje modułów:
- moduły stołu podświetlanego (oraz moduły w lewym panelu ciemni), które są dowolnymi zestawami narzędzi, a zatem czysto elementami/ramkami GUI,
- moduły ciemni, które są zarazem filtrem pikseli umieszczonym gdzieś w potoku, jak i zestawem narzędzi GUI (tak samo jak poprzednie moduły).
A te różne moduły, oprócz tego, że są nazwane tak samo, wyglądają dokładnie tak samo…

Mamy tu 3 błędy:
- nazwanie obiektu GUI nazwą jego technicznej implementacji zamiast jego funkcjonalnego przeznaczenia,
- nazwanie i przedstawienie 2 koncepcyjnie różnych obiektów w ten sam sposób,
- brak przedstawienia kolejności modułów w jasny, hierarchiczny sposób.
W efekcie wielu użytkowników wciąż uważa wszystkie moduły za dowolne zestawy narzędzi i przez lata prosiło o sposoby dowolnego przestawiania ich w oknie, co bezkręgowe (brak) technicznego przywództwa im dało, w postaci fatalnie napisanej (3500 linii kodu, subtelnie zepsutej) i przekombinowanej grupy modułów, zjadającej 3% Twojego procesora nawet wtedy, gdy nie wchodzisz w interakcję z aplikacją, tak długo jak Twoja ciemnia stoi bezczynnie.
Wisienką na torcie jest to, że grupy są oznaczone ikonami, dla zwięzłości, ale te ikony są absolutnie tajemnicze i tylko wieloletni użytkownicy udają, że wiedzą, co przedstawiają (narysowałem tę przedstawiającą promienie światła przechodzące przez cienką soczewkę, którą ludzie biorą za UFO – nauczyłem się na tym błędzie).
Dobre przepływy pracy uwzględniają potok
Od 3 lat jestem opłacany przez użytkowników za wyjaśnianie im tajników oprogramowania i odpowiadanie na to samo pytanie w kółko: od czego zacząć przepływ pracy i jak go rozwinąć. Wciąż zdumiewa mnie to, że ludzie z tytułem magistra, którzy przeczytali dokumentację i obejrzeli większość moich filmów, nadal nie potrafią samodzielnie rozpocząć przepływu pracy nad edycją obrazu. Albo jest to krzyczący dowód złego projektu, albo większość ludzi z wyższym wykształceniem to idioci. Właściwie, nawet gdyby ludzie byli idiotami, łatwiej jest uczynić projekt odpornym na idiotów1 niż oczekiwać, że z dnia na dzień im rozum przybędzie, więc tak czy inaczej projekt jest zły z punktu widzenia docelowej grupy odbiorców.
Jeśli otworzysz Photoshopa, warstwy dość intuicyjnie układają się jedna na drugiej. Wszyscy pracowaliśmy z warstwami przy projektach plastycznych w szkole podstawowej. Nie przyszłoby Ci do głowy, żeby zacząć pracować nad najniższą warstwą po tym, jak nałożyłeś na wierzch coś nowego. Cóż, ponad 70 modułów Darktable, zorganizowanych w zakładki tematyczne, w sposób nieuwzględniający ani potoku, ani przepływu pracy, z pewnością zniechęci nowicjuszy i utrwali złe nawyki wśród starych wyjadaczy.
Zdrowe przepływy pracy uwzględniają potok, co oznacza, że kolejność, w jakiej stroisz filtry, powinna być określona przez to, gdzie te filtry znajdują się w potoku. Ale mówię „uwzględniają potok", a nie „są zdefiniowane przez potok", ponieważ początek i koniec potoku (właściwości sceny i wyświetlacza) powinny być ustawione najpierw, aby mieć dobry ogląd tego, co robimy pomiędzy nimi. Zwłaszcza jeśli zamierzasz manipulować sygnałami HDR na wyświetlaczu SDR, musisz najpierw założyć swoje okulary przeciwsłoneczne HDR, aby oglądać swój sygnał w SDR. Ale to, co widzisz, nie jest tym, co jest w Twoim potoku. Dlatego przepływ pracy nie odwzorowuje potoku 1:1, ale wciąż jest do niego dość zbliżony.
Wyobraź sobie, że ustawiasz zafarbowanie barwne w module color balance, celując w światła poprzez ustawienie gain. Potem stwierdzasz, że zdjęcie jest zbyt ciemne i rozjaśniasz je modułem exposure. Ale exposure znajduje się (znacznie) przed color balance w Twoim potoku, więc teraz musisz zaktualizować ustawienie zafarbowania barwnego, bo prawdopodobnie będzie zbyt mocne w tonach średnich. A teraz spleć to z jeszcze jednym pośrednim modułem (lub kilkoma), który używałby maski parametrycznej na dowolnej mierze jasności lub luminancji… Masz gotowy przepis na edycję cyrkularną, szczególnie nieefektywny i frustrujący rodzaj doświadczenia edycji, gdzie każde nowe ustawienie unieważnia poprzednie. Oczywiście są tacy, którzy uważają, że skoro fotografia jest sztuką, to wszystko jest kwestią opinii i preferencji, więc ostatecznie nic z tego nie ma znaczenia. Sztuka czy nie, domek z kart zawali się w całości za każdym razem, gdy zaczniesz majstrować przy niższych piętrach, więc ostatecznie chodzi o to, ile czasu godzisz się zmarnować, a to nie ma nic wspólnego z opiniami czy preferencjami. Twierdziłbym też, że weekendowi hobbyści są tak samo ograniczeni czasowo jak zawodowi fotografowie: ci drudzy z powodów ekonomicznych, ci pierwsi dlatego, że weekendy mają tylko 2 dni i w poniedziałek rano będą musieli wrócić do biura z wystarczającą dawką zabawy w organizmie, by przetrwać kolejny tydzień.
Więc skąd wiesz, kiedy odejść od kolejności potoku? Cóż, rezerwujesz u mnie sesję na demonstrację. Ale jest inne rozwiązanie (więcej o tym poniżej)…
W każdym razie oferowanie użytkownikom większej liczby opcji dostosowywania interfejsu (i być może utrwalanie początkowego błędnego przekonania, że moduły są jedynie okienkami GUI) tego nie rozwiąże. Właściwie daje to ludziom więcej możliwości zaszkodzenia sobie. To, czego chcesz, a to, co jest dla Ciebie dobre…
Ponowne przyjrzenie się problemowi
Podczas gdy Darktable zdegenerowało się do placu zabaw dla geeków, gdzie nowe oznacza lepsze, a każdy problem woła o więcej zabawnego kodu, Ansel skupia się na rozwiązywaniu prostych problemów w prosty sposób, aby stworzyć niezawodnego konia roboczego. Zacznijmy więc jeszcze raz od początku.
Mamy 70 modułów. Choć Ansel wycofał sporą ich część, wciąż jest ich „za dużo", w tym sensie, że wszystkie są do czegoś przydatne, ale nie potrzebujesz ich cały czas ani wszystkich naraz. Poza tym powierzchnia ekranu jest ograniczona i zdecydowanie nie możemy wyświetlić ich wszystkich jednocześnie. A nawet gdybyśmy mogli, prezentowanie kokpitu Airbusa przeciętnemu fotografowi nie byłoby miłe.
Musimy więc wybrać, które moduły wyświetlić i w którym momencie. Nacisk na moment.
Rozwijanie osi czasu
Zgodnie z ideą dokładnie na czas (just in time), wydaje się całkowicie naturalne, że oś czasu zostałaby podzielona na etapy przepływu pracy. Tak więc zestaw wszystkich widocznych modułów w danym momencie odpowiada tym, których będziesz potrzebować teraz i w ciągu najbliższych minut. Przechodząc do następnego etapu przepływu pracy, przechodzisz dalej w GUI i zmieniasz widok. Nazywa się to pokazem slajdów.
Wyznacza to liniową ścieżkę do podążania, aby wydobyć nieco struktury i prowadzenia z pozornego bałaganu. GUI ma nie tylko udostępniać kontrolki, ma także uczyć, komunikować i reklamować dostępne możliwości.
Tak więc każda zakładka jest teraz slajdem naszego pokazu slajdów przepływu pracy, ściśle powiązanym z kolejnością potoku. I z bałaganu wyłoniła się struktura.
Z pewnymi wyjątkami. Na przykład moduły odszumiania muszą działać wcześnie w potoku dla spójności sygnału, a jednak pojawiają się w przepływie pracy później niż, powiedzmy, color calibration, ponieważ działają na poziomie pikseli i zazwyczaj nie zmieniają globalnego zafarbowania barwnego (chyba że masz poważne uszkodzenia szumowe, które mogą przesunąć oś zielony/magenta, ale to zazwyczaj powyżej 8000 ISO). Podobnie z algorytmami wyostrzania: żaden z nich nie zmieni drastycznie jasności, odcienia ani chromy w sposób, który unieważniłby wcześniejsze (w sensie przepływu pracy) globalne ustawienia koloru i ekspozycji, a właściwe ustawienia będą też uzależnione od tego, jak bardzo podniosłeś ekspozycję zdjęcia (tym samym pogłębiając wizualną siłę szumu). Te wyjątki od reguły stają się jasne dzięki numerycznej analizie filtrów pikseli, co oznacza, że ludzie, którzy nie czytali kodu źródłowego z wcześniejszą wiedzą o przetwarzaniu sygnałów, nie będą mieli o tym pojęcia.
Implementacja
Zasada
- Etapy przepływu pracy == zakładki modułów.
- Te zakładki mają nazwy tekstowe, które mogą zajmować więcej miejsca w GUI, ale nie musisz czytać dokumentacji i/lub zgadywać, co oznaczają: jest to napisane na etykiecie.
- Pierwsza i ostatnia zakładka są wyjątkowe
- Pokazują odpowiednio listę włączonych modułów (pipeline) oraz całą listę dostępnych modułów (all).
- Nie wszystkie zakładki są od razu widoczne
- W zależności od szerokości panelu bocznego niektóre zakładki będą ukryte, co jest w porządku, ponieważ będziesz podążać za nimi od lewej do prawej po kolei, więc nie musisz właściwie wiedzieć, co nadchodzi później
- Wewnątrz zakładek moduły są zorganizowane jak warstwy w kolejności potoku
- To znaczy od dołu do góry. Tak właśnie powinieneś je ustawiać. Zatem stos modułów reprezentuje stos efektów/filtrów/warstw na wierzchu obrazu raw.
TL;DR: podążaj za kolejnością GUI od lewej do prawej i od dołu do góry (bo to warstwy), a masz swój przepływ pracy bez żmudnego czytania dokumentacji.
Moduły ciemni można przestawiać w dowolnej zakładce, przytrzymując Ctrl+Shift2 podczas przeciągania i upuszczania myszą nad nagłówkami modułów. Miej świadomość, że przestawia to również moduły w potoku, nie jest to udogodnienie GUI. Najlepiej robić to w zakładce „pipeline" lub „all", gdzie masz pełny ogląd zawartości potoku.
Nawigacja liniowa
Za pomocą myszy i urządzeń wskazujących po zakładkach można nawigować poprzez:
- klikanie tych, które są widoczne,
- klikanie strzałek, aby odsłonić poprzednie/następne zakładki (widoczne lub ukryte),
- klikanie prawym przyciskiem na dowolnej zakładce, aby odsłonić menu kontekstowe zawierające listę wszystkich zakładek,
- przewijanie (kółkiem myszy) wstecz/naprzód po pasku zakładek, aby przełączać zakładki. Gdy dojdziesz do końca, cykl zawróci po „mocnym pchnięciu", upewniając się, że naprawdę tego chcesz.
Następnie po modułach można nawigować, przewijając je w pasku bocznym; zdarzenie przewijania jest przechwytywane przez suwaki dopiero po wcześniejszej interakcji z nimi. Rozwijanie modułów automatycznie przewija pasek, jeśli trzeba, aby wyświetlić je w całości, jeśli to możliwe, lub przynajmniej wyrównać ich górną krawędź z widocznym obszarem.
Za pomocą klawiatury po zakładkach można nawigować za pomocą Ctrl+Tab i Ctrl+Shift+Tab, aby przełączać między następną/poprzednią zakładką, tak jak można się tego spodziewać w dowolnej przeglądarce internetowej. To również zawróci cykl, gdy dojdziesz do końca zakładek.
Następnie w obrębie zakładki po modułach można nawigować za pomocą Page Up/Down, aby przejść do poprzedniego/następnego modułu, pionowo w stosie. Automatycznie rozwija to każdy wybrany moduł, zwijając wszystkie pozostałe, i wyrównuje bieżący moduł pionowo, próbując zmieścić go w całości na ekranie.
Ten sekwencyjny sposób dostępu do następnego/poprzedniego modułu ma rozwiązać fatalny UX Darktable, gdzie trzeba przypisać dokładnie jeden skrót na każdy moduł, aby go rozwinąć, a następnie trzeba zapamiętać wszystkie te specjalne skróty, nie mogąc ich ponownie wykorzystać w innych częściach oprogramowania.
Nawigacja poprzeczna
Jeśli kiedykolwiek zostałeś uwięziony w sklepie Ikea, znasz korzyści płynące ze znajdowania poprzecznych przejść zamiast podążania zamierzoną ścieżką.
Możesz wyszukiwać moduły po ich nazwach lub wewnętrznych aliasach za pomocą pola wyszukiwania, które odpowiada na skrót Ctrl+F. Po wynikach wyszukiwania również można nawigować w kolejności sekwencyjnej za pomocą klawiszy Page Up/Down.
Pamiętaj, że pierwsza zakładka pokazuje cały potok w kolejności jego stosowania.
Zastępowanie ulubionych modułów
Obecny projekt nie ma sposobu na zdefiniowanie ulubionych modułów w specjalnej zakładce. Nie widzę sensu dodawania kolejnego balastu, by rozwiązać problem posiadania balastu na początku.
Dla tych specjalnych modułów możesz przypisać skróty do zdarzeń „show" (czyli otwórz, pokaż, wyświetl, rozwiń) lub „enable" (czyli aktywuj). Przejdź do menu Edycja, następnie na dole kliknij Skróty klawiaturowe, a potem specjalnym kursorem, który otrzymasz, kliknij nagłówek swojego przyszłego ulubionego modułu (jego nazwę). Przykład tutaj z modułem exposure:

Domyślnie zostaniesz poproszony o zdarzenie „show", w kolumnie element (kolejna etykieta, którą powinienem zmienić). Możesz zmienić je na zdarzenie „enable" lub „instance" (czyli instancjonuj). Dla tego akurat efekt nie ma znaczenia, nie testowałem, w którym przypadku jest używane, a całość i tak jest splątanym bałaganem.
W każdym razie te skróty natychmiast przeniosą Cię do Twoich ulubionych modułów, nie zaśmiecając bardziej powierzchni GUI.
Podsumowanie
To nie rozwiązuje problemu tego, że moduły są nazwane czymś, co nie interesuje użytkowników, oraz że moduły przetwarzania obrazu wyglądają tak samo jak te, które nie przetwarzają obrazu. Mam kilka pomysłów na ten temat, ale to na inną okazję.
Uwagi na marginesie
Wiele innych narzędzi wcześniej ukrytych w tajemniczych przyciskach-ikonach zostało scalonych z globalnym menu. To menu można rozwinąć, naciskając Alt, a następnie mnemoniczną literę menu (która zostanie podkreślona po naciśnięciu Alt). Po rozwinięciu po menu można nawigować klawiszami strzałek.
Powrót do stołu podświetlanego jest teraz przypisany do klawisza Escape/Return. Na stole podświetlanym tekstowe wyszukiwanie zdjęć jest również przypisane do Ctrl+F (tak jak można się tego spodziewać). Przeglądanie zdjęć można wykonać klawiszami Arrow, zaznaczanie klawiszem Space, a otwarcie zdjęcia w ciemni można wykonać, naciskając klawisz Enter.
Oznacza to, że aplikacja jest teraz niemal w całości nawigowalna za pomocą klawiatury bez konieczności zapamiętywania skrótów. Te skróty i tak są wyświetlane w menu, po prawej stronie pozycji.
Tabelę wszystkich skrótów można teraz znaleźć w menu Pomoc, wcześniej była dostępna jedynie… poprzez skrót.
Translated from English by : Claude. In case of conflict, inconsistency or error, the English version shall prevail.
And I mean “idiot-proof” in a “prevent pouring water into the acid” way, not in a “cancel chemistry labs because acid can burn” way. It’s not idiot-proof if the idiot is not allowed to do anything. ↩︎
It’s shitty but that’s because Gtk’s way of handling drag and drop events sucks. ↩︎