PhotopilotPhotopilot
SMB Sync

SMB Sync: vom Netzlaufwerk zu Photopilot

Ein kleines Programm, das eine SMB/Samba-Freigabe (z. B. eine StyleShoots-Maschine) überwacht und Fotoordner automatisch als Shoots und Packshots hochlädt.

  • Shoots

    Ordner mit dem Namen S-<Setnummer> (z. B. S-1234) werden als Shoot für dieses Set hochgeladen.

  • Packshots

    Jeder andere Ordner wird als Artikel betrachtet: ein gescannter EAN/Barcode oder eine öffentliche Artikelnummer. Fotos mit back, side oder label im Dateinamen werden als diese Ansicht verknüpft — oder über Ihr eigenes Muster, siehe unten.

  • Flat-Modus

    Für StyleShoots-Setups, die alle Dateien lose im Ordner ablegen: FLAT_PACKSHOT=true setzen. Lose Fotos werden nach Artikel-Identifier (dem Teil vor dem ersten Unterstrich) gruppiert und als Packshots synchronisiert.

  • Flat-Modus

    Für StyleShoots-Setups, die alle Dateien lose im Ordner ablegen: FLAT_PACKSHOT=true setzen. Lose Fotos werden nach Artikel-Identifier (dem Teil vor dem ersten Unterstrich) gruppiert und als Packshots synchronisiert.

  • Sicher

    Ein Ordner wird erst synchronisiert, wenn 10 Minuten lang nichts geändert wurde. Unbekannte Artikel werden übersprungen und später erneut versucht. Bei Packshots löschen wir nur die Dateien, die tatsächlich hochgeladen wurden — der Ordner und der Rest bleiben bestehen.

Installation auf Windows Server

  1. Herunterladen und entpacken

    Lade oben windows-amd64.exe.gz herunter, entpacke es und lege smbsync.exe in einen eigenen Ordner, z. B. C:\Photopilot\smbsync\.

  2. Erstelle eine .env-Datei im selben Ordner
    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. Verweise es auf deine Samba/SMB-Freigabe

    SMB_IP ist die IP-Adresse der Maschine mit dem Share (z.B. die StyleShoots oder Ihr NAS). SMB_MOUNT ist der Name des Shares selbst und START_DIR der Ordner innerhalb des Shares, der synchronisiert wird. Das Konto benötigt Lese- und Schreibrechte: hochgeladene Dateien werden nach dem Upload vom Share gelöscht.

  4. Automatisch mit Windows starten

    Öffne die Aufgabenplanung (Task Scheduler), erstelle eine Aufgabe, die smbsync.exe beim Hochfahren des Computers startet, und setze 'Starten in' auf den Ordner mit der .env. Wähle 'Unabhängig von der Benutzeranmeldung ausführen'.

  5. Überprüfen

    Erstellen Sie einen Testordner mit einem EAN-Code als Namen auf dem Share, legen Sie ein Foto hinein und warten Sie ±10 Minuten. Das Foto erscheint beim Artikel in Photopilot und verschwindet vom Share. Der Ordner selbst bleibt bestehen, mit einer status.json als Beweis, dass er verarbeitet wurde — Fotos, die wir nicht hochgeladen haben, bleiben ebenfalls bestehen. Fehler werden automatisch über Sentry an uns gemeldet.

Vorder-, Rück- und Seitenansicht erkennen

Standardmäßig sucht SMB Sync nach den Wörtern back, side und label im Dateinamen; alle anderen Fotos werden ein eigenes Packshot mit diesem Foto als Vorderseite. Nicht jedes Studio benennt die Ansicht im Namen. StyleShoots nummeriert zum Beispiel pro Artikel: <EAN>_PNG_1 ist die Vorderseite, _PNG_2 die Rückseite und _PNG_3 die optionale Seite. Geben Sie dann selbst das Muster in Ihrer .env an:

FRONT_IDENTIFIER=_PNG_1$
BACK_IDENTIFIER=_PNG_2$
SIDE_IDENTIFIER=_PNG_3$
  • FRONT_IDENTIFIER Vorderseite Standard: das erste Foto, das zu keiner anderen Ansicht gehört.
  • BACK_IDENTIFIER Rückseite Standard: back im Dateinamen.
  • SIDE_IDENTIFIER Seite Standard: side im Dateinamen.
  • LABEL_IDENTIFIER Label (Waschanleitung) Standard: label im Dateinamen.

Mit dieser Einstellung kommen 8712345678906_PNG_1, _PNG_2 und _PNG_3 zusammen als ein Packshot für Artikel 8712345678906 herein — also nicht als drei einzelne Fotos. Fehlt die Seite? Dann bleibt diese Ansicht einfach leer.

Jedes Muster ist nicht case-sensitiv und wird auf den Dateinamen ohne Erweiterung geprüft, also funktioniert PNG_1 genauso gut wie _PNG_1$ (das $-Zeichen bedeutet: am Ende des Namens). Sobald Sie FRONT_IDENTIFIER einstellen, werden nur Fotos hochgeladen, die zu einem dieser Muster passen — andere Dateien im Ordner bleiben unberührt. Lassen Sie eine Variable weg, bleibt die Standardregel bestehen.

Und das Labelfoto?

Das Labelfoto ist das zusätzliche Foto des Wasch- oder Zusammensetzungslabels. LABEL_IDENTIFIER funktioniert genau wie die anderen drei, mit einer Sache zu beachten: Variablen, die Sie nicht einstellen, behalten ihren Standard. Im obigen Beispiel steht LABEL_IDENTIFIER also noch auf dem Wort Label. Drei Situationen:

  • Ihr Labelfoto ist auch nummeriert Ist _PNG_4 das Labelfoto? Setzen Sie LABEL_IDENTIFIER=_PNG_4$ dazu. <EAN>_PNG_1 bis _PNG_4 kommen dann zusammen als ein Packshot herein: Vorderseite, Rückseite, Seite und Label.
  • Ihr Labelfoto hat einen Namen Heißt es zum Beispiel 8712345678906_label.png? Lassen Sie LABEL_IDENTIFIER dann einfach weg: die Standardregel auf dem Wort Label bleibt aktiv, auch wenn Sie die anderen drei auf Nummern setzen. So können Sie beide Methoden kombinieren.
  • Sie fotografieren keine Labels Dann müssen Sie nichts tun: Fotos, die zu keinem Muster passen, werden übersprungen. Setzen Sie LABEL_IDENTIFIER=off nur, wenn das Wort Label versehentlich in einem Dateinamen stehen kann (zum Beispiel ein Artikel namens 'Label Tee') und Sie dieses Foto nicht als Labelfoto verknüpfen möchten.

off (oder none) funktioniert auch für BACK_IDENTIFIER und SIDE_IDENTIFIER und ist die einzige Möglichkeit, ein Standardwort auszuschalten. Bei FRONT_IDENTIFIER bedeutet off einfach zurück zum Standard: das erste Foto, das zu keiner anderen Ansicht gehört.