PhotopilotPhotopilot
SMB Sync

SMB Sync: do disco de rede para o Photopilot

Um pequeno programa que monitoriza uma share SMB/Samba (como uma máquina StyleShoots) e carrega automaticamente pastas de fotografias como shoots e packshots.

  • Shoots

    Pastas com o nome S-<setnummer> (por exemplo, S-1234) são carregadas como shoot para esse conjunto.

  • Packshots

    Qualquer outra pasta é tratada como artigo: um EAN/código de barras digitalizado ou um número de artigo público. As fotos com back, side ou label no nome do ficheiro são associadas a essa vista — ou através do teu próprio padrão, ver abaixo.

  • Modo flat

    Para StyleShoots que colocam todos os ficheiros soltos na pasta: define FLAT_PACKSHOT=true. As fotografias soltas são agrupadas por identificador do artigo (a parte antes do primeiro underscore) e sincronizadas como packshots.

  • Modo flat

    Para StyleShoots que colocam todos os ficheiros soltos na pasta: define FLAT_PACKSHOT=true. As fotografias soltas são agrupadas por identificador do artigo (a parte antes do primeiro underscore) e sincronizadas como packshots.

  • Seguro

    Uma pasta só é sincronizada quando nada foi alterado durante 10 minutos. Os artigos desconhecidos são ignorados e tentados novamente mais tarde. Nos packshots, removemos apenas os ficheiros que foram efetivamente carregados — a pasta e o restante conteúdo permanecem.

Instalação no Windows Server

  1. Transferir

    Transfere windows-amd64.exe acima, muda o nome para smbsync.exe e coloca-o numa pasta própria, por exemplo C:\Photopilot\smbsync\.

  2. Cria um ficheiro .env na mesma pasta
    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. Aponta-o para a tua partilha Samba/SMB

    SMB_IP é o endereço IP da máquina com a share (por exemplo, a StyleShoots ou o teu NAS). SMB_MOUNT é o nome da própria share e START_DIR é a pasta dentro da share que é sincronizada. A conta precisa de permissões de leitura e escrita: os ficheiros carregados são removidos da share após o carregamento.

  4. Iniciar automaticamente com o Windows

    Abre o Agendador de Tarefas (Task Scheduler), cria uma tarefa que inicia smbsync.exe quando o computador arranca e define 'Start in' para a pasta com o .env. Seleciona 'Uitvoeren ongeacht of de gebruiker is aangemeld'.

  5. Verificar

    Cria uma pasta de teste com um código EAN como nome na share, coloca lá uma fotografia e aguarda ±10 minutos. A fotografia aparece no artigo no Photopilot e desaparece da share. A pasta em si permanece, com um status.json como prova de que foi processada — as fotografias que não carregámos também ficam onde estão. Os erros chegam-nos automaticamente através do Sentry.

Reconhecer as vistas frontal, traseira e lateral

Por predefinição, o SMB Sync procura as palavras back, side e label no nome do ficheiro; todas as outras fotografias geram o seu próprio packshot, com essa fotografia como vista frontal. Nem todos os estúdios indicam a vista no nome. Por exemplo, o StyleShoots numera por artigo: <EAN>_PNG_1 é a vista frontal, _PNG_2 é a vista traseira e _PNG_3 é a vista lateral opcional. Nesse caso, define tu mesmo o padrão no teu .env:

FRONT_IDENTIFIER=_PNG_1$
BACK_IDENTIFIER=_PNG_2$
SIDE_IDENTIFIER=_PNG_3$
  • FRONT_IDENTIFIER Vista frontal Predefinição: a primeira fotografia que não pertence a nenhuma outra vista.
  • BACK_IDENTIFIER Traseira Predefinição: back no nome do ficheiro.
  • SIDE_IDENTIFIER Vista lateral Predefinição: side no nome do ficheiro.
  • LABEL_IDENTIFIER Etiqueta (instruções de lavagem) Predefinição: label no nome do ficheiro.

Com esta definição, 8712345678906_PNG_1, _PNG_2 e _PNG_3 entram juntos como um único packshot do artigo 8712345678906 — não como três fotografias separadas. Falta a vista lateral? Essa vista fica simplesmente vazia.

Cada padrão não distingue maiúsculas de minúsculas e é verificado no nome do ficheiro sem extensão, por isso PNG_1 funciona tão bem como _PNG_1$ (o sinal $ significa: no fim do nome). Assim que definires FRONT_IDENTIFIER, só são carregadas as fotos que correspondem a um destes padrões — os restantes ficheiros na pasta não são alterados. Se omitires uma variável, aplica-se a regra predefinida.

E a fotografia da etiqueta?

A foto label é a foto adicional da etiqueta de lavagem ou composição. LABEL_IDENTIFIER funciona exatamente como as outras três, com um ponto a ter em conta: as variáveis que não forem configuradas mantêm o valor predefinido. No exemplo acima, LABEL_IDENTIFIER continua, portanto, definido como a palavra label. Três situações:

  • A fotografia da etiqueta também está numerada _PNG_4 é a foto da label? Acrescenta LABEL_IDENTIFIER=_PNG_4$. <EAN>_PNG_1 a <EAN>_PNG_4 entram então em conjunto como um único packshot: vista frontal, vista traseira, vista lateral e label.
  • A fotografia da etiqueta tem nome Chama-se, por exemplo, 8712345678906_label.png? Então deixa simplesmente LABEL_IDENTIFIER de fora: a regra predefinida para a palavra label continua ativa, mesmo que definas as outras três como números. Assim, é possível usar os dois métodos em simultâneo.
  • Não fotografas etiquetas Nesse caso, não é preciso fazer nada: as fotografias que não correspondem a nenhum padrão são ignoradas. Define LABEL_IDENTIFIER=off apenas se a palavra label puder aparecer por engano num nome de ficheiro (por exemplo, um artigo chamado 'Label Tee') e não quiseres associar essa fotografia como foto label.

off (ou none) também funciona para BACK_IDENTIFIER e SIDE_IDENTIFIER e é a única forma de desativar uma palavra predefinida. Em FRONT_IDENTIFIER, off significa simplesmente voltar à predefinição: a primeira fotografia que não pertence a nenhuma outra vista.