1 điểm bởi GN⁺ 1 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Phospheneứng dụng thanh menu + tiện ích mở rộng hình nền phát các tệp video do người dùng sở hữu làm hình nền desktop và màn hình khóa trên macOS
  • Tích hợp vào bộ chọn hình nền mặc định của hệ thống, nên các video đã thêm sẽ xuất hiện trong System Settings → Wallpaper cùng với Aerials tích hợp của Apple
  • Được xây dựng trên WallpaperExtensionKit riêng tư của Apple, và cung cấp phát ngoài tiến trình giống Apple Aerials, duy trì sau khi ứng dụng thoát, cùng vòng đời tích hợp với màn hình khóa, trạng thái nhàn rỗi và chế độ ngủ
  • Có thể nhập MP4, MOV và các tệp mà AVFoundation có thể đọc, còn việc chọn hình nền cho nhiều màn hình và theo từng Space được macOS lưu trữ
  • Triển khai gapless looping không flush hay giật khựng bằng cách offset PTS/DTS tại ranh giới vòng lặp để nối liền theo từng khung hình
  • PlaybackPolicy kết hợp trạng thái mở nắp, mức pin, nguồn pin/AC, Game Mode, chế độ hiển thị, tạm dừng do người dùng, trạng thái bị che khuất và các yếu tố khác để quyết định hành vi phát là một trong full / reduced / minimal / paused
  • Khi tất cả màn hình đều bị các cửa sổ che kín hoàn toàn, quá trình render sẽ dừng và phát sẽ bị tạm dừng cho đến khi desktop hiện ra trở lại
  • Có thể tùy chọn tạo trước adaptive variants với độ phân giải thấp hơn và fps thấp hơn, và renderer sẽ thay bằng biến thể rẻ nhất đáp ứng chính sách hiện tại tại mỗi ranh giới vòng lặp
  • Trong thiết lập Only on Lock Screen, hình nền xuất hiện và biến mất mượt mà theo đường cong cubic khi khóa/mở khóa để khớp với hành vi của Apple Aerials
  • Phía ứng dụng là ứng dụng thanh menu SwiftUI, phụ trách thư viện video, metadata cho từng video, tối ưu hóa HEVC, tùy chọn và Darwin notification khi thư viện thay đổi
  • Phía extension chạy bên trong WallpaperAgent của hệ thống, tải WallpaperExtensionKit.framework ở runtime và render khung hình vào CAContext từ xa bằng AVSampleBufferDisplayLayer
  • AVPlayerLayer âm thầm thất bại trong CAContext từ xa, VideoRenderer trực tiếp điều khiển AVAssetReaderAVSampleBufferDisplayLayer để duy trì timeline tăng đơn điệu
  • Do phụ thuộc vào swizzle WallpaperSnapshotXPC và phân tích XPC dựa trên Mirror, phần snapshot/xử lý request có thể bị hỏng nếu Apple thay đổi kiểu riêng tư hoặc tên trường
  • Yêu cầu gồm macOS Tahoe 26.0+, Apple Silicon, Xcode 17+, và nhắm mục tiêu arm64-apple-macos26.0 với Swift 6 strict concurrency được bật
  • Giấy phép là MIT, nêu rõ có thể sử dụng tự do mà không có bảo hành

