VintageLightbox

Editor de fotos em Rust, livre e nativo

Importe do cartão, tria, revele e entregue — com o ensaio do cliente aberto ao lado. O VintageLightbox (Zed GPUI) é o app do balcão: as telas desenhadas em Rust, o motor de revelação na GPU e o catálogo na sua máquina.

Não há instalador pronto: um arquivo só para Windows, macOS e Linux compila o app no próprio computador e instala sozinho o que faltar. A compilação usa um perfil próprio, mais rápido e com menos memória que o dos pacotes prontos, e abre menos compilações ao mesmo tempo em máquinas com pouca memória.

Instalar o VintageLightbox (Zed GPUI)

É o app escrito inteiro em Rust, com a interface desenhada pelo GPUI e o motor de revelação na GPU. Desde 17/09/2026 ele segue o desenho do painel da RecordarFotos: as mesmas cores, a mesma moldura e as mesmas telas. Traz RAW, cartão da câmera, pasta fixa de exportação, tela do cliente no segundo monitor e envio que continua na bandeja. Não precisa do Xcode.

Antes de começar: internet ligada, alguns GiB livres no disco e 15 a 40 minutos na primeira vez. Atualizar é repetir o mesmo passo, e as opções (--seco, --versao, --destino, e no Windows VLB_SECO, VLB_VERSAO, VLB_DESTINO) estão em Opções.

Windows 10 e 11

  1. Baixe instalar-vintagelightbox-gpui.cmd. Se o navegador disser que o arquivo pode ser perigoso, escolha Manter.
  2. Na pasta Downloads, dê dois cliques no arquivo. Se aparecer “O Windows protegeu o computador”, clique em Mais informações e depois em Executar assim mesmo; e se ele perguntar se permite que um programa faça alterações, clique em Sim. Só acontece na primeira vez.
  3. Espere a janela preta terminar. No fim, aperte qualquer tecla.
  4. Abra pelo Menu Iniciar: VintageLightbox (Zed GPUI).

Além do Rust -gnu e do MSYS2 (compilador, libclang e o windres), este instalador põe pelo winget o Windows SDK, de onde vem o fxc.exe que compila os shaders.

macOS

  1. No Terminal, cole esta linha e aperte Enter:
    curl -fsSL https://raw.githubusercontent.com/alexkads/VintageLightbox/main/scripts/instalar-vintagelightbox-gpui.cmd | sh
  2. Se ele disser que faltam as Command Line Tools, rode xcode-select --install, clique em Instalar, espere terminar e cole a linha de novo.
  3. Espere aparecer “instalado em /Applications” e abra VintageLightbox pelo Launchpad. Ele abre no primeiro clique, sem aviso de segurança.

Não precisa do Xcode. Os shaders do GPUI são compilados pelo próprio macOS quando o app abre.

Ele instala o VintageLightbox (Zed GPUI).app, com o identificador dos pacotes prontos: as permissões já concedidas continuam valendo. Um VintageLightbox.app antigo não é apagado.

Linux

  1. No Terminal, cole esta linha e aperte Enter:
    curl -fsSL https://raw.githubusercontent.com/alexkads/VintageLightbox/main/scripts/instalar-vintagelightbox-gpui.cmd | sh
  2. Quando pedir, digite a sua senha.
  3. Abra pelo menu de aplicativos: VintageLightbox (Zed GPUI).

Deu errado? A última linha diz em que passo parou e qual arquivo mandar a quem está ajudando — o registro da instalação, com o retrato da máquina e tudo o que passou pela tela. Ver Quando algo dá errado.

Com apt, dnf ou pacman, o instalador põe o compilador, a libclang e as bibliotecas que o GPUI abre: X11, Wayland, xkbcommon, fontconfig, ALSA, OpenSSL, D-Bus, libsecret e o Vulkan (com o driver Mesa). Sem um driver Vulkan a janela não abre, mesmo com tudo compilado.

Câmeras e cartões via PTP: para câmeras que aparecem como camera:/ ou gphoto2://, instale o suporte da sua distribuição:

# Ubuntu/Debian/Mint
sudo apt install gphoto2 gvfs-backends libgphoto2-6

# Fedora
sudo dnf install gphoto2 gvfs-gphoto2 libgphoto2

# Arch/Garuda/Manjaro
sudo pacman -S gphoto2 gvfs libgphoto2

Depois de conectar a câmera, abra Do cartão ou pasta…. O VintageLightbox monta a câmera pelo GVfs, mostra as fotos sem baixar o cartão inteiro e copia somente as fotos escolhidas. O gphoto2 direto é usado como fallback quando o GVfs não estiver disponível. Se a câmera não aparecer, confira também as regras udev e se a sessão gráfica está rodando com GVfs.

