Ferramentas · No ar

Print2Link

Cole o print, marque e mande o link.

Cole um print, desenhe setas e borrões e receba um link curto que some em 24 horas. O que você borra nunca sobe para o servidor.

Sobre o projeto

O que é o Print2Link

O Print2Link é para quando um print resolve a conversa, mas precisa de um toque antes de sair: uma seta mostrando onde clicar, um borrão em cima do e-mail do cliente. Você cola a imagem (Ctrl+V), arrasta um arquivo ou escolhe um, marca na própria tela e recebe um link curto para mandar. Sem conta e sem programa instalado.

As marcações são feitas no seu navegador, em um canvas, e o que sobe é a imagem já pronta: o borrão é aplicado nos pixels antes do envio, então o original não vai junto. Há setas, retângulos (contorno, marca-texto ou tarja sólida), textos e dois jeitos de esconder uma área, o borrão e o mosaico. Dá para desfazer, refazer e apagar tudo.

O link some em 24 horas. Quem abre vê o print, um contador regressivo e quantas vezes ele foi aberto e baixado, e a prévia do link nos aplicativos de mensagem já mostra o próprio print. Quem enviou pode apagar antes, pelo histórico, que fica só no navegador.

Por baixo, o Print2Link usa a mesma base do ShareSoFast: o mesmo banco SQLite em modo WAL (a imagem fica numa coluna BLOB), a mesma fila que executa uma operação por vez, o mesmo teto de disco e a mesma limpeza que apaga de verdade. Só as tabelas são próprias. Os detalhes estão em Tecnologias, logo abaixo.

Recursos

O que o Print2Link faz

Cole, arraste ou escolha

Ctrl+V (ou ⌘+V) com o print copiado, arraste uma imagem para a tela ou escolha um arquivo. Prints maiores que 4096 px no lado maior são reduzidos ao abrir.

Seta, retângulo e texto

Setas com cor e espessura, retângulos de contorno, de marca-texto ou de tarja sólida, e texto. Seis cores prontas, e a tecla Shift trava a seta em ângulos de 45°.

Borrão que apaga de verdade

O borrão (ou o mosaico) é feito nos pixels antes do envio e substitui o que estava embaixo: o original não sobe. Para dado muito sensível, a tarja sólida é a opção mais segura.

Desfazer, refazer e atalhos

Até 100 passos de desfazer e refazer, apagar tudo (que também se desfaz), zoom para caber na tela ou tamanho real e teclas para as ferramentas (A, B, R e T).

Some em 24 horas

Cada link vence depois de um dia e uma limpeza automática apaga a imagem de verdade. Dá para apagar antes, pelo histórico, com um clique de confirmação.

Link, imagem, Markdown e HTML

Copie o link da página, o endereço da imagem crua, o Markdown ou o HTML para colar num chat, num issue ou num documento.

Prévia no chat

O link mostra o próprio print na prévia dos aplicativos de mensagem (Open Graph). Os robôs que montam a prévia não entram na conta de visualizações.

Visualizações e downloads

Quem abre o link vê quantas vezes o print foi aberto e baixado. Quem enviou acompanha os mesmos números no histórico.

Números abertos

A tela inicial mostra prints criados, visualizações, downloads, bytes enviados, setas e borrões, apagados antes da hora, vencidos, pedidos barrados e o maior print, e se atualiza sozinha. São só contagens de todo o período, em uma tabela que só aumenta: nunca o conteúdo de um print.

Tecnologias

Por dentro do Print2Link

Mesma base do ShareSoFast

O Print2Link não abre um banco próprio: usa o arquivo, a conexão e a fila do ShareSoFast. As tabelas são dele (a imagem fica numa coluna BLOB, por último) e os contadores moram na tabela de números que só aumenta, com um prefixo. Os dois apps juntos não disputam trava do SQLite, dividem o mesmo teto de disco e a mesma limpeza.

Fila com concorrência 1

Toda operação no banco entra na fila (p-queue) do ShareSoFast e executa uma por vez. Se ela encher, o servidor responde 503 em vez de travar. Um teste lança operações dos dois apps ao mesmo tempo e confere que nunca há duas rodando juntas.

Borrão sem volta

Primeiro um mosaico (cada célula vira a média das suas cores), depois um desfoque só para suavizar as bordas. O resultado depende apenas das médias, e um teste prova: duas imagens diferentes por dentro, com a mesma média por célula, ficam idênticas depois. Não usa o filtro do canvas, que o Safari não tem.

Canvas em duas camadas

A imagem com as marcações fica num canvas e a marcação em andamento, em outro por cima. Desfazer refaz tudo do zero a partir de uma lista de marcações (o borrão guarda o pedaço pronto), e é essa lista, um módulo puro, que o teste confere no Node.

Módulos ES puros

