Uma imagem chamada final.png não é uma versão: registre os bytes antes de revisar
Quando duas pessoas discutem uma imagem exportada, “a última versão” pode significar arquivos diferentes. O nome é igual, o navegador ainda mostra uma cópia antiga e a decisão acaba sendo registrada sobre o artefato errado. Um hash não resolve a revisão visual, mas resolve uma pergunta menor e verificável: estamos olhando os mesmos bytes?
O exemplo abaixo usa somente a biblioteca padrão do Python. Ele serve para arquivos locais que você já pode ler; não consulta serviços nem envia imagens.
Calcule o identificador em blocos
import hashlib
from pathlib import Path
def sha256_file(path):
digest = hashlib.sha256()
with Path(path).open("rb") as file:
for block in iter(lambda: file.read(1024 * 1024), b""):
digest.update(block)
return digest.hexdigest()
A leitura em blocos evita carregar o arquivo inteiro na memória. A memória usada pelo laço fica limitada pelo tamanho do bloco, além do estado do hash e dos buffers de leitura. O tempo continua proporcional ao número de bytes do arquivo.
Antes de enviar uma imagem para revisão, registre o caminho do arquivo e o hash completo junto da decisão. Quando alguém disser que a cor mudou, recalcule o hash do arquivo que essa pessoa está usando. Se for diferente, primeiro alinhe a versão; só depois discuta a alteração visual.
Um teste pequeno para deixar o limite explícito
from tempfile import TemporaryDirectory
with TemporaryDirectory() as folder:
root = Path(folder)
first = root / "first.bin"
second = root / "second.bin"
first.write_bytes(b"example bytes")
second.write_bytes(b"example bytes")
assert sha256_file(first) == sha256_file(second)
second.write_bytes(b"different bytes")
assert sha256_file(first) != sha256_file(second)
Executei esse exemplo: as duas verificações passam. Os arquivos do teste são dados simples, não imagens; isso é proposital. A função trabalha com bytes e não depende de um decodificador de PNG ou JPEG.
Hash de arquivo não é hash da aparência
Uma alteração em metadados ou uma nova compressão pode mudar os bytes sem produzir uma diferença perceptível na tela. Portanto, hashes diferentes não provam que o conteúdo visual mudou. Para investigar aparência, seria necessário comparar pixels decodificados e definir regras para orientação, perfil de cor e transparência. Esse é outro problema.
Também não use apenas oito caracteres do hash como prova de integridade. Um prefixo pode ser um rótulo prático para a interface, mas mantenha o valor completo no registro. E não trate o hash como uma assinatura: quem puder trocar a imagem e o registro poderá substituir ambos.
Onde isso entra no fluxo de criação
Em um fluxo de referência visual, como o Image to Image AI para rascunhos com referência, a exploração acontece antes da aprovação. O produto trabalha com texto para imagem ou uma imagem de origem combinada com instruções, e permite baixar os resultados. O código deste artigo começa depois da exportação; não é uma integração com uma API do produto.
A geração pode exigir conta verificada e consumir créditos conforme as configurações. Por isso, é útil descobrir primeiro se o desacordo veio de um arquivo antigo, antes de produzir outra imagem para resolver uma diferença que talvez nem exista.
Uma regra simples de equipe
Na mensagem de aprovação, inclua o nome do arquivo, o hash completo e o que foi aprovado: composição, conteúdo, ou uso final. “Composição aprovada” não quer dizer que datas, marcas e textos estejam corretos. O hash identifica o arquivo; a frase identifica a decisão humana.
Não deixe um nome como final.png carregar sozinho a responsabilidade de controlar versões. Ele é confortável para salvar, mas fraco para conversar sobre uma entrega.