1 bình luận

 
Ý kiến trên Hacker News
  • Rất gọn gàng. Lúc đầu tôi hơi bối rối kiểu “đã có thể tải trình bảo vệ màn hình dạng video rồi, sao còn phải cào frame ra?”, nhưng đọc bình luận xong thì hiểu là có thể dùng video của chính mình cho desktop và màn hình khóa
    Sẽ tốt hơn nhiều nếu tiêu đề nói thẳng ngay từ đầu là có thể làm gì và làm như thế nào, thay vì giấu mất ý chính

  • Tôi phần nào hiểu vì sao Tahoe bị chê khá nhiều, nhưng hình nền video và hiệu ứng trong suốt lại gợi cảm giác Windows Vista nên khá thú vị và hoài niệm
    Giờ là lúc đặt hình nền thác nước của Vista để thật sự có cảm giác như năm 2007

    • “Hoài niệm” về Windows Vista á, nghe làm tôi thấy mình sống lâu thật rồi
    • Vấn đề lớn nhất của Tahoe là hoạt ảnh màn hình khóa cứ liên tục bị giật và đứng hình. Tôi đang dùng M3 Pro; nếu máy xem được video 4K mà không rớt khung hình thì hình nền video đơn giản cũng phải chạy mượt, còn nếu không thì theo tôi nó không nên tồn tại
    • Có lẽ chỉ có vài chục người trên toàn thế giới cùng chia sẻ nỗi hoài niệm về Vista thôi
    • https://windowswallpaper.miraheze.org/wiki/Windows_Vista
      Tôi tò mò không biết là thác nước nào. Cũng ngạc nhiên là Vista lại có nhiều hình nền đến vậy, vì thứ tôi nhớ chỉ là kiểu gradient xanh lá mặc định và rừng tre mà tôi từng dùng một thời gian
    • Tôi nhớ thời khoảng năm 1998, khi người ta hack xscreensaver để chạy làm nền cho cửa sổ gốc của X, tức là hiện ngay trên desktop
  • Cảm ơn rất nhiều vì cái này. Tôi đang làm một bộ sưu tập trình bảo vệ màn hình thì LegacyScreenSaver quá vụng về
    Tôi đã mong ai đó giải mã được framework hình nền riêng tư của Apple, và cuối cùng đúng là đã có người làm được

    • Theo tôi thấy thì cái này dành cho WallpaperAgent, và WallpaperAgent là thứ chạy extension của com.apple.wallpaper trên desktop
      Còn trình bảo vệ màn hình thì xem bài khác; bên đó có đăng mẫu API trình bảo vệ màn hình riêng tư để lách việc này. Apple dùng cả hai trong “Aerials” của họ, và có một hệ thống đồng bộ chia sẻ vị trí giữa trình phát screensaver và trình phát desktop
    • LegacyScreenSaver ngốn bộ nhớ thật sự rất nhiều
  • Theo tôi, hình nền video hay nhất của Apple là Macintosh. Không biết nó hoạt động thế nào

    • Tôi cũng tò mò. Khi xem một phần của hình nền này, tôi có cảm giác nó không chỉ là một tập hợp file video đơn thuần mà có vẻ được tạo theo quy trình, nên đã xem lại để kiểm tra
      Có nhiều chỗ mà ngày giờ khớp với ngày giờ hệ thống chính xác đến từng giây
  • Wow, cái này thật sự rất ngầu. Tôi đã thành công trong việc reverse engineer framework .appex screensaver riêng tư để làm cho nó chạy được trong Aerial 4, và tuần trước đã phát hành cùng v4 một dự án mẫu và tài liệu cho ai quan tâm: https://github.com/AerialScreensaver/AppexSaverMinimal
    Tôi cũng thử làm tương tự với wallpaper appex; việc reverse engineer có vẻ khá dễ, nhưng WallpaperAgent từ chối load nên hiện tại tôi vẫn đang dùng mẹo cổ điển là mở cửa sổ và trình phát video của mình phía trên hình nền và phía dưới các biểu tượng. Tôi sẽ xem lại xem mình đã bỏ sót điều gì

  • Làm rất tốt. Gần đây tôi cũng rơi vào một rabbit hole tương tự, reverse engineer catalog Aerials và tìm hiểu cách Apple nối tất cả thứ này lại với nhau, nên thật vui khi thấy một dự án mã nguồn mở khác cũng làm điều đó
    Chi tiết tôi thích nhất, và thứ mà công cụ của chúng tôi chưa tái tạo được, là cách hoạt ảnh tiếp tục liền mạch giữa cửa sổ đăng nhập và desktop động. Chúng tôi đã làm phonto, một bản triển khai đa nền tảng của cùng ý tưởng này: https://github.com/museslabs/phonto. Tôi cũng đang định viết lại toàn bộ quá trình reverse engineer, nên có khi đây sẽ là động lực để bắt đầu

    • Cách nó hoạt động là phát video được chia sẻ giữa màn hình khóa và desktop, rồi framework của Apple chỉ chuyển bề mặt hiển thị sang trong suốt
  • Điều này làm tôi nhớ đến việc trên Windows 98 có thể dùng trang HTML làm hình nền. Trong HTML đó còn có thể nhúng video nữa

    • Trên X11, bạn có thể đặt bất kỳ chương trình nào làm cửa sổ gốc
      Mà nhân tiện, Active Desktop của Windows 98 là phần bất ổn nhất trong một hệ điều hành vốn đã bất ổn sẵn. Cài máy mới xong là thứ đầu tiên phải tắt đi; ít nhất thì nếu chỉ nhìn nhầm vào nó, hệ thống vẫn có thể chết, nhưng không còn chết theo kiểu “vui vẻ” nữa
  • Làm tốt đấy, nhưng sẽ hay hơn nếu README có video demo

  • Giờ ứng dụng đã có một landing page kèm link tải xuống, và cũng có thể xem các dự án khác. Dự án lớn nhất là trình duyệt Refrax, ngoài ra còn có nhiều ứng dụng tiện ích nhỏ khác
    https://kagerou.glass/phosphene/
    https://kagerou.glass

    • Tôi tò mò không biết trang đó được làm nhanh như vậy bằng cách nào
      Cũng muốn biết điều gì đã giúp cho phần thiết kế
  • Thật sự rất hay. Nó làm tôi nhớ đến việc trước đây từng muốn thử đặt hình nền video tùy chỉnh bằng những đoạn video mình có
    Trước khi thấy cái này, tôi còn không biết là hệ thống không hỗ trợ sẵn việc đó