Geometria da seta, documento com desfazer, borrão, formatos e histórico não tocam em tela. O navegador e os testes importam os mesmos arquivos, e o importmap leva a versão para cada módulo.

Imagem conferida pelos bytes

O servidor lê o cabeçalho de PNG, JPEG e WebP (o tamanho vem dele) e recusa arquivo cortado, animado, grande demais ou que nem seja imagem. O tipo que o navegador declara não vale nada. A resposta sai com nosniff e uma política de segurança que impede qualquer execução.

Envio binário com progresso real

O navegador manda a imagem como binário puro, com XMLHttpRequest, e mede o envio de verdade. As contagens do editor viajam num header opcional, então até um curl com a imagem funciona.

Prévia do link e cache esperto

A página do link declara o próprio print como imagem de prévia. A imagem sai com ETag e responde 304 a quem só quer conferir, sem ler o BLOB nem contar visualização.

Token de apagar e limites por IP

Quem envia recebe um token uma vez só (o servidor guarda apenas o hash). Envios por minuto e por hora, links que não existem e chutes de token têm limite por IP, conferido antes de o servidor ler o corpo.

Números abertos que só aumentam

Cada fato é contado na mesma transação que o grava (o print entra e o número sobe juntos, ou nenhum dos dois), numa tabela com triggers do SQLite que recusam diminuir e apagar. Pedidos barrados ficam em memória e vão ao banco uma vez por minuto. A tela os mostra pela seção compartilhada do portfólio e se atualiza sozinha.

Som e movimento em cada ação

Cada clique tem som e animação por um módulo comum que usa os sons de interface do SFX Forge, com botões para desligar os dois, respeito ao pedido de menos movimento do sistema e teto de 24 partículas de confete.

FAQ

Perguntas frequentes

Preciso criar uma conta?

Não. O histórico dos seus prints fica só no navegador que você usou. Se limpar os dados do navegador, a lista some, mas o link continua valendo até vencer.

O que sobe para o servidor?

Só a imagem pronta, com as marcações e o borrão já aplicados nos pixels. O arquivo que você colou nunca é enviado, e os metadados da foto (como EXIF) ficam de fora, porque a imagem é gerada de novo no navegador.

O borrão serve para esconder senhas e dados pessoais?

O borrão e o mosaico destroem o que estava embaixo e não há como desfazê-los. Mesmo assim, para senhas, chaves e dados muito sensíveis a opção mais segura é a tarja sólida, que cobre com uma cor chapada. E lembre que o link é público para quem o tiver.

Quanto tempo o link dura?

24 horas. Passado esse tempo a imagem é apagada do banco, o espaço é devolvido e o log de escrita do SQLite é truncado. Dá para apagar antes pelo histórico, no mesmo navegador em que você enviou.

Qual o tamanho máximo?

O servidor aceita até 10 MB por imagem (PNG, JPEG ou WebP, com no máximo 8192 px de lado). O editor reduz o print para 4096 px no lado maior e, se o PNG passar de uns 4 MB, tenta WebP.

Alguém consegue adivinhar o meu link?

É improvável: são 8 caracteres sorteados (cerca de 46 bits), as tentativas em links que não existem são limitadas e a página não é indexada por buscadores. Mesmo assim, quem tiver o link consegue ver, então só mande a quem deve ver.

Funciona no celular?

A tela se adapta a telas pequenas e desenha por toque. No celular não há Ctrl+V: use Escolher imagem ou o botão de colar. Foi conferida em uma tela de celular simulada, não em um aparelho de verdade.

Dá para usar sem a página, por exemplo com o curl?

Dá. Mande a imagem como binário (application/octet-stream) para /projetos/print2link/api/upload. A resposta traz o link, o endereço da imagem e o token para apagar.

Por que usa o mesmo banco do ShareSoFast?

É a ideia do projeto: reaproveitar a base que já existia (SQLite em WAL, imagem em BLOB, fila de concorrência 1, teto de disco e limpeza) em vez de montar outra. Só as tabelas são separadas, para um app não mexer nos dados do outro.

O que os números abertos contam? Eles guardam dados pessoais?

Só contagens: prints criados, visualizações, downloads, bytes, setas e borrões, apagados antes da hora, vencidos, pedidos barrados e o maior print. Nada do conteúdo de um print, nenhum IP e nenhum nome entra nessa tabela, e o total continua mesmo depois que os prints somem. As contagens de setas e borrões viajam num aviso anônimo junto do envio, que o navegador não manda quando você pede para não ser rastreado (DNT ou Global Privacy Control).

Como são contadas as visualizações e os downloads?

Uma visualização por visitante a cada 30 minutos, ao abrir a página ou a imagem. Os robôs que montam a prévia do link em aplicativos de mensagem não entram na conta. Cada download pelo botão Baixar conta uma vez.

Gostou do Print2Link? Dá para apoiar o trabalho:

Continue explorando

Veja também

Todos os projetos