Para importar somente algumas fotos: no menu Do cartão ou pasta…, clique em Escolher pasta… e selecione a pasta da câmera ou do cartão. Na tela de seleção, clique na primeira foto e depois faça Shift+clique na última para marcar um intervalo. Use ⌘+A no macOS ou Ctrl+A no Linux e Windows para marcar todas as fotos; cliques com Ctrl ou ⌘ alternam fotos individuais. Confirme somente depois de marcar os arquivos desejados: apenas essa seleção será copiada para a sessão.

O botão Escolher fotos… também permite selecionar arquivos diretamente pelo seletor nativo do sistema. Para uma seleção por intervalo consistente, use a tela de seleção do VintageLightbox após escolher a pasta.

Levantar manualmente para desenvolvimento

Na raiz do projeto, o caminho recomendado é:

./crates/ui-gpui/rodar-local.sh

Para iniciar somente o app, sem a infraestrutura local de vendas:

VLB_POS_VENDA_URL=http://localhost:8080 \
VLB_SITE_URL=http://localhost:8001 \
cargo run --release -p ui-gpui

Quando for necessário levantar também o e-commerce local:

cd /Users/alexkads/Projects/RecordarFotos/recordarfotos-e-commerce
docker compose -f docker-compose.dev.yml up -d
cd /Users/alexkads/Projects/RecordarFotos/VintageLightbox-Rust
VLB_POS_VENDA_URL=http://localhost:8080 VLB_SITE_URL=http://localhost:8001 cargo run --release -p ui-gpui

Gerar o pacote .rpm (Fedora)

Para instalar em outros computadores com Fedora sem compilar em cada um, gere um .rpm numa máquina com o projeto:

./scripts/empacotar-rpm.sh              # compila e gera dist/fedora/*.rpm
./scripts/empacotar-rpm.sh --instalar   # gera e já instala nesta máquina

Nos outros computadores, basta dar dois cliques no arquivo, ou:

sudo dnf install ./vintagelightbox-0.1.10-1.fc44.x86_64.rpm

O dnf traz sozinho as bibliotecas que faltarem e sugere a extensão da bandeja, o driver Vulkan e o suporte à câmera. Para remover: sudo dnf remove vintagelightbox. ⚠️ Gerado no Fedora 44, o pacote só instala no Fedora 44 em diante.

No Fedora:

Primeiro uso

As telas

Atalhos

No Windows e no Linux, onde está ⌘ use Ctrl. As teclas soltas não valem enquanto se digita num campo.

OndeTeclaO que faz
Em todo o app⌘ BRecolhe ou abre o menu lateral
⌘ Z · ⌘ ⇧ ZDesfazer · refazer
⌘ A · ⌘ DMarcar todas · desmarcar
EscSai da revelação ou da impressão e volta
Galeria e revelação← → ↑ ↓Anda pelas fotos
0–5Nota (0 tira)
6 7 8 9Cor: vermelha, amarela, verde, azul
P · X · UEscolhida · rejeitada · sem sinalizador
BMarca ou desmarca como levada no balcão
Delete ou ⌫Apaga as fotos marcadas
RevelaçãoRRecorte e endireitar
\Antes e depois
⌘ ⇧ C · ⌘ ⇧ VCopiar · colar a revelação
Tela do clienteEsc · IFecha · mostra ou esconde as informações
ImportaçãoEspaço · ↑ ↓ · EnterMarca a foto · anda · confirma
ChatbotEnter · ⇧ EnterEnvia a mensagem · quebra a linha
Enter na buscaBusca nos cinco canais
AgendamentosEscVolta um passo: do formulário aos detalhes, e fecha
CaixaF1 · F2 · F3Atalhos · desconto · pessoas
F4Finalizar (no pagamento, conclui a venda)
F6 · F7 · F8Sangria e suprimento · vendas · abrir ou fechar o caixa
1–8 · ⌫No pagamento: escolhe a forma · tira o último lançado
% · RNo desconto: em percentual · em reais
S · UNo movimento: sangria · suprimento
macOS⌘ H · ⌥ ⌘ H · ⌘ QOcultar · ocultar os outros · sair

Atualizar

O app se atualiza sozinho. Toda vez que ele abre, confere se há versão nova. Se houver, aparece no rodapé a faixa com a versão e o que ela traz — em destaque quando a atualização é importante — e o botão Ver novidades, que mostra o que mudou e por que vale atualizar.

  1. Instalou pelo arquivo que compila no computador (o jeito de todos os balcões)? A atualização começa sozinha, em segundo plano: o app roda o mesmo instalador de sempre, que baixa o código novo e compila nesta máquina. A faixa diz em que etapa está. Pode continuar trabalhando — leva alguns minutos.
  2. Instalou por um pacote pronto antigo (o .dmg, que não é mais publicado)? Clique em Atualizar: sem pacote novo, o app compila, como no item acima, e daí em diante segue esse caminho.
  3. No fim, a faixa diz “Versão X instalada”. Ela entra na próxima vez que o app abrir, ou agora mesmo, em Reabrir agora.

