1 pontos por GN⁺ 3 시간 전 | 1 comentários | Compartilhar no WhatsApp
  • 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 PlaybackPolicy combina 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 entre full / 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 WallpaperAgent do sistema, carrega WallpaperExtensionKit.framework em tempo de execução e renderiza frames para um CAContext remoto com AVSampleBufferDisplayLayer
  • Como AVPlayerLayer falha silenciosamente dentro de um CAContext remoto, o VideoRenderer controla diretamente AVAssetReader e AVSampleBufferDisplayLayer para manter uma linha do tempo monotonicamente crescente
  • Ele depende de swizzle de WallpaperSnapshotXPC e de parsing de XPC baseado em Mirror, 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.0 e Swift 6 strict concurrency ativado
  • A licença é MIT, e está explicitado que ele pode ser usado livremente, sem garantia

1 comentários

 
GN⁺ 3 시간 전
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

    • “Nostalgia” de Windows Vista me faz sentir como se eu já tivesse vivido demais
    • O maior problema do Tahoe é que a animação da tela de bloqueio fica travando e engasgando o tempo todo. Uso um M3 Pro, então se ele consegue reproduzir vídeo 4K sem perder frames, também deveria conseguir rodar um simples papel de parede em vídeo; se não consegue, então isso nem deveria existir
    • Acho que deve haver algumas dezenas de pessoas no mundo inteiro que compartilham essa nostalgia do Vista
    • https://windowswallpaper.miraheze.org/wiki/Windows_Vista
      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
    • Sinto falta da época, por volta de 1998, em que fazíamos hack no xscreensaver para usá-lo como fundo da janela raiz do X, ou seja, no desktop
  • 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

    • Pelo que vejo, isso é para o WallpaperAgent, com uma extensão de com.apple.wallpaper que o WallpaperAgent executa na área de trabalho
      Para 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
    • O LegacyScreenSaver consome memória demais
  • Acho que o melhor papel de parede em vídeo da Apple é o Macintosh. Fico curioso sobre como ele funciona

    • Eu também. Ao ver partes desse papel de parede, tive a impressão de que não era só uma coleção simples de arquivos de vídeo, mas algo gerado proceduralmente, então fui conferir de novo
      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 .appex para 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/AppexSaverMinimal
    També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

    • O funcionamento é que a reprodução de vídeo é compartilhada entre a tela de bloqueio e o desktop, e o framework da Apple faz a transição transparente da superfície exibida
  • 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

    • No X11, você pode definir praticamente qualquer programa como janela raiz
      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

    • Fico curioso sobre como a página foi feita tão rápido
      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