PhotopilotPhotopilot
SMB Sync

SMB Sync: z dysku sieciowego do Photopilot

Mały program, który monitoruje udział SMB/Samba, na przykład maszynę StyleShoots, i automatycznie przesyła foldery ze zdjęciami jako shooty i packshoty.

  • Shooty

    Foldery o nazwie S-<setnummer> (np. S-1234) są przesyłane jako shoot dla tego zestawu.

  • Packshoty

    Każdy inny folder jest traktowany jako artykuł: zeskanowany EAN/kod kreskowy albo publiczny numer artykułu. Zdjęcia z back, side lub label w nazwie pliku zostaną przypisane jako ten widok — albo według Twojego własnego wzorca, zobacz niżej.

  • Tryb flat

    Dla StyleShoots, które zapisują wszystkie pliki osobno w folderze: ustaw FLAT_PACKSHOT=true. Pojedyncze zdjęcia są grupowane według identyfikatora artykułu (część przed pierwszym podkreśleniem) i synchronizowane jako packshoty.

  • Tryb flat

    Dla StyleShoots, które zapisują wszystkie pliki osobno w folderze: ustaw FLAT_PACKSHOT=true. Pojedyncze zdjęcia są grupowane według identyfikatora artykułu (część przed pierwszym podkreśleniem) i synchronizowane jako packshoty.

  • Bezpiecznie

    Folder jest synchronizowany dopiero wtedy, gdy przez 10 minut nic się w nim nie zmieniło. Nieznane artykuły są pomijane, a próba jest ponawiana później. Przy packshotach usuwamy tylko pliki, które faktycznie zostały przesłane — folder i pozostałe pliki zostają na miejscu.

Instalacja na Windows Server

  1. Pobierz

    Pobierz powyżej windows-amd64.exe, zmień nazwę na smbsync.exe i umieść plik w osobnym folderze, na przykład C:\Photopilot\smbsync\.

  2. Utwórz plik .env w tym samym folderze
    CUSTOMER=Bedrijfsnaam
    SMB_IP=192.168.1.10
    SMB_USERNAME=styleshootssharing
    SMB_PASSWORD=wachtwoord
    SMB_MOUNT=StyleshootsDrive
    START_DIR=sync
    API_TOKEN=jouw-api-token
    API_URL=https://app.photopilot.ai/api
    LOG_LEVEL=info
    TZ=Europe/Amsterdam
    
    # Optioneel: StyleShoots-modus waarbij alle bestanden los in START_DIR staan
    # (geen submap per artikel). Losse foto's worden gegroepeerd op artikel-
    # identifier (het deel voor de eerste underscore) en als packshots gesynct.
    FLAT_PACKSHOT=false
  3. Wskaż swój udział Samba/SMB

    SMB_IP to adres IP urządzenia z share (np. StyleShoots albo Twojego NAS). SMB_MOUNT to nazwa samego share, a START_DIR to folder w share, który jest synchronizowany. Konto wymaga uprawnień do odczytu i zapisu: przesłane pliki są usuwane z share po uploadzie.

  4. Uruchamiaj automatycznie z Windows

    Otwórz Harmonogram zadań (Task Scheduler), utwórz zadanie uruchamiające smbsync.exe przy starcie komputera i ustaw „Start in” na folder z plikiem .env. Wybierz „Run whether user is logged on or not”.

  5. Sprawdzić

    Utwórz na share folder testowy nazwany kodem EAN, umieść w nim zdjęcie i poczekaj ±10 minut. Zdjęcie pojawi się przy artykule w Photopilot i zniknie z share. Sam folder pozostanie, razem z plikiem status.json jako potwierdzeniem przetworzenia — zdjęcia, których nie przesłaliśmy, również pozostaną na miejscu. Błędy trafiają do nas automatycznie przez Sentry.

Rozpoznawanie przodu, tyłu i boku

Domyślnie SMB Sync sprawdza w nazwie pliku słowa back, side i label; wszystkie pozostałe zdjęcia stają się osobnym packshotem z tym zdjęciem jako przód. Nie każde studio podaje widok w nazwie. StyleShoots na przykład numeruje zdjęcia dla każdego artykułu: <EAN>_PNG_1 to przód, _PNG_2 to tył, a _PNG_3 to opcjonalny bok. W takim przypadku samodzielnie podaj wzorzec w swoim pliku .env:

FRONT_IDENTIFIER=_PNG_1$
BACK_IDENTIFIER=_PNG_2$
SIDE_IDENTIFIER=_PNG_3$
  • FRONT_IDENTIFIER Przód Domyślnie: pierwsze zdjęcie, które nie należy do żadnego innego widoku.
  • BACK_IDENTIFIER Tył Domyślnie: back w nazwie pliku.
  • SIDE_IDENTIFIER Bok Domyślnie: side w nazwie pliku.
  • LABEL_IDENTIFIER Etykieta (instrukcja prania) Domyślnie: label w nazwie pliku.

Przy tym ustawieniu 8712345678906_PNG_1, _PNG_2 i _PNG_3 zostaną zaimportowane razem jako jeden packshot dla artykułu 8712345678906 — a nie jako trzy osobne zdjęcia. Brakuje boku? Ten widok po prostu pozostanie pusty.

Każdy wzorzec ignoruje wielkość liter i jest sprawdzany względem nazwy pliku bez rozszerzenia, więc PNG_1 działa tak samo dobrze jak _PNG_1$ (znak $ oznacza: na końcu nazwy). Gdy ustawisz FRONT_IDENTIFIER, przesyłane będą tylko zdjęcia pasujące do jednego z tych wzorców — pozostałe pliki w folderze pozostaną bez zmian. Jeśli pominiesz zmienną, nadal będzie obowiązywać reguła domyślna.

A zdjęcie metki?

Zdjęcie etykiety to dodatkowe zdjęcie metki z instrukcją prania lub składem. LABEL_IDENTIFIER działa dokładnie tak jak pozostałe trzy, z jedną ważną zasadą: zmienne, których nie ustawisz, zachowują wartość domyślną. W powyższym przykładzie LABEL_IDENTIFIER nadal ma więc wartość label. Trzy sytuacje:

  • Twoje zdjęcie etykiety jest też ponumerowane Czy _PNG_4 to zdjęcie label? Dodaj LABEL_IDENTIFIER=_PNG_4$. <EAN>_PNG_1 do _PNG_4 zostaną wtedy zaimportowane razem jako jeden packshot: przód, tył, bok i label.
  • Twoje zdjęcie etykiety ma nazwę Czy plik nazywa się na przykład 8712345678906_label.png? Po prostu pomiń LABEL_IDENTIFIER: domyślna reguła dla słowa label pozostanie aktywna, nawet jeśli trzy pozostałe ustawisz na numery. Dzięki temu możesz używać obu metod jednocześnie.
  • Nie fotografujesz etykiet Wtedy nie musisz nic robić: zdjęcia, które nie pasują do żadnego wzorca, są pomijane. Ustaw LABEL_IDENTIFIER=off tylko wtedy, gdy słowo label może przypadkowo wystąpić w nazwie pliku (na przykład w artykule o nazwie „Label Tee”) i nie chcesz łączyć tego zdjęcia jako zdjęcia etykiety.

off (albo none) działa też dla BACK_IDENTIFIER i SIDE_IDENTIFIER i jest jedynym sposobem na wyłączenie domyślnego słowa. W przypadku FRONT_IDENTIFIER off oznacza po prostu powrót do ustawienia domyślnego: pierwszego zdjęcia, które nie należy do żadnego innego widoku.