Phosphene - motor de papéis de parede em vídeo para macOS Tahoe com engenharia reversa dos papéis de parede em vídeo da Apple
(github.com/kageroumado)- Phosphene é um app de barra de menus + extensão de papel de parede que reproduz arquivos de vídeo do usuário como papel de parede da área de trabalho e da tela de bloqueio no macOS
- Ele se integra ao seletor de papéis de parede padrão do sistema, fazendo com que os vídeos adicionados apareçam em Ajustes do Sistema → Papel de Parede junto com os Aerials nativos da Apple
- Foi criado sobre o WallpaperExtensionKit privado da Apple e oferece reprodução out-of-process, persistência após o encerramento do app e integração com os ciclos de vida de tela de bloqueio, ociosidade e repouso, da mesma forma que os Apple Aerials
- É possível importar MP4, MOV e arquivos que o AVFoundation consiga ler, e o macOS armazena a seleção de papel de parede para vários monitores e para cada Space
- Ele implementa gapless looping sem flush nem interrupções ao aplicar offset em PTS/DTS na fronteira do loop, emendando os frames no nível de frame
- O
PlaybackPolicycombina estado térmico, nível de bateria, alimentação por bateria/AC, Game Mode, modo de exibição, pausa feita pelo usuário, estado de ocultação e outros fatores para decidir o comportamento de reprodução entrefull / reduced / minimal / paused - Quando todos os monitores ficam totalmente cobertos por janelas, a renderização para e a reprodução é pausada até que a área de trabalho volte a ficar visível
- Opcionalmente, é possível gerar previamente adaptive variants de menor resolução e menor fps, e o renderizador troca, em cada fronteira de loop, para a variante mais barata que satisfaça a política atual
- Na configuração Only on Lock Screen, o papel de parede aparece e desaparece suavemente ao bloquear e desbloquear com uma curva cúbica, acompanhando o comportamento dos Apple Aerials
- Do lado do app, há um app de barra de menus em SwiftUI responsável pela biblioteca de vídeos, metadados por vídeo, otimização para HEVC, preferências e notificação Darwin de alterações na biblioteca
- Do lado da extensão, ela roda dentro do
WallpaperAgentdo sistema, carregaWallpaperExtensionKit.frameworkem tempo de execução e renderiza frames para umCAContextremoto comAVSampleBufferDisplayLayer - Como
AVPlayerLayerfalha silenciosamente dentro de umCAContextremoto, oVideoRenderercontrola diretamenteAVAssetReadereAVSampleBufferDisplayLayerpara manter uma linha do tempo monotonicamente crescente - Ele depende de swizzle de
WallpaperSnapshotXPCe de parsing de XPC baseado emMirror, então, se a Apple mudar tipos privados ou nomes de campos, a parte de snapshots e de tratamento de requisições pode quebrar - Os requisitos são macOS Tahoe 26.0+, Apple Silicon e Xcode 17+, com alvo
arm64-apple-macos26.0e Swift 6 strict concurrency ativado - A licença é MIT, e está explicitado que ele pode ser usado livremente, sem garantia
1 comentários
Comentários do Hacker News
Muito elegante. No começo fiquei confuso, pensando “dá para baixar protetores de tela em vídeo, então por que extrair frames?”, mas depois de ler os comentários entendi que dá para usar meus próprios vídeos na área de trabalho e na tela de bloqueio
Seria muito melhor se o título mostrasse isso logo de cara, sem esconder o principal, deixando claro o que dá para fazer e como
Até entendo por que Tahoe está recebendo tantas críticas, mas papéis de parede em vídeo e efeitos de transparência têm uma vibe de Windows Vista que é divertida e nostálgica
Agora é a hora de colocar o papel de parede da cachoeira do Vista para realmente sentir que estamos em 2007
Fiquei curioso sobre qual cachoeira você quis dizer. Também me surpreende que o Vista tivesse tantos papéis de parede assim; do que lembro, era aquele gradiente verde padrão e uma floresta de bambu que usei por um tempo
Muito obrigado por isso. Eu estava montando uma coleção de protetores de tela, mas o LegacyScreenSaver era desajeitado demais
Eu estava torcendo para que alguém decifrasse o framework privado de papéis de parede da Apple, e realmente conseguiram
com.apple.wallpaperque o WallpaperAgent executa na área de trabalhoPara protetores de tela, veja o outro post; lá há um exemplo de API privada de protetor de tela que contorna isso. A Apple usa ambos no seu próprio “Aerials” e tem um sistema de sincronização que compartilha a posição entre o player do protetor de tela e o player do desktop
Acho que o melhor papel de parede em vídeo da Apple é o Macintosh. Fico curioso sobre como ele funciona
Há vários pontos em que a data e a hora coincidem com a data e hora do sistema, até no nível dos segundos
Uau, isso é muito legal. Eu consegui fazer engenharia reversa do framework privado de protetor de tela
.appexpara fazê-lo funcionar no Aerial 4, e na semana passada publiquei um projeto de exemplo e documentação junto com a v4 para quem quiser: https://github.com/AerialScreensaver/AppexSaverMinimalTambém tentei a mesma abordagem com o wallpaper appex, e a engenharia reversa em si parecia fácil, mas o WallpaperAgent se recusou a carregar, então por enquanto ainda estou usando o truque clássico de colocar minha janela e meu player de vídeo acima do papel de parede e abaixo dos ícones. Vou investigar o que deixei passar
Muito bem feito. Recentemente caí numa toca de coelho parecida, fazendo engenharia reversa do catálogo do Aerials e entendendo como a Apple liga tudo isso, então é bom ver outro projeto open source fazendo isso
O detalhe de que mais gosto, e que não conseguimos reproduzir na nossa ferramenta, é a forma como a animação continua sem interrupção entre a janela de login e o desktop ao vivo. Fizemos o phonto, uma implementação multiplataforma da mesma ideia: https://github.com/museslabs/phonto. Eu já estava pensando em escrever sobre todo o processo de engenharia reversa, e isso talvez seja o empurrão para começar
Isso me lembra que no Windows 98 dava para usar uma página HTML como papel de parede. E esse HTML podia até incluir vídeo
Dito isso, o Active Desktop do Windows 98 era a parte mais instável de um sistema operacional que já era instável. Em uma instalação nova, a primeira coisa a fazer era desativá-lo; ainda travava se você olhasse torto para ele, mas pelo menos não travava por diversão
Ficou muito bom, mas seria legal ter um vídeo de demonstração no README
O app agora tem uma landing page com link para download, e também dá para ver outros projetos. O maior projeto é o navegador Refrax, além de vários apps utilitários menores
https://kagerou.glass/phosphene/
https://kagerou.glass
Também queria saber o que ajudou no design
Muito legal. Isso me fez lembrar que eu queria experimentar um papel de parede em vídeo personalizado com um vídeo que eu tinha antigamente
Até ver isso, eu nem sabia que isso não era suportado por padrão