Nada se perde se a atualização falhar. O app instalado só é trocado depois de a versão nova compilar e provar que abre, e a anterior fica guardada ao lado (.anterior). Se algo der errado, a faixa diz que a versão que você usa continua funcionando, onde está o registro, e oferece Tentar de novo — sozinho, o app só tenta de novo no dia seguinte. O catálogo e as fotos não mudam com a atualização.

Se nada aparece, é porque está tudo em dia: o app não interrompe ninguém para dizer isso. Ainda dá para atualizar à mão, repetindo o passo da instalação (dois cliques no arquivo no Windows, ou a mesma linha no Terminal).

As versões ficam num servidor da Recordar Fotos e, se ele não responder, numa cópia no GitHub. Tudo é público e gratuito; o app não manda nada sobre você ou suas fotos ao procurar.

Opções

O quemacOS e LinuxWindows
Só mostrar o que faria… | sh -s -- --secoset VLB_SECO=1
Outra versão (branch ou tag)… | sh -s -- --versao v0.2.0set VLB_VERSAO=v0.2.0
Outra pasta de instalação… | sh -s -- --destino ~/Appsset VLB_DESTINO=D:\Apps\VintageLightbox
Só o retrato da máquina, para mandar a quem ajuda… | sh -s -- --diagnostico—
Ver as opções… | sh -s -- --ajuda—

… é o curl -fsSL … | sh da instalação, com a opção no lugar do | sh final. No Windows, as opções só valem se o arquivo for rodado da mesma janela em que foram definidas (dois cliques não as enxergam): abra o Prompt de Comando, digite o set e depois "%USERPROFILE%\Downloads\instalar-vintagelightbox-gpui.cmd".

Para ler o instalador antes de rodar:

curl -fsSL https://raw.githubusercontent.com/alexkads/VintageLightbox/main/scripts/instalar-vintagelightbox-gpui.cmd -o instalar.cmd
less instalar.cmd
sh instalar.cmd

Onde as coisas ficam

macOSLinuxWindows
O app/Applications/VintageLightbox (Zed GPUI).app~/.local/bin/vintagelightbox-gpui%LOCALAPPDATA%\Programs\VintageLightbox-GPUI
O catálogoImagens › VintageLightbox › VintageLightbox Catalog, na sua pasta pessoal
Cache do compilador~/.vintagelightbox/target-gpui%USERPROFILE%\.vintagelightbox\target-gpui
Código baixado~/.vintagelightbox/fonte-gpui%USERPROFILE%\.vintagelightbox\fonte-gpui
Registros da instalação (os dez últimos)~/.vintagelightbox/registros/instalacao-<data>.log—

Para desinstalar: no macOS, VintageLightbox para o Lixo; no Windows, a pasta acima e o atalho VintageLightbox (Zed GPUI); no Linux, ~/.local/bin/vintagelightbox-gpui, ~/.local/share/applications/vintagelightbox-gpui.desktop e o ícone de mesmo nome.

Quando algo dá errado

No macOS e no Linux, o instalador diz o que mandar. Toda instalação grava um registro com o retrato da máquina (sistema, sessão Wayland ou X11, GNOME e a extensão da bandeja, Rust, memória, disco, bibliotecas, placa de vídeo) e tudo o que passou pela tela, inclusive a compilação. Quando algo falha, a última linha é assim:

❌ parou em: compilando (código 101)
   Mande este arquivo para quem está ajudando:
   /home/voce/.vintagelightbox/registros/instalacao-20260921-161500.log

Mande esse arquivo. Para mandar só o retrato da máquina, sem compilar nada:

