PhotopilotPhotopilot
SMB Sync

SMB Sync: van netwerkschijf naar Photopilot

Een klein programma dat een SMB/Samba-share (zoals een StyleShoots-machine) in de gaten houdt en fotomappen automatisch uploadt als shoots en packshots.

  • Shoots

    Mappen met de naam S-<setnummer> (bijv. S-1234) worden geüpload als shoot voor die set.

  • Packshots

    Elke andere map wordt gezien als artikel: een gescande EAN/barcode of een publiek artikelnummer. Foto's met back, side of label in de bestandsnaam worden als die weergave gekoppeld — of via je eigen patroon, zie hieronder.

  • Flat-modus

    Voor StyleShoots die alle bestanden los in de map zetten: zet FLAT_PACKSHOT=true. Losse foto's worden gegroepeerd op artikel-identifier (het deel voor de eerste underscore) en als packshots gesynct.

  • Flat-modus

    Voor StyleShoots die alle bestanden los in de map zetten: zet FLAT_PACKSHOT=true. Losse foto's worden gegroepeerd op artikel-identifier (het deel voor de eerste underscore) en als packshots gesynct.

  • Veilig

    Een map wordt pas gesynchroniseerd als er 10 minuten niets is gewijzigd. Onbekende artikelen worden overgeslagen en later opnieuw geprobeerd. Bij packshots verwijderen we alleen de bestanden die daadwerkelijk zijn geüpload — de map en de rest blijven staan.

Installatie op Windows Server

  1. Download en uitpakken

    Download windows-amd64.exe.gz hierboven, pak het uit en zet smbsync.exe in een eigen map, bijvoorbeeld C:\Photopilot\smbsync\.

  2. Maak een .env-bestand in dezelfde map
    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. Wijs het naar je Samba/SMB-share

    SMB_IP is het IP-adres van de machine met de share (bijv. de StyleShoots of je NAS). SMB_MOUNT is de naam van de share zelf en START_DIR de map binnen de share die gesynchroniseerd wordt. Het account heeft lees- en schrijfrechten nodig: geüploade bestanden worden na de upload van de share verwijderd.

  4. Automatisch starten met Windows

    Open Taakplanner (Task Scheduler), maak een taak die smbsync.exe start bij het opstarten van de computer en zet 'Start in' op de map met de .env. Kies 'Uitvoeren ongeacht of de gebruiker is aangemeld'.

  5. Controleren

    Maak een testmap met een EAN-code als naam op de share, zet er een foto in en wacht ±10 minuten. De foto verschijnt bij het artikel in Photopilot en verdwijnt van de share. De map zelf blijft staan, met daarin een status.json als bewijs dat hij verwerkt is — foto's die we niet hebben geüpload blijven ook gewoon staan. Fouten komen automatisch bij ons binnen via Sentry.

Voor-, achter- en zijkant herkennen

Standaard kijkt SMB Sync naar de woorden back, side en label in de bestandsnaam; alle overige foto's worden een eigen packshot met die foto als voorkant. Niet elke studio benoemt de weergave in de naam. StyleShoots nummert bijvoorbeeld per artikel: <EAN>_PNG_1 is de voorkant, _PNG_2 de achterkant en _PNG_3 de optionele zijkant. Geef dan zelf het patroon op in je .env:

FRONT_IDENTIFIER=_PNG_1$
BACK_IDENTIFIER=_PNG_2$
SIDE_IDENTIFIER=_PNG_3$
  • FRONT_IDENTIFIER Voorkant Standaard: de eerste foto die bij geen andere weergave hoort.
  • BACK_IDENTIFIER Achterkant Standaard: back in de bestandsnaam.
  • SIDE_IDENTIFIER Zijkant Standaard: side in de bestandsnaam.
  • LABEL_IDENTIFIER Label (wasvoorschrift) Standaard: label in de bestandsnaam.

Met deze instelling komen 8712345678906_PNG_1, _PNG_2 en _PNG_3 samen binnen als één packshot voor artikel 8712345678906 — dus niet als drie losse foto's. Ontbreekt de zijkant? Dan blijft die weergave gewoon leeg.

Elk patroon is hoofdletterongevoelig en wordt getoetst op de bestandsnaam zonder extensie, dus PNG_1 werkt net zo goed als _PNG_1$ (het $-teken betekent: aan het einde van de naam). Zodra je FRONT_IDENTIFIER instelt, worden alleen foto's geüpload die bij een van deze patronen passen — overige bestanden in de map blijven met rust. Laat je een variabele weg, dan blijft de standaardregel gelden.

En de labelfoto?

De labelfoto is de extra foto van het was- of samenstellingslabel. LABEL_IDENTIFIER werkt precies zoals de andere drie, met één ding om te onthouden: variabelen die je niet instelt houden hun standaard. In het voorbeeld hierboven staat LABEL_IDENTIFIER dus nog op het woord label. Drie situaties:

  • Je labelfoto is ook genummerd Is _PNG_4 de labelfoto? Zet LABEL_IDENTIFIER=_PNG_4$ erbij. <EAN>_PNG_1 tot en met _PNG_4 komen dan samen als één packshot binnen: voorkant, achterkant, zijkant en label.
  • Je labelfoto heeft wél een naam Heet hij bijvoorbeeld 8712345678906_label.png? Laat LABEL_IDENTIFIER dan gewoon weg: de standaardregel op het woord label blijft actief, ook als je de andere drie op nummers zet. Zo kun je beide manieren door elkaar gebruiken.
  • Je fotografeert geen labels Dan hoef je niets te doen: foto's die bij geen enkel patroon passen worden overgeslagen. Zet LABEL_IDENTIFIER=off alleen als het woord label per ongeluk in een bestandsnaam kan staan (bijvoorbeeld een artikel dat 'Label Tee' heet) en je die foto niet als labelfoto wilt koppelen.

off (of none) werkt ook voor BACK_IDENTIFIER en SIDE_IDENTIFIER en is de enige manier om een standaardwoord uit te zetten. Bij FRONT_IDENTIFIER betekent off simpelweg terug naar de standaard: de eerste foto die bij geen andere weergave hoort.