1 คะแนน โดย GN⁺ 1 시간 전 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 ความคิดเห็น

 
GN⁺ 1 시간 전
ความคิดเห็นจาก Hacker News
  • เรียบเนียนมาก ตอนแรกงงว่า “ก็โหลดวิดีโอ screensaver ได้อยู่แล้ว แล้วจะดึงเฟรมมาทำไม?” แต่พออ่านคอมเมนต์ก็เข้าใจว่าสามารถใช้ วิดีโอของตัวเองเป็นเดสก์ท็อปและหน้าจอล็อก ได้
    ถ้าไม่ซ่อนประเด็นสำคัญไว้ และใช้ชื่อที่บอกตรง ๆ ว่าทำอะไรได้และทำอย่างไร น่าจะดีกว่านี้มาก

  • พอเข้าใจได้ระดับหนึ่งว่าทำไม Tahoe ถึงโดนบ่นเยอะ แต่ วอลเปเปอร์วิดีโอและเอฟเฟ็กต์โปร่งใส ให้ความรู้สึกแบบ Windows Vista เลยทั้งสนุกและชวนคิดถึง
    ถึงเวลาตั้งวอลเปเปอร์น้ำตกของ Vista แล้วทำให้รู้สึกเหมือนปี 2007 จริง ๆ

    • Windows Vista “ความคิดถึง” งั้นเหรอ ทำให้รู้สึกเหมือนตัวเองอายุมากเลย
    • ปัญหาใหญ่ที่สุดของ Tahoe คือ แอนิเมชันหน้าจอล็อก กระตุกและค้างตลอด ฉันใช้ M3 Pro อยู่ ถ้าดูวิดีโอ 4K ได้โดยไม่ดรอปเฟรม งั้นวิดีโอพื้นหลังธรรมดาก็ควรลื่นได้ และถ้าทำไม่ได้ก็ไม่ควรมีมาตั้งแต่แรก
    • คิดว่าทั่วโลกคงมีคนที่มีความทรงจำร่วมกับ Vista อยู่สักหลายสิบคน
    • https://windowswallpaper.miraheze.org/wiki/Windows_Vista
      สงสัยว่าหมายถึงน้ำตกภาพไหน แปลกใจเหมือนกันว่า Vista มีวอลเปเปอร์เยอะขนาดนี้ เท่าที่จำได้มีแค่พื้นหลังไล่เฉดสีเขียวค่าเริ่มต้นกับป่าไผ่ที่เคยใช้ช่วงหนึ่ง
    • คิดถึงสมัยราวปี 1998 ที่เอา xscreensaver hacks ไปใช้เป็นพื้นหลังของ X root window หรือก็คือเอามาแสดงบนเดสก์ท็อป
  • ขอบคุณมากจริง ๆ กำลังทำชุดรวม screensaver อยู่ แต่ LegacyScreenSaver มันง่อยเกินไป
    หวังมาตลอดว่าจะมีใครสักคนแกะเฟรมเวิร์กวอลเปเปอร์แบบปิดของ Apple ออกมาได้ และก็มีคนทำสำเร็จจริง ๆ

    • เท่าที่ดู อันนี้เป็นของ WallpaperAgent และเป็นโครงสร้างที่ WallpaperAgent รันส่วนขยายของ com.apple.wallpaper บนเดสก์ท็อป
      ถ้าเป็น screensaver ไปดูอีกโพสต์ได้ ฝั่งนั้นมีตัวอย่าง private screensaver API ที่ใช้วิธีเลี่ยงข้อจำกัดนี้ Apple ใช้ทั้งสองแบบกับ “Aerials” ของตัวเอง และมีระบบซิงก์ที่แชร์ตำแหน่งระหว่างตัวเล่น screensaver กับตัวเล่นบนเดสก์ท็อป
    • LegacyScreenSaver กินหน่วยความจำหนักมาก
  • คิดว่าวอลเปเปอร์วิดีโอที่ดีที่สุดของ 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 ทั้งหมดอยู่พอดี เรื่องนี้อาจเป็นตัวกระตุ้นให้เริ่มเขียนจริงจังก็ได้

    • วิธีทำงานคือ การเล่นวิดีโอถูกแชร์ระหว่างหน้าจอล็อกกับเดสก์ท็อป และเฟรมเวิร์กของ Apple จะสลับพื้นผิวที่แสดงผลแบบโปร่งใส
  • ทำให้นึกถึงสมัย Windows 98 ที่สามารถใช้ หน้า HTML เป็นวอลเปเปอร์ ได้ และใน HTML นั้นก็ใส่วิดีโอได้ด้วย

    • บน X11 สามารถตั้งโปรแกรมอะไรก็ได้ให้เป็น root window
      ว่าแต่ Active Desktop ของ Windows 98 น่าจะเป็นส่วนที่ไม่เสถียรที่สุดของระบบปฏิบัติการที่ก็ไม่เสถียรอยู่แล้ว พอลงระบบใหม่ สิ่งแรกที่ต้องทำคือปิดมัน ถึงจะยังพังได้เหมือนเดิมถ้ามองมันผิด ๆ แต่อย่างน้อยก็ไม่พังแบบตลก ๆ
  • ทำได้ดี แต่ถ้ามี วิดีโอสาธิต ใน README จะดีมาก

  • ตอนนี้แอปมีหน้าแลนดิ้งเพจที่มีลิงก์ดาวน์โหลดแล้ว และยังดูโปรเจ็กต์อื่น ๆ ได้ด้วย โปรเจ็กต์ใหญ่ที่สุดคือ เบราว์เซอร์ Refrax นอกนั้นก็มีแอปยูทิลิตีเล็ก ๆ อีกหลายตัว
    https://kagerou.glass/phosphene/
    https://kagerou.glass

    • สงสัยว่าทำหน้าเว็บนั้นได้เร็วขนาดนั้นได้ยังไง
      แล้วก็อยากรู้ว่ามีอะไรช่วยเรื่องดีไซน์บ้าง
  • เจ๋งมาก ทำให้นึกขึ้นได้ว่าเคยอยากตั้ง วอลเปเปอร์วิดีโอแบบกำหนดเอง จากคลิปที่มีอยู่
    ก่อนมาเห็นอันนี้ ฉันไม่รู้ด้วยซ้ำว่าระบบไม่ได้รองรับเป็นค่าเริ่มต้น