curl -fsSL https://raw.githubusercontent.com/alexkads/VintageLightbox/main/scripts/instalar-vintagelightbox-gpui.cmd | sh -s -- --diagnostico
O que apareceO que fazer
falta o compilador Metal (macOS, versão antiga do instalador)É uma cópia antiga do instalador, de quando ele pedia o Xcode. Cole de novo a linha do macOS, que não precisa dele.
faltam as Command Line Tools do Xcode (macOS)Rode xcode-select --install, espere terminar e repita a instalação.
command not found: curl (Linux)Instale o curl (sudo apt install curl ou sudo dnf install curl) e repita.
este Linux é imutável (Fedora Silverblue, Kinoite, Bazzite)Rode o comando sudo rpm-ostree install … que a mensagem mostra, reinicie o computador e repita.
O ícone da bandeja não aparece (Fedora e outros com GNOME)Se o GNOME mostrou um aviso para instalar a extensão, aceite. Senão, saia e entre de novo na sessão. Se continuar sumido, abra o app Extensões e ligue AppIndicator and KStatusNotifierItem Support.
não reconheci o gerenciador de pacotes (Linux)Instale à mão os pacotes que a mensagem lista e repita.
a instalação dos pacotes falhou ou não há 'sudo' (Linux)Esta conta não pode instalar programas: peça a quem administra a máquina para rodar o comando mostrado logo acima, e repita.
o Rust continua ausente ou anterior ao 1.89Rode rustup update stable e repita.
O navegador bloqueou o download (Windows)Na lista de downloads, escolha Manter (no Edge: … › Manter).
o winget … não existe nesta máquina (Windows)Instale o Instalador de Aplicativo pela Microsoft Store e repita.
o g++ do MinGW continua faltando (Windows)Instale o MSYS2 e, no terminal dele, rode pacman -S mingw-w64-x86_64-gcc. Depois repita.
o fxc.exe continua faltando (Windows)Instale o Windows SDK, ou defina GPUI_FXC_PATH com o caminho do fxc.exe, e repita.
o windres do MinGW continua faltando (Windows)No terminal do MSYS2, rode pacman -S mingw-w64-x86_64-binutils. Depois repita.
o g++ do MinGW nao compilou um arquivo de teste (Windows)O instalador mostra a mensagem do compilador, atualiza o MSYS2 e reinstala o compilador sozinho. Se continuar (o g++ do MinGW continua sem compilar), abra o MSYS2 MINGW64, rode pacman -Syu duas vezes e repita.
a compilacao falhou de novo (Windows)O instalador já tentou duas vezes, a segunda com uma compilação de cada vez. A mensagem do compilador está acima, nas linhas cargo:warning=. Se ela fala em acesso negado, o antivírus está bloqueando: em Segurança do Windows › Proteção contra vírus e ameaças › Exclusões, adicione %USERPROFILE%\.vintagelightbox e C:\msys64, e repita.
a libclang continua faltando (Windows)No terminal do MSYS2, rode pacman -S mingw-w64-x86_64-clang. Depois repita.
Unable to find libclang no meio da compilação (Linux)Instale clang e libclang-dev (no Fedora, clang e clang-devel) e repita.
A janela não abre (Linux)Falta um driver Vulkan: instale mesa-vulkan-drivers. Com placa NVIDIA no Fedora, instale o driver da NVIDIA pelo RPM Fusion (akmod-nvidia) e reinicie.
A compilação para por falta de espaçoLibere alguns GiB e repita.
signal: 9 ou SIGKILL no meio da compilaçãoFaltou memória. O instalador já compila menos coisas ao mesmo tempo em máquinas com pouca memória; se ainda assim falhar, feche outros programas e repita com uma compilação de cada vez: ponha CARGO_BUILD_JOBS=1 antes do sh (… | CARGO_BUILD_JOBS=1 sh).
A janela do Windows fechou sozinhaRode o arquivo de dentro do Prompt de Comando (veja Opções) para ler a mensagem.
Abre um app diferente, ou o app não muda depois de atualizarO app antigo continuava aberto: saia pela bandeja (Sair) e abra de novo. Só roda uma cópia por vez.
A faixa diz “Não consegui atualizar: …”Confira a internet e clique em Atualizar de novo. Se continuar, feche o app e repita o passo da instalação: o resultado é o mesmo.
Atualizou, mas continua igualFaltou reabrir. Clique em Reabrir agora na faixa, ou saia pela bandeja (Sair) e abra de novo.
A tela do cliente abre pretaAtualize o app (repita a instalação).
A tela do cliente não vai para o outro monitorConfira se o segundo monitor está estendido, e não espelhado. No Linux com Wayland o sistema não deixa o app escolher o monitor: arraste a janela uma vez.
O aviso de mensagem nova (chatbot) ou de agendamento não apareceConfira o sino no alto da tela Chatbot: riscado, os avisos do sistema estão desligados (o aviso dentro do app continua). Depois, o Não perturbe do sistema. Com a janela na frente o aviso é dentro do app, e não do sistema.
A lista aparece vazia ou dá erro ao entrarConfira a internet: as telas vêm do app, mas os dados vêm da RecordarFotos. As fotos já importadas continuam no catálogo.

O mesmo guia, em texto, está em INSTALAR-GPUI.md.

O endereço antigo do instalador

Quem já tem instalar-vintagelightbox.cmd, ou copiou o comando com esse nome, continua sendo atendido: o arquivo antigo só baixa o instalador acima e o roda. Para instalação nova, use o arquivo acima.

O script antigo só para macOS, curl -fsSL https://alexkads.github.io/VintageLightbox/instalar.sh | sh, continua no ar e instala o mesmo VintageLightbox.app, mas pede que o Xcode e o componente Metal já estejam prontos. O instalador do GPUI não precisa de nenhum dos dois.