O projekcie
Narzędzie, które ze zdjęcia produktu robi komplet plików gotowych na każdą platformę z osobna — z jej wymaganiami wobec tła, kadru, proporcji, rozdzielczości, wagi i tego, czego na zdjęciu być nie może. Sprzedawca wrzuca partię zdjęć i dostaje z powrotem foldery per platforma, a nie jeden plik, który gdzieś przejdzie, a gdzieś indziej zostanie odrzucony.
Zacznę od granicy, która wyznacza cały projekt, bo bez niej byłoby to narzędzie do kłopotów: ZDJĘCIE PRODUKTOWE JEST OŚWIADCZENIEM O TOWARZE, A NIE ILUSTRACJĄ. Kupujący podejmuje na jego podstawie decyzję i to na jego podstawie zgłasza potem niezgodność. Dlatego system pracuje na PRAWDZIWYM ZDJĘCIU PRAWDZIWEGO PRODUKTU i nigdy nie wymyśla towaru: nie dorysowuje elementów, nie zmienia koloru, nie dokłada akcesoriów, których w zestawie nie ma. Wszystko, co robi, to przygotowanie tego samego przedmiotu do wymagań konkretnej platformy.
Drugą rzeczą, której nie da się obejść, jest to, że KAŻDA PLATFORMA MA INNY REGULAMIN ZDJĘCIA, a wymagania bywają sprzeczne. Jedna chce zdjęcia głównego na jednolitym tle bez żadnych napisów, znaków wodnych i ramek; druga określa minimalny bok i to, jaką część kadru ma zajmować produkt; trzecia dopuszcza zdjęcie aranżowane dopiero na dalszych pozycjach. Jeden plik „na wszystko” z definicji łamie co najmniej jedną z tych reguł — zwykle tę, której naruszenie kończy się odrzuceniem oferty, a nie ostrzeżeniem.
Stąd układ, który jest sednem narzędzia: jeden PLIK NADRZĘDNY i profile platform. Master powstaje raz — produkt odseparowany od tła, w wiernym kolorze, w możliwie najwyższej jakości, z zapisaną maską i punktem odniesienia kolorystycznego. Każdy wynik dla platformy jest z niego WYPROWADZANY według profilu, a nie doprawiany ręcznie. Kiedy platforma zmienia wymagania, zmienia się profil i cała biblioteka przelicza się od nowa; przy ręcznej obróbce trzeba by otworzyć każdy plik jeszcze raz.
Najbardziej podstępna rzecz w tym potoku to KOLOR. Wycinanie tła i automatyczne poprawianie jasności potrafią przesunąć odcień o tyle, że klient dostaje produkt w innym kolorze niż na zdjęciu — a to jest gotowy zwrot i gotowa niezgodność. Dlatego korekta globalna nie dotyka pikseli produktu, master trzyma punkt odniesienia kolorystycznego, a wynik jest zestawiany z zadeklarowaną cechą koloru. Rozbieżność zatrzymuje plik, zamiast wypuścić go z drobną, niewidoczną na ekranie różnicą.
Kontrola idzie przed eksportem, nie po odrzuceniu przez platformę. Sprawdzane jest to, co platformy faktycznie egzekwują: wymiary i proporcje, czystość tła mierzona w narożnikach i przy krawędziach, udział produktu w kadrze, przestrzeń barw i profil, waga pliku, a na zdjęciu głównym obecność napisów, logotypów i ramek. Wynik to lista usterek z podziałem na blokujące i ostrzeżenia — te same dwie kategorie, które w tej pracy mają zupełnie różne skutki.
Elementy generowane są dopuszczone, ale wąsko i świadomie: wyłącznie jako tło albo scena na zdjęciach dalszych, tam gdzie regulamin platformy na to pozwala, i nigdy na zdjęciu głównym. Sam produkt pozostaje pikselami z oryginału. To rozróżnienie jest zapisane w profilu platformy, a nie w głowie operatora, więc nie da się go pominąć przez pośpiech przy setnej pozycji.
Całość jest zbudowana pod partie, bo pojedyncze zdjęcie nikt by nie automatyzował. Przetwarzanie idzie kolejką z zapisem stanu, a każdy plik wyjściowy niesie ZAPIS PRZEPISU: z jakiego oryginału powstał, jakim profilem, w jakiej wersji i kiedy. Dzięki temu ten sam oryginał przepuszczony ponownie daje ten sam wynik, a przy reklamacji dotyczącej zdjęcia da się odtworzyć dokładnie ten plik, który poszedł na platformę.
Problem
Każda platforma ma inny regulamin zdjęcia, a wymagania bywają sprzeczne: jedna chce jednolitego tła bez napisów, druga określa minimalny bok i udział produktu w kadrze, trzecia dopuszcza aranżację dopiero na dalszych pozycjach. Jeden plik „na wszystko” łamie co najmniej jedną regułę — zwykle tę, której naruszenie kończy się odrzuceniem oferty.
Rozwiązanie
Jeden plik nadrzędny z produktem odseparowanym od tła i wiernym kolorem, a z niego wyprowadzane wyniki według profilu każdej platformy. Kontrola tła, kadru, przestrzeni barw, wagi i treści zdjęcia idzie przed eksportem, a każdy plik niesie zapis przepisu, którym powstał.
Funkcje
- jeden plik nadrzędny, z którego wyprowadzają się wszystkie warianty platform
- zmiana wymagań platformy to zmiana profilu i przeliczenie biblioteki, nie ręczna obróbka
- produkt zawsze z prawdziwego zdjęcia — bez dorysowywania i bez zmiany koloru
- punkt odniesienia kolorystycznego w masterze i zestawienie z zadeklarowaną cechą
- kontrola przed eksportem: wymiary, czystość tła, udział produktu w kadrze, waga
- wykrycie napisów, logotypów i ramek na zdjęciu głównym, gdzie regulamin ich zabrania
- tło generowane dopuszczone tylko na dalszych zdjęciach i tylko tam, gdzie wolno
- zapis przepisu przy każdym pliku: oryginał, profil, wersja, moment przetworzenia
Moduły
foto-master
warstwa źródłowaRobi z oryginału jeden plik nadrzędny: produkt odseparowany, kolor wierny, maska zapisana.
- separacja produktu od tła z zapisaną maską, żeby dało się ją poprawić bez powtarzania całej pracy
- korekta globalna nie dotyka pikseli produktu — jasność tła to nie jest jasność towaru
- punkt odniesienia kolorystycznego zapisany przy masterze i przenoszony do każdego wariantu
- master trzymany w najwyższej dostępnej jakości; warianty schodzą w dół, nigdy odwrotnie
- oryginał zostaje nietknięty — master jest pochodną, a nie zastąpieniem zdjęcia
foto-profile
warstwa platformTrzyma wymagania każdej platformy jako profil i wyprowadza z mastera gotowe pliki.
- wymiary, proporcje, minimalny bok, udział produktu w kadrze i tło jako pola profilu
- osobne reguły dla zdjęcia głównego i dla dalszych — to są dwa różne kontrakty
- przestrzeń barw, format i limit wagi pliku wymuszane przez profil, nie ustawiane per plik
- zmiana profilu przelicza całą bibliotekę; nie ma ścieżki „popraw ten jeden ręcznie”
- tło generowane dozwolone wyłącznie tam, gdzie profil na to pozwala
foto-kontrola
warstwa kontroliSprawdza plik przed eksportem, zamiast czekać na odrzucenie przez platformę.
- czystość tła mierzona w narożnikach i przy krawędziach produktu, nie deklarowana
- udział produktu w kadrze liczony z maski, więc nie da się go oszukać marginesem
- wykrycie napisów, logotypów i ramek na zdjęciu głównym
- zgodność koloru z zadeklarowaną cechą; rozbieżność zatrzymuje plik
- usterki dzielone na blokujące i ostrzeżenia — w tej pracy to dwa różne skutki
foto-partia
warstwa przebieguPrzepuszcza setki pozycji kolejką i pilnuje, żeby wynik dało się odtworzyć.
- kolejka ze stanem po każdej pozycji — przerwany przebieg wznawia się, nie zaczyna od zera
- zapis przepisu przy każdym pliku: oryginał, profil, wersja profilu i moment przetworzenia
- ten sam oryginał z tym samym profilem daje ten sam plik wyjściowy
- wyniki układane w foldery per platforma, gotowe do wysyłki albo podpięcia pod panel ofert
- pozycja odrzucona przez kontrolę trafia do kolejki poprawek z powodem, nie do kosza
Architektura
- Podstawa
- usługa w TypeScripcie z przetwarzaniem obrazu po stronie serwera; zdjęcia zostają w infrastrukturze klienta
- Granica integralności
- produkt zawsze z prawdziwego zdjęcia — bez dorysowywania elementów, zmiany koloru i dokładania akcesoriów
- Master i warianty
- jeden plik nadrzędny, warianty wyprowadzane profilem; nie ma ścieżki ręcznej korekty pojedynczego pliku
- Kolor
- korekta globalna omija piksele produktu; punkt odniesienia w masterze, zestawienie z cechą koloru
- Profile platform
- wymiary, tło, udział w kadrze, przestrzeń barw i limit wagi jako dane; zmiana przelicza bibliotekę
- Zdjęcie główne kontra dalsze
- dwa osobne kontrakty w profilu; elementy generowane dopuszczone tylko na dalszych i tylko gdzie wolno
- Kontrola przed eksportem
- czystość tła i udział produktu mierzone z maski; napisy, logotypy i ramki wykrywane, nie zakładane
- Odtwarzalność
- przepis przy każdym pliku — ten sam oryginał i profil dają ten sam wynik także za pół roku
- Przebiegi
- kolejka ze stanem po każdej pozycji; setki plików to operacja, która może się przerwać w połowie
- Wyjście
- foldery per platforma gotowe do wysyłki albo do podpięcia pod panel wystawiania ofert
Technologie
- TypeScript
- Node.js
- sharp
- PostgreSQL
- Claude
Autor
Mariusz PerzyńskiClient Relations & Operations