Phosphene - เอนจินวิดีโอวอลเปเปอร์สำหรับ macOS Tahoe ที่รีเวิร์สเอนจิเนียร์วิดีโอวอลเปเปอร์ของ Apple
(github.com/kageroumado)- Phosphene คือ แอปบนแถบเมนู + ส่วนขยายวอลเปเปอร์ ที่เล่นไฟล์วิดีโอของผู้ใช้เป็นวอลเปเปอร์บนเดสก์ท็อปและหน้าจอล็อกของ macOS
- ทำงานรวมเข้ากับตัวเลือกวอลเปเปอร์เริ่มต้นของระบบ ทำให้วิดีโอที่เพิ่มเข้าไปแสดงใน System Settings → Wallpaper ควบคู่กับ Aerials ที่มีมาใน Apple
- สร้างอยู่บน WallpaperExtensionKit แบบไม่เปิดเผยสาธารณะของ Apple และให้การเล่นแบบ out-of-process, ทำงานต่อได้หลังปิดแอป, รวมถึงผสานเข้ากับวงจรชีวิตของหน้าจอล็อก/สถานะว่าง/โหมดพัก เช่นเดียวกับ Apple Aerials
- สามารถนำเข้าไฟล์ MP4, MOV และไฟล์ที่ AVFoundation อ่านได้ โดย macOS จะบันทึกการเลือกวอลเปเปอร์แยกตามหลายจอและแต่ละ Space
- ทำ gapless looping แบบไร้รอยต่อได้ด้วยการชดเชย PTS/DTS ตรงจุดวนลูป แล้วต่อเฟรมเข้าด้วยกันในระดับเฟรมโดยไม่มีการ flush หรือสะดุด
PlaybackPolicyจะรวมสถานะฝาพับ, ระดับแบตเตอรี่, การใช้แบตเตอรี่/ไฟ AC, Game Mode, โหมดการแสดงผล, การหยุดชั่วคราวโดยผู้ใช้, สถานะถูกบัง ฯลฯ เพื่อกำหนดพฤติกรรมการเล่นเป็นหนึ่งในfull / reduced / minimal / paused- หากทุกจอถูกหน้าต่างบังจนหมด จะหยุดเรนเดอร์และพักการเล่นไว้จนกว่าเดสก์ท็อปจะกลับมาแสดงอีกครั้ง
- สามารถสร้าง adaptive variants แบบความละเอียดต่ำหรือ fps ต่ำไว้ล่วงหน้าได้ และตัวเรนเดอร์จะสลับไปใช้เวอร์ชันที่มีต้นทุนต่ำที่สุดซึ่งยังตรงตามนโยบายปัจจุบันในทุกจุดวนลูป
- ในการตั้งค่า Only on Lock Screen วอลเปเปอร์จะค่อย ๆ ปรากฏและหายไปอย่างเป็นธรรมชาติด้วย cubic curve ตอนล็อกและปลดล็อก ให้พฤติกรรมสอดคล้องกับ Apple Aerials
- ฝั่งแอปรันเป็นแอปแถบเมนู SwiftUI ทำหน้าที่จัดการคลังวิดีโอ, เมทาดาทารายวิดีโอ, การปรับให้เหมาะกับ HEVC, ค่าตั้ง และ Darwin notification เมื่อคลังมีการเปลี่ยนแปลง
- ฝั่งส่วนขยายทำงานภายใน
WallpaperAgentของระบบ โดยโหลดWallpaperExtensionKit.frameworkระหว่างรันไทม์ และเรนเดอร์เฟรมไปยังCAContextระยะไกลด้วยAVSampleBufferDisplayLayer - เนื่องจาก
AVPlayerLayerล้มเหลวแบบเงียบ ๆ ภายในCAContextระยะไกลVideoRendererจึงขับAVAssetReaderและAVSampleBufferDisplayLayerโดยตรงเพื่อรักษาไทม์ไลน์ที่เพิ่มขึ้นอย่างต่อเนื่อง - อาศัยการ swizzle ของ
WallpaperSnapshotXPCและการแยกวิเคราะห์ XPC ด้วยMirrorดังนั้นหาก Apple เปลี่ยนชนิดข้อมูลภายในหรือชื่อฟิลด์แบบไม่เปิดเผยสาธารณะ ส่วนการจัดการ snapshot/คำขออาจพังได้ - ความต้องการคือ macOS Tahoe 26.0+, Apple Silicon, Xcode 17+ และตั้งเป้า
arm64-apple-macos26.0พร้อมเปิดใช้ Swift 6 strict concurrency - ใช้สัญญาอนุญาต MIT และระบุว่าสามารถใช้งานได้อย่างอิสระโดยไม่มีการรับประกันใด ๆ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
เรียบเนียนมาก ตอนแรกงงว่า “ก็โหลดวิดีโอ screensaver ได้อยู่แล้ว แล้วจะดึงเฟรมมาทำไม?” แต่พออ่านคอมเมนต์ก็เข้าใจว่าสามารถใช้ วิดีโอของตัวเองเป็นเดสก์ท็อปและหน้าจอล็อก ได้
ถ้าไม่ซ่อนประเด็นสำคัญไว้ และใช้ชื่อที่บอกตรง ๆ ว่าทำอะไรได้และทำอย่างไร น่าจะดีกว่านี้มาก
พอเข้าใจได้ระดับหนึ่งว่าทำไม Tahoe ถึงโดนบ่นเยอะ แต่ วอลเปเปอร์วิดีโอและเอฟเฟ็กต์โปร่งใส ให้ความรู้สึกแบบ Windows Vista เลยทั้งสนุกและชวนคิดถึง
ถึงเวลาตั้งวอลเปเปอร์น้ำตกของ Vista แล้วทำให้รู้สึกเหมือนปี 2007 จริง ๆ
สงสัยว่าหมายถึงน้ำตกภาพไหน แปลกใจเหมือนกันว่า Vista มีวอลเปเปอร์เยอะขนาดนี้ เท่าที่จำได้มีแค่พื้นหลังไล่เฉดสีเขียวค่าเริ่มต้นกับป่าไผ่ที่เคยใช้ช่วงหนึ่ง
ขอบคุณมากจริง ๆ กำลังทำชุดรวม screensaver อยู่ แต่ LegacyScreenSaver มันง่อยเกินไป
หวังมาตลอดว่าจะมีใครสักคนแกะเฟรมเวิร์กวอลเปเปอร์แบบปิดของ Apple ออกมาได้ และก็มีคนทำสำเร็จจริง ๆ
com.apple.wallpaperบนเดสก์ท็อปถ้าเป็น screensaver ไปดูอีกโพสต์ได้ ฝั่งนั้นมีตัวอย่าง private screensaver API ที่ใช้วิธีเลี่ยงข้อจำกัดนี้ Apple ใช้ทั้งสองแบบกับ “Aerials” ของตัวเอง และมีระบบซิงก์ที่แชร์ตำแหน่งระหว่างตัวเล่น screensaver กับตัวเล่นบนเดสก์ท็อป
คิดว่าวอลเปเปอร์วิดีโอที่ดีที่สุดของ Apple คือ Macintosh อยากรู้ว่ามันทำงานยังไง
มีหลายจุดที่วันที่และเวลาตรงกับวันที่และเวลาของระบบถึงระดับวินาที
โอ้ อันนี้เจ๋งมาก ฉันแกะเฟรมเวิร์ก screensaver
.appexแบบปิดย้อนกลับจนทำให้มันทำงานใน Aerial 4 ได้สำเร็จ และได้ปล่อยโปรเจ็กต์ตัวอย่างกับเอกสารพร้อม v4 เมื่อสัปดาห์ก่อนสำหรับคนที่สนใจ: https://github.com/AerialScreensaver/AppexSaverMinimalฉันลองทำกับ wallpaper appex แบบเดียวกันด้วย ตัวการ reverse engineering เองดูไม่ยาก แต่ WallpaperAgent ปฏิเสธการโหลด เลยยังต้องใช้ทริกแบบคลาสสิกคือเปิดหน้าต่างกับวิดีโอเพลเยอร์ของตัวเองไว้เหนือวอลเปเปอร์แต่ใต้ไอคอนอยู่ คงต้องกลับไปดูว่าเราพลาดอะไร
ทำออกมาได้ดีมาก ช่วงนี้ฉันก็ดำดิ่งไปในโพรงกระต่ายคล้าย ๆ กัน โดย reverse engineering แค็ตตาล็อก Aerials และดูว่า Apple ต่อระบบนี้เข้าด้วยกันยังไง เลยดีใจที่เห็นอีกโปรเจ็กต์โอเพนซอร์สทำเรื่องนี้
รายละเอียดที่ชอบที่สุดและเป็นสิ่งที่เราเลียนแบบในเครื่องมือของเราไม่ได้ คือวิธีที่แอนิเมชันต่อเนื่องกันระหว่างหน้าต่างล็อกอินกับไลฟ์เดสก์ท็อป เราสร้าง phonto ซึ่งเป็นแนวคิดเดียวกันแต่ทำข้ามแพลตฟอร์ม: https://github.com/museslabs/phonto กำลังจะเขียนเล่ากระบวนการ reverse engineering ทั้งหมดอยู่พอดี เรื่องนี้อาจเป็นตัวกระตุ้นให้เริ่มเขียนจริงจังก็ได้
ทำให้นึกถึงสมัย Windows 98 ที่สามารถใช้ หน้า HTML เป็นวอลเปเปอร์ ได้ และใน HTML นั้นก็ใส่วิดีโอได้ด้วย
ว่าแต่ Active Desktop ของ Windows 98 น่าจะเป็นส่วนที่ไม่เสถียรที่สุดของระบบปฏิบัติการที่ก็ไม่เสถียรอยู่แล้ว พอลงระบบใหม่ สิ่งแรกที่ต้องทำคือปิดมัน ถึงจะยังพังได้เหมือนเดิมถ้ามองมันผิด ๆ แต่อย่างน้อยก็ไม่พังแบบตลก ๆ
ทำได้ดี แต่ถ้ามี วิดีโอสาธิต ใน README จะดีมาก
ตอนนี้แอปมีหน้าแลนดิ้งเพจที่มีลิงก์ดาวน์โหลดแล้ว และยังดูโปรเจ็กต์อื่น ๆ ได้ด้วย โปรเจ็กต์ใหญ่ที่สุดคือ เบราว์เซอร์ Refrax นอกนั้นก็มีแอปยูทิลิตีเล็ก ๆ อีกหลายตัว
https://kagerou.glass/phosphene/
https://kagerou.glass
แล้วก็อยากรู้ว่ามีอะไรช่วยเรื่องดีไซน์บ้าง
เจ๋งมาก ทำให้นึกขึ้นได้ว่าเคยอยากตั้ง วอลเปเปอร์วิดีโอแบบกำหนดเอง จากคลิปที่มีอยู่
ก่อนมาเห็นอันนี้ ฉันไม่รู้ด้วยซ้ำว่าระบบไม่ได้รองรับเป็นค่าเริ่มต้น