MyGo 云音乐
用 Go 与 MyGo 写成的第三方网易云音乐桌面客户端。原生界面,没有 WebView;边下边播,无损与 Hi-Res,逐字歌词与「律动」,刘海播放器。
Translation pending
Da triagem à pasta pronta para publicar, no ritmo do teclado. Livre, offline e para Windows, macOS e Linux.
Translation pending
MediaC++ · QMLGitHub @helviojuniorOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
PhotoEditor é um sistema feito para otimizar a seleção e a edição rápida de fotos de eventos.
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗PhotoEditor é um sistema livre (BSD 2-Clause), feito para
otimizar a seleção e a edição rápida de fotos de eventos. Em vez de abrir
centenas de arquivos um a um, você percorre o evento inteiro pelo teclado:
descarta as fotos ruins com Del (lixeira) ou as arquiva com Backspace,
aplica A (Auto) ou um preset, recorta com C, extrai uma pessoa ou objeto
numa camada com S e exporta tudo de uma vez, já no formato de publicação. A edição nunca altera os originais.
Foi criado por Helvio Junior para agilizar o fluxo das coberturas fotográficas do PhotoE — da triagem logo depois do evento até a pasta pronta para publicar.
Funciona como um aplicativo normal no Windows, no macOS e no Linux: é só instalar e abrir — não precisa de internet, de navegador nem de conta. Tudo roda no seu computador, e as fotos nunca saem da pasta do evento.
Baixe o instalador do seu sistema na página de Releases (a versão mais recente fica no topo):
| Sistema | Arquivo | Como instalar |
|---|---|---|
| macOS (Apple Silicon — M1 ou mais novo) | PhotoEditor-<versão>-macos-arm64.dmg | abra o .dmg e arraste o PhotoEditor para Aplicativos |
| macOS (Intel) | PhotoEditor-<versão>-macos-x64.dmg | idem |
| Windows 10/11 (Intel/AMD) | PhotoEditor-<versão>-windows-x64.msi | abra o .msi; o atalho aparece no Menu Iniciar e na Área de Trabalho |
| Windows 11 em ARM | PhotoEditor-<versão>-windows-arm64.msi | idem |
| Linux x64 / arm64 | PhotoEditor-<versão>-linux-*.tar.gz | descompacte e rode bin/PhotoEditor |
Requisitos mínimos: macOS 14, Windows 10/11 64 bits, ou Linux com glibc 2.39 (Ubuntu 24.04).
Primeira abertura: os instaladores ainda não são assinados. No macOS, se aparecer "não foi possível verificar o desenvolvedor", vá em Ajustes do Sistema → Privacidade e Segurança → Abrir Mesmo Assim. No Windows, na tela do SmartScreen, clique em Mais informações → Executar assim mesmo. A primeira abertura também é mais lenta: o sistema verifica o app uma vez.
Para atualizar, instale a versão nova por cima — projetos e preferências são mantidos.
A tela inicial (Projetos, no trilho à esquerda) mostra Abrir projeto, Novo projeto e os projetos recentes em cards — com a capa, o número de fotos, o tamanho e a data da última abertura; o projeto aberto leva o selo Aberto:
Um projeto é a pasta de um evento:
<pasta do evento>/
raw/ as fotos originais (JPEG) — o editor nunca as altera
publicar/ as fotos prontas, geradas pelo botão Exportar
instagram/ as versões Instagram (1080 px, no formato do feed)
archived/ as fotos arquivadas (Backspace) — fora da filmstrip e do Exportar
deleted/ a lixeira (Del): as fotos excluídas, movidas para cá
project_data/ o catálogo e os ajustes do evento (não mexa)
raw/ e move as fotos para dentro; se já for um projeto,
só o abre; se estiver vazia, oferece copiar as fotos de outro lugar.raw/ (ou clique num
card dos recentes). Remover um card da lista nunca apaga a pasta.| Tecla | Ação |
|---|---|
← → | foto anterior / próxima (no recorte, gira o quadro de 15 em 15°) |
Backspace (Mac: ⌫) | arquiva a foto (vai para archived/) |
Del (Mac: fn+⌫) | manda a foto para a lixeira (deleted/) |
Ctrl/Cmd+Shift+R | restaura a foto arquivada ou da lixeira |
A | Auto |
C | modo recorte |
S | modo seleção (camadas); S de novo conclui |
L | próxima camada |
I | versão Instagram da foto (cria/abre); na versão, volta à foto |
[ ] | diminui / aumenta o pincel |
W | conta-gotas do balanço de branco |
Alt+1 … Alt+4 | abas Ajustes / Níveis / Curvas / Efeitos |
Ctrl/Cmd+Z | desfaz a última ação |
Ctrl/Cmd+Shift+Z (ou Ctrl/Cmd+Y) | refaz o que foi desfeito |
Ctrl/Cmd+D | duplica a foto (cópia virtual) |
Ctrl/Cmd+E | exporta |
Ctrl/Cmd+K | busca de ações (paleta de comandos) |
Ctrl/Cmd+/ | atalhos de teclado |
Buscar ações: a caixa no centro da barra superior (ou Ctrl/Cmd+K) abre
a paleta de comandos — digite parte do nome e Enter executa. Ela acha
qualquer ação do app, de "recorte" e presets a idioma e tema, e mostra o
atalho de cada uma; também entende o nome em inglês ("crop", "export"):
Os atalhos são editáveis: o ícone de teclado no pé do trilho lateral (ou
Ctrl/Cmd+/) abre a lista de ações por grupo. + grava uma tecla nova para a
ação, o × remove uma, e Restaurar tudo volta aos padrões. Uma tecla que já
era de outra ação passa para a nova, e o aviso diz quem a perdeu:
Original e editada lado a lado, painel de edição à direita (em abas: Ajustes, Níveis, Curvas e Efeitos) e a filmstrip do evento embaixo. Na barra superior ficam a busca de ações, Desfazer/Refazer e Exportar:
Modo recorte: o quadro fica sobre a original e a editada mostra o resultado ao vivo — aqui girado a -90°, trocando paisagem por retrato sem girar a imagem:
O painel de edição tem quatro abas (Alt+1 a Alt+4); a aba escolhida fica
salva. Tudo vale para a camada ativa, entra no histórico e no desfazer, e
arrastar mostra o resultado ao vivo na Editada.
W) transforma o cursor numa
cruz sobre a Original; clique numa área que deveria ser branca ou cinza
(camisa, parede, rede) e o app acha a temperatura e a matiz que a deixam
neutra. Um clique e o modo sai; Esc cancela. O ajuste fino fica nos
sliders Temperatura e Matiz, com o trilho colorido:S entra no modo seleção: pinte por cima de uma pessoa ou objeto na
original e ele vira uma camada, com ajustes próprios — o resto da foto
fica em outra, com os dela (ex.: fundo escuro e P&B, jogador em cor). Cada
traço soma à seleção; Subtrair (ou Alt) remove; [ e ] diminuem e
aumentam o pincel. L passa de uma camada
para a outra; sliders, presets, Auto, níveis, curvas e efeitos editam a
camada ativa.
Seleção: o traço do pincel (em vermelho, sobre a original) cobre o jogador e a IA estende a seleção ao objeto inteiro sob ele:
Resultado: o jogador virou a camada Seleção 1 e mantém a cor, enquanto o Restante da foto recebeu o preset P&B — o objeto é editado separado do fundo:
A IA que reconhece o objeto roda no seu computador, sem internet e sem
placa de vídeo: a primeira seleção de cada foto leva ~1,5 s e cada traço
seguinte, ~0,3 s. Com Detectar o objeto (IA) desligado, o pincel seleciona
exatamente a área pintada. As camadas entram no histórico, no desfazer
(Ctrl/Cmd+Z), no refazer e na exportação como qualquer ajuste.
Na triagem há dois destinos para a foto que não vai ser publicada:
Backspace; no Mac, ⌫): a foto sai da filmstrip e do
Exportar, e o JPEG vai de raw/ para archived/. Serve para a foto boa
que não entra nesta publicação, mas que vale guardar.Del; no Mac, fn+⌫): a foto vai para deleted/ — das fotos
ou do arquivo. Nada é apagado: a lixeira só junta o que foi descartado.Arquivar, mandar para a lixeira e restaurar entram no desfazer
(Ctrl/Cmd+Z) e no refazer.
A barra da filmstrip troca a visualização: Fotos | Arquivadas (n) |
Lixeira (n). Em Arquivadas e Lixeira as fotos só são vistas, não editadas;
Restaurar (Ctrl/Cmd+Shift+R) devolve a foto à filmstrip.
Na lixeira,
Excluir definitivamente apaga a foto atual e Esvaziar lixeira apaga
todas — o arquivo e o registro, com as cópias virtuais, as versões Instagram,
o histórico, a participação em merges e o que já foi exportado em
publicar/. Essas duas não têm desfazer: a confirmação pede que você
digite uma palavra (ou, ao esvaziar, o número de fotos da lixeira) antes de
liberar o botão.
O botão Duplicar da barra da filmstrip cria uma cópia virtual da foto:
uma entrada nova no catálogo, ao lado da original, que lê o mesmo JPEG
(nada é gravado em raw/) e tem ajustes, crop e camadas próprios —
começando pelos da foto duplicada. Serve para ter duas versões da mesma foto
(ex.: uma em cor e outra em P&B, ou dois cortes).
O Exportar grava a cópia como publicar/<nome>_copy.jpg (_copy2,
_copy3...). Excluir a cópia só a tira do catálogo; excluir a original tira
as cópias da filmstrip junto (desfazer traz tudo de volta). Ctrl/Cmd+Z
desfaz a duplicação.
Conectar a conta: o item Instagram do trilho lateral abre as
configurações do Instagram. Entre com usuário e senha; se a conta tiver
verificação em duas etapas, ou se o Instagram pedir para confirmar o acesso,
a tela pede o código. O app guarda só a sessão em ~/.photoe/ — nunca a
senha — e ela vale para todos os eventos. Na mesma tela fica o modelo da
legenda, com os campos {event} (nome da pasta do evento, sem a data),
{date}, {photos} e {hashtag}.
O login é o do app do celular, fora da API oficial da Meta (que só aceita fotos hospedadas na internet). O Instagram pode pedir confirmação ou limitar a conta por um tempo; publicar num ritmo normal evita isso.
Editar para o Instagram: tecle I (ou o ícone do Instagram na barra da
filmstrip) numa foto. O app cria a versão Instagram dela — uma cópia
virtual com todos os ajustes, camadas e o merge que a foto já tem — e a abre
no modo recorte, com o quadro preso aos formatos que o feed aceita:
4:5 (retrato), 1:1 ou 1,91:1 (paisagem). Escolha o formato no
painel; o resto do painel funciona como sempre. Em 4:5 e 1:1 o quadro gira
até 45° (só endireita); no 1,91:1 gira até 90°, como no recorte normal —
passando de 45° ele deita e o recorte fica vertical (1:1,91). Esse formato
é exportado, mas o feed não aceita: o painel avisa e o Publicar não deixa
enviá-lo. Aqui, a versão 4:5 de uma foto: o quadro retrato sobre a
original e, à direita, o recorte que vai para o feed:
I de novo volta à foto;
na foto, I abre a versão que já existe. A versão não aparece na filmstrip
— clicar numa foto ou andar com as setas abre sempre a foto, nunca o editor do
Instagram; a foto que tem versão leva o ícone do Instagram no canto. Dentro da
versão, Del a exclui (tira a foto da seleção do Instagram).
Exportar grava as versões em publicar/instagram/ com 1080 px de
largura (1080×1350, 1080×1080 ou 1080×566), e não na raiz de publicar/.
Publicar: o botão Publicar da barra da filmstrip abre o envio:
escolha as versões (até 10 — mais de uma vira carrossel, na ordem da
filmstrip), revise a legenda — já preenchida com os dados do evento — e
publique. O que vai para o Instagram é exatamente o arquivo de
publicar/instagram/.
O botão Exportar, no canto superior direito (ou Ctrl/Cmd+E, ou
Projetos → Exportar…), grava as fotos ativas, com os ajustes, recortes,
camadas e merges, em publicar/; as versões Instagram vão para
publicar/instagram/. Só é regravado o que mudou desde a última exportação, e
a foto excluída sai de publicar/. Fechar o diálogo não interrompe nada: a
exportação segue e o botão mostra o andamento. No fim, o resumo:
A estrela na barra da filmstrip marca a foto atual como capa (selo
"Capa" no thumbnail; só uma por projeto — marcar outra tira a anterior; é
desfazível com Ctrl/Cmd+Z). No Exportar a capa sai duas vezes em
publicar/: com o nome original, como toda foto, e como capa.jpg —
cópia idêntica (se a capa for base de um merge, a cópia é a do merge). Sem
capa, um capa.jpg antigo é removido.
No desktop, as divisões do editor são arrastáveis: fotos × filmstrip, Original × Editada e a largura do painel de edição. Os tamanhos ficam salvos no app; duplo clique numa divisória volta ao padrão, e as setas do teclado também a movem (com ela em foco).
Várias fotos da mesma jogada viram uma só, com o objeto de cada clique empilhado em camadas — a trajetória da bola sobre a cena parada.
S, o mesmo das
camadas, com o SAM) a bola de cada foto. Só a área pintada entra no
resultado. Na base, pinte a bola dela para esmaecê-la: o fundo por trás
vem de uma foto seguinte, onde a bola já saiu dali.Seleção da parte da imagem: com a camada IMG_5794 ativa, a original dela aparece à esquerda com a área pintada em vermelho — a bola chegando à cesta. Só esse recorte vai para o merge; o resto da foto serve apenas para alinhá-la à base. À direita, o Resultado já mostra a bola no lugar:
Camadas e opacidade: cada foto mostra como foi alinhada à base
(Alinhada: -0.1, 1.8 px · 0.01° · 100.00% = deslocamento, rotação e escala)
e a própria opacidade. Com Surgir, a bola da base (IMG_5788) fica a 47% e
as seguintes sobem — 57%, 75% e 100% — até a da cesta, inteira. Esmaecer
faz o contrário e Opacas deixa todas a 100%:
Efeito final: de volta ao editor, a base leva o selo MERGE na filmstrip e
a Editada passa a ser o merge — a trajetória da bola, do arremesso até a
cesta, numa foto só. Ajustes, recorte e Auto valem sobre ele, e o Exportar
grava publicar/IMG_5788_merge.jpg:
Não precisa de tripé: cada foto é alinhada automaticamente à base pelo fundo — deslocamento, rotação e escala, já que a câmera na mão anda entre um clique e outro — e a exposição é igualada, para a bola de cada foto cair no lugar certo da cena.
Os originais nunca mudam. A base passa a representar o merge: no editor, a
Editada mostra o merge (ajustes, crop e Auto valem sobre ele) e o
Exportar grava publicar/<base>_merge.jpg. As fotos das camadas saem da
filmstrip e do Exportar enquanto o merge existir. A lixeira de uma camada
(Remover do merge) tira só aquela foto da composição e a devolve à
filmstrip — na última camada, o merge inteiro é desfeito; Desfazer merge
devolve todas.
~/.photoe/ —
C:\Users\<você>\.photoe no Windows.~/.photoe/logs/).O app é C++20 + Qt 6 (QML), com OpenCV e ONNX Runtime; só a publicação no
Instagram usa um pequeno auxiliar em Python. Compilar, testar e gerar os
instaladores é pelo make (com Docker, sem instalar Qt na máquina):
make test # testes
make run # abre o app
make local # instalador só deste sistema e arquitetura, em dist/
make help # todos os alvos (make dmg, make windows, make linux, make dist...)
Arquitetura, empacotamento e versão estão em
docs/ARCHITECTURE.md; as convenções obrigatórias
do código, em CLAUDE.md. A versão anterior (Python + React)
fica na branch legacy.
Distribuído sob a licença BSD 2-Clause — veja LICENSE.
Criado por Helvio Junior para as coberturas do PhotoE.