<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Lock Screen on Jingyuan</title>
        <link>https://jingyuan-zheng.github.io/tags/lock-screen/</link>
        <description>Recent content in Lock Screen on Jingyuan</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-US</language>
        <copyright>Jingyuan Zheng</copyright>
        <lastBuildDate>Tue, 11 Aug 2026 21:45:00 +0200</lastBuildDate><atom:link href="https://jingyuan-zheng.github.io/tags/lock-screen/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>How to Use Any Video as a macOS Wallpaper with System-Level Lock Screen and Unlock Effects (Plus: Snoopy Screen Saver and Wallpaper Guide)</title>
            <link>https://jingyuan-zheng.github.io/p/macos-custom-video-wallpaper-snoopy/</link>
            <pubDate>Tue, 11 Aug 2026 21:45:00 +0200</pubDate>
            <guid>https://jingyuan-zheng.github.io/p/macos-custom-video-wallpaper-snoopy/</guid>
            <description>&lt;img src=&#34;https://jingyuan-zheng.github.io/img/macos-custom-video-wallpaper-snoopy/featured.webp&#34; alt=&#34;Featured image of post How to Use Any Video as a macOS Wallpaper with System-Level Lock Screen and Unlock Effects (Plus: Snoopy Screen Saver and Wallpaper Guide)&#34; /&gt;&lt;p&gt;This guide explains how to add any video to macOS as a system-integrated wallpaper, with Lock Screen playback, a still desktop, and a smooth animated-to-static transition when you unlock your Mac. It also shows how to extract the original high-resolution Snoopy screen saver videos from Apple TV resources.&lt;/p&gt;&#xA;&lt;h2 id=&#34;see-the-result-first&#34;&gt;See the result first&#xA;&lt;/h2&gt;&lt;div class=&#34;post-figure&#34;&gt;&#xA;    &lt;video controls playsinline muted preload=&#34;metadata&#34; poster=&#34;/img/macos-custom-video-wallpaper-snoopy/featured.webp&#34; style=&#34;width: 100%; height: auto; border-radius: 8px;&#34;&gt;&#xA;        &lt;source src=&#34;https://jingyuan-zheng.github.io/img/macos-custom-video-wallpaper-snoopy/lock-screen-demo.mp4&#34; type=&#34;video/mp4&#34;&gt;&#xA;        Your browser does not support HTML5 video playback.&#xA;    &lt;/video&gt;&#xA;    &lt;div class=&#34;caption&#34;&gt;Demo 1: Snoopy plays on the Lock Screen, then settles smoothly into the desktop wallpaper after unlock.&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;the-limits-of-typical-macos-video-wallpaper-appsand-the-missing-snoopy-wallpaper&#34;&gt;The limits of typical macOS video wallpaper apps—and the missing Snoopy wallpaper&#xA;&lt;/h2&gt;&lt;p&gt;Setting a video wallpaper on a Mac usually means installing a dedicated animated-wallpaper app such as Wallpaper Engine. Some of these apps are paid, and many work by keeping a player running continuously behind the desktop. They may not play on the real macOS Lock Screen, cannot reproduce the slow animated-to-still unlock transition, and do not place your videos in the built-in &lt;strong&gt;System Settings → Wallpaper&lt;/strong&gt; picker.&lt;/p&gt;&#xA;&lt;p&gt;Many people also love the Snoopy screen savers included with Apple TV. Unfortunately, Apple has not made them available as native Mac wallpapers. Community ports such as &lt;a class=&#34;link&#34; href=&#34;https://github.com/hitnology/snoopy&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Snoopy&lt;/a&gt; and &lt;a class=&#34;link&#34; href=&#34;https://github.com/Cyber-Yichen/Snoopy-Saver&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Snoopy-Saver&lt;/a&gt; bring the animations to macOS as traditional screen saver modules, but they do not turn them into desktop wallpapers. Some older approaches have also suffered from high memory use, incomplete scene collections, or unreliable playback.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The method in this guide makes a custom video appear alongside Apple’s own wallpapers in System Settings and lets macOS manage playback through its wallpaper pipeline.&lt;/strong&gt; The management app does not need to remain open. The second half of the guide explains how to obtain the complete high-resolution Snoopy videos without installing Xcode. If you already have a video you want to use, skip directly to &lt;a class=&#34;link&#34; href=&#34;#install-the-video-wallpaper&#34; &gt;Install the video wallpaper&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-phosphene-does-differently&#34;&gt;What Phosphene does differently&#xA;&lt;/h2&gt;&lt;p&gt;This method uses &lt;a class=&#34;link&#34; href=&#34;https://github.com/kageroumado/phosphene&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Phosphene&lt;/a&gt;, an open-source macOS app that connects custom videos to the same system wallpaper infrastructure used by Apple’s Aerials. Imported videos appear in the Wallpaper pane, can play on the real Lock Screen, and can ease from motion to a still frame as the Mac unlocks. You can also keep them playing continuously on the desktop if that is the effect you prefer.&lt;/p&gt;&#xA;&lt;p&gt;Phosphene uses macOS’s wallpaper pipeline instead of placing a permanent player window behind your apps. After choosing a wallpaper, you can quit Phosphene completely with &lt;code&gt;⌘ Command + Q&lt;/code&gt;. Its wallpaper extension continues to provide frames to the system &lt;code&gt;WallpaperAgent&lt;/code&gt;, which coordinates desktop, Lock Screen, idle, sleep, and display-state changes.&lt;/p&gt;&#xA;&lt;h3 id=&#34;main-phosphene-features&#34;&gt;Main Phosphene features&#xA;&lt;/h3&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Bring your own video:&lt;/strong&gt; Import MP4, MOV, or another format readable by AVFoundation. The video appears in &lt;strong&gt;System Settings → Wallpaper&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Gapless looping:&lt;/strong&gt; The renderer keeps timestamps continuous across loop boundaries to avoid the usual pause or flash.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Multiple displays and Spaces:&lt;/strong&gt; macOS can preserve different selections for individual displays and desktop Spaces.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Power-aware playback:&lt;/strong&gt; Playback policy responds to power source, battery level, thermal state, Game Mode, and whether the Mac is active, idle, or locked.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Lock Screen-only mode:&lt;/strong&gt; &lt;code&gt;Only on Lock Screen&lt;/code&gt; keeps the desktop still, starts motion when the Mac locks, and eases back to a still frame when it unlocks.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Pause while covered:&lt;/strong&gt; &lt;code&gt;Pause When Hidden&lt;/code&gt; can stop unnecessary rendering when windows completely cover every display.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Adaptive variants:&lt;/strong&gt; Phosphene can prepare lower-resolution or lower-frame-rate versions and select a lighter version when the current power policy calls for it.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Menu bar controls:&lt;/strong&gt; Preview or pause the current wallpaper, switch displays, open Wallpaper settings, or restart the wallpaper agent.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Phosphene relies on an Apple private framework, so a major macOS update may require a corresponding app update. At the time of writing, &lt;strong&gt;Phosphene 1.2.2 requires macOS Tahoe 26 or later&lt;/strong&gt; and ships as a universal build for both Apple silicon and Intel Macs.&lt;/p&gt;&#xA;&lt;h2 id=&#34;setup&#34;&gt;Setup&#xA;&lt;/h2&gt;&lt;h3 id=&#34;install-phosphene&#34;&gt;Install Phosphene&#xA;&lt;/h3&gt;&lt;p&gt;If you use Homebrew, install the app with:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install --cask phosphene&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;Alternatively, download the signed and notarized DMG from the &lt;a class=&#34;link&#34; href=&#34;https://github.com/kageroumado/phosphene/releases/tag/v1.2.2&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Phosphene 1.2.2 release&lt;/a&gt;, drag Phosphene to Applications, and open it.&lt;/p&gt;&#xA;&lt;h3 id=&#34;get-the-original-apple-tv-snoopy-screen-saver-videos&#34;&gt;Get the original Apple TV Snoopy screen saver videos&#xA;&lt;/h3&gt;&lt;p&gt;It is possible to download an Apple TV simulator through Xcode and retrieve the resources from that environment, but doing so is unnecessarily cumbersome for this purpose.&lt;/p&gt;&#xA;&lt;p&gt;The open-source &lt;a class=&#34;link&#34; href=&#34;https://github.com/Cyber-Yichen/Snoopy-Saver&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Snoopy-Saver&lt;/a&gt; project has already collected the complete media resources and packaged them as a Mac screen saver. Snoopy-Saver itself is a traditional &lt;code&gt;.saver&lt;/code&gt; module rather than an Aerial-style wallpaper, so it cannot play on both the desktop and Lock Screen with the system transition used in this guide. We will not install it. We only need to extract the original video files from its disk image.&lt;/p&gt;&#xA;&lt;p&gt;Open the &lt;a class=&#34;link&#34; href=&#34;https://github.com/Cyber-Yichen/Snoopy-Saver/releases/tag/V1.1.0&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Snoopy 1.1 release page&lt;/a&gt; and download these &lt;strong&gt;five assets&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;Install-Snoopy-1.1.zip&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Snoopy-1.1.dmg.part-aa&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Snoopy-1.1.dmg.part-ab&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Snoopy-1.1.dmg.part-ac&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Snoopy-1.1.dmg.part-ad&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Each of the four DMG parts is about 1.85 GB, so check your available storage and network allowance first. You do not need the automatically generated &lt;strong&gt;Source code&lt;/strong&gt; archives (see Figure 1).&lt;/p&gt;&#xA;&lt;div class=&#34;post-figure&#34;&gt;&#xA;    &lt;img src=&#34;https://jingyuan-zheng.github.io/img/macos-custom-video-wallpaper-snoopy/download-assets.webp&#34; alt=&#34;Snoopy-Saver release page showing the installer ZIP and four DMG parts&#34;&gt;&#xA;    &lt;div class=&#34;caption&#34;&gt;Figure 1: Download the installer ZIP and all four DMG parts: aa, ab, ac, and ad.&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Extract &lt;code&gt;Install-Snoopy-1.1.zip&lt;/code&gt; and place the resulting &lt;code&gt;Install Snoopy.command&lt;/code&gt; file in the same folder as all four DMG parts. The original release script reconstructs and verifies the disk image, then installs the screen saver. Because we only need the media files, do not run the original script yet. Instead, right-click &lt;code&gt;Install Snoopy.command&lt;/code&gt; in Finder and choose &lt;strong&gt;Open With → TextEdit&lt;/strong&gt; (see Figure 2).&lt;/p&gt;&#xA;&lt;div class=&#34;post-figure&#34;&gt;&#xA;    &lt;img src=&#34;https://jingyuan-zheng.github.io/img/macos-custom-video-wallpaper-snoopy/edit-installer-script.webp&#34; alt=&#34;Opening Install Snoopy.command with TextEdit from the Finder context menu&#34;&gt;&#xA;    &lt;div class=&#34;caption&#34;&gt;Figure 2: Open the command file in TextEdit instead of running the original installer.&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Press &lt;code&gt;⌘ Command + A&lt;/code&gt; to select the entire file, delete its contents, and replace them with this script:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;32&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;33&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;34&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;35&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;36&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;37&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;38&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;39&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;40&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;41&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;42&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;43&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;44&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;45&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;46&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;47&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;48&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;49&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;50&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;51&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;52&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;53&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;54&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;55&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;56&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;57&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;58&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;59&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;60&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;61&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;62&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;63&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;64&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -euo pipefail&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;EXPECTED_SHA256&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;63b20990a6d6d7aaa6e485bac91587a28e19eb2acedf465f0acfeeea089f8b17&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PART_NAMES&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;Snoopy-1.1.dmg.part-aa&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;Snoopy-1.1.dmg.part-ab&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;Snoopy-1.1.dmg.part-ac&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;Snoopy-1.1.dmg.part-ad&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SCRIPT_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;dirname &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$0&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;pwd&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PART_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; candidate in &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SCRIPT_DIR&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;dirname &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SCRIPT_DIR&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;complete&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; name in &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PART_NAMES&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[@]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; -f &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$candidate&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$name&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;complete&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$complete&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; -eq &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;PART_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$candidate&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;break&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PART_DIR&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Error: not all four DMG parts could be found.&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Please place the installer and all four DMG parts in the same folder.&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  /usr/bin/osascript -e &lt;span class=&#34;s1&#34;&gt;&amp;#39;display alert &amp;#34;Missing Snoopy Files&amp;#34; message &amp;#34;Place the installer and all four DMG parts in the same folder, then open the command again.&amp;#34; as critical&amp;#39;&lt;/span&gt; &amp;gt;/dev/null 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;DMG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PART_DIR&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/Snoopy-1.1.dmg&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;TEMP_DMG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PART_DIR&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/Snoopy-1.1.dmg.tmp&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cleanup&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  rm -f &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TEMP_DMG&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;trap&lt;/span&gt; cleanup EXIT INT TERM&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Reassembling the Snoopy 1.1 DMG. Please wait…&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; name in &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PART_NAMES&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[@]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  /bin/cat &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PART_DIR&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$name&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt; &amp;gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TEMP_DMG&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Verifying SHA-256…&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ACTUAL_SHA256&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;shasum -a &lt;span class=&#34;m&#34;&gt;256&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TEMP_DMG&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $1}&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ACTUAL_SHA256&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; !&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$EXPECTED_SHA256&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Error: DMG verification failed. Download all four parts again.&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  /usr/bin/osascript -e &lt;span class=&#34;s1&#34;&gt;&amp;#39;display alert &amp;#34;Damaged Snoopy Installer&amp;#34; message &amp;#34;The DMG failed SHA-256 verification. Delete the four parts and download them again.&amp;#34; as critical&amp;#39;&lt;/span&gt; &amp;gt;/dev/null 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv -f &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TEMP_DMG&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DMG&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;DMG reconstruction complete:&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DMG&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;open -R &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DMG&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt;/dev/null 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/bin/osascript -e &lt;span class=&#34;s1&#34;&gt;&amp;#39;display dialog &amp;#34;The Snoopy 1.1 DMG was reconstructed and passed SHA-256 verification.&amp;#34; buttons {&amp;#34;OK&amp;#34;} default button &amp;#34;OK&amp;#34; with icon note&amp;#39;&lt;/span&gt; &amp;gt;/dev/null 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;This version keeps the release’s part checks and SHA-256 verification, but removes the step that installs the screen saver. It only combines the four downloaded parts into a complete DMG.&lt;/p&gt;&#xA;&lt;p&gt;Save the file and double-click &lt;code&gt;Install Snoopy.command&lt;/code&gt;. When it finishes, the script creates &lt;code&gt;Snoopy-1.1.dmg&lt;/code&gt; in the same folder and reveals it in Finder. If macOS blocks the command, first confirm that every file came from the project release above, then right-click the command and choose &lt;strong&gt;Open&lt;/strong&gt;. If necessary, go to &lt;strong&gt;System Settings → Privacy &amp;amp; Security&lt;/strong&gt; and choose &lt;strong&gt;Open Anyway&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Open the reconstructed DMG. It contains &lt;code&gt;Snoopy.saver&lt;/code&gt;. Drag this bundle to a normal writable folder, such as the folder containing your downloads. Searching directly inside the read-only disk image is less convenient (see Figure 3).&lt;/p&gt;&#xA;&lt;div class=&#34;post-figure&#34;&gt;&#xA;    &lt;img src=&#34;https://jingyuan-zheng.github.io/img/macos-custom-video-wallpaper-snoopy/snoopy-dmg.webp&#34; alt=&#34;Snoopy.saver inside the mounted Snoopy 1.1 disk image&#34;&gt;&#xA;    &lt;div class=&#34;caption&#34;&gt;Figure 3: Copy Snoopy.saver from the mounted disk image to a normal folder.&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Right-click the copied &lt;code&gt;Snoopy.saver&lt;/code&gt;. &lt;strong&gt;Do not double-click it and do not choose the first Open command.&lt;/strong&gt; Select &lt;strong&gt;Show Package Contents&lt;/strong&gt; instead (see Figure 4).&lt;/p&gt;&#xA;&lt;div class=&#34;post-figure&#34;&gt;&#xA;    &lt;img src=&#34;https://jingyuan-zheng.github.io/img/macos-custom-video-wallpaper-snoopy/show-package-contents.webp&#34; alt=&#34;Show Package Contents in the Finder context menu for Snoopy.saver&#34;&gt;&#xA;    &lt;div class=&#34;caption&#34;&gt;Figure 4: Right-click Snoopy.saver and choose Show Package Contents.&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;You do not need to work through the bundle’s nested directories manually. Search for &lt;code&gt;.mov&lt;/code&gt; in Finder and keep the search scope set to &lt;code&gt;Snoopy.saver&lt;/code&gt;. Sort the results by size to surface the full wallpaper scenes quickly. The bundle also contains very short transitions and image resources, while the larger MOV files are more likely to be complete scenes (see Figure 5).&lt;/p&gt;&#xA;&lt;div class=&#34;post-figure&#34;&gt;&#xA;    &lt;img src=&#34;https://jingyuan-zheng.github.io/img/macos-custom-video-wallpaper-snoopy/search-mov-files.webp&#34; alt=&#34;Searching Snoopy.saver for MOV videos and sorting the results by size&#34;&gt;&#xA;    &lt;div class=&#34;caption&#34;&gt;Figure 5: Search for .mov inside the bundle and sort by size to find complete scenes.&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h3 id=&#34;install-the-video-wallpaper&#34;&gt;Install the video wallpaper&#xA;&lt;/h3&gt;&lt;p&gt;Open Phosphene and drag one or more Snoopy videos into its main window. You can also click the &lt;code&gt;+&lt;/code&gt; button at the top-right and select the files manually.&lt;/p&gt;&#xA;&lt;p&gt;Snoopy is optional. Phosphene can import any compatible video you have recorded or downloaded.&lt;/p&gt;&#xA;&lt;div class=&#34;post-figure&#34;&gt;&#xA;    &lt;img src=&#34;https://jingyuan-zheng.github.io/img/macos-custom-video-wallpaper-snoopy/phosphene-library.webp&#34; alt=&#34;Snoopy videos imported into the Phosphene library&#34;&gt;&#xA;    &lt;div class=&#34;caption&#34;&gt;Figure 6: Imported videos appear as cards in the Phosphene library.&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Select a video to see its resolution, frame rate, duration, file size, and codec. Under &lt;code&gt;Optimization&lt;/code&gt;, Phosphene offers &lt;code&gt;Battery Saver&lt;/code&gt;, &lt;code&gt;Balanced&lt;/code&gt;, and &lt;code&gt;Quality&lt;/code&gt;. After choosing a profile, &lt;code&gt;Create Variants&lt;/code&gt; prepares versions suitable for different power conditions.&lt;/p&gt;&#xA;&lt;p&gt;I recommend starting with the default &lt;code&gt;Balanced&lt;/code&gt; profile. Choose &lt;code&gt;Quality&lt;/code&gt; if image fidelity matters more than storage and power use, or &lt;code&gt;Battery Saver&lt;/code&gt; when runtime is the priority.&lt;/p&gt;&#xA;&lt;div class=&#34;post-figure&#34;&gt;&#xA;    &lt;img src=&#34;https://jingyuan-zheng.github.io/img/macos-custom-video-wallpaper-snoopy/phosphene-quality.webp&#34; alt=&#34;Battery Saver, Balanced, and Quality optimization profiles in Phosphene&#34;&gt;&#xA;    &lt;div class=&#34;caption&#34;&gt;Figure 7: Balanced is a sensible default, with Battery Saver and Quality available when needed.&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;The source video still matters most. A MacBook’s high-density display benefits from a sharp, stable, landscape-format clip. Raising the optimization setting cannot restore detail that is absent from a low-resolution original.&lt;/p&gt;&#xA;&lt;p&gt;If you need 4K footage, these libraries are useful starting points:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.pexels.com/home/videos/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Pexels Videos&lt;/a&gt; for nature, city, and lifestyle footage.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://pixabay.com/videos/search/4k/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Pixabay 4K Videos&lt;/a&gt; for a browsable 4K collection.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://mixkit.co/free-stock-video/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Mixkit Stock Video&lt;/a&gt; for 4K and HD clips with the applicable licence shown for each item.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.ysjf.com/material&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;MediaStorm Material Library&lt;/a&gt; for another collection of high-resolution footage.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Licensing varies between sites and individual clips. Check the licence on the specific download page, especially before redistributing a clip, using it commercially, or using media that contains a third-party character.&lt;/p&gt;&#xA;&lt;p&gt;Once the import finishes, macOS registers the video wallpaper. Open &lt;strong&gt;System Settings → Wallpaper&lt;/strong&gt; and find the &lt;strong&gt;Phosphene — Video Wallpapers&lt;/strong&gt; collection alongside Apple’s built-in choices. Select a video just as you would select a system wallpaper (see Figure 8).&lt;/p&gt;&#xA;&lt;p&gt;Phosphene is the library and settings interface. After selecting a wallpaper, you can quit the app with &lt;code&gt;⌘ Command + Q&lt;/code&gt;; the macOS wallpaper process and Phosphene extension continue to handle playback.&lt;/p&gt;&#xA;&lt;div class=&#34;post-figure&#34;&gt;&#xA;    &lt;img src=&#34;https://jingyuan-zheng.github.io/img/macos-custom-video-wallpaper-snoopy/system-wallpaper.webp&#34; alt=&#34;Phosphene Video Wallpapers collection in macOS Wallpaper settings&#34;&gt;&#xA;    &lt;div class=&#34;caption&#34;&gt;Figure 8: Imported videos appear in their own collection in System Settings.&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;To remove a video later, select it in Phosphene and use &lt;code&gt;Delete from Library&lt;/code&gt;. You can also choose &lt;code&gt;Show in Finder&lt;/code&gt; to inspect its stored file before removing it manually.&lt;/p&gt;&#xA;&lt;p&gt;By default, the video continues playing on both the desktop and the Lock Screen:&lt;/p&gt;&#xA;&lt;div class=&#34;post-figure&#34;&gt;&#xA;    &lt;video controls playsinline muted preload=&#34;metadata&#34; poster=&#34;/img/macos-custom-video-wallpaper-snoopy/desktop-poster.webp&#34; style=&#34;width: 100%; height: auto; border-radius: 8px;&#34;&gt;&#xA;        &lt;source src=&#34;https://jingyuan-zheng.github.io/img/macos-custom-video-wallpaper-snoopy/desktop-demo.mp4&#34; type=&#34;video/mp4&#34;&gt;&#xA;        Your browser does not support HTML5 video playback.&#xA;    &lt;/video&gt;&#xA;    &lt;div class=&#34;caption&#34;&gt;Demo 2: The video wallpaper continues playing on the desktop.&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;For the Apple Aerial-style behaviour—motion on the Lock Screen, a still desktop, and a smooth transition back to the still frame when you unlock—click the Phosphene menu bar icon, expand &lt;code&gt;Options&lt;/code&gt;, and enable &lt;code&gt;Only on Lock Screen&lt;/code&gt; (see Figure 9).&lt;/p&gt;&#xA;&lt;div class=&#34;post-figure&#34;&gt;&#xA;    &lt;img src=&#34;https://jingyuan-zheng.github.io/img/macos-custom-video-wallpaper-snoopy/only-on-lock-screen.webp&#34; alt=&#34;Only on Lock Screen enabled in the Phosphene menu bar options&#34;&gt;&#xA;    &lt;div class=&#34;caption&#34;&gt;Figure 9: Enable Only on Lock Screen to keep the desktop still.&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;summary&#34;&gt;Summary&#xA;&lt;/h2&gt;&lt;p&gt;The important difference is that this method does not simply place a looping video window behind the desktop. It adds the video to the macOS wallpaper pipeline. The wallpaper appears in System Settings, macOS coordinates desktop, Lock Screen, sleep, and unlock transitions, and the Phosphene management app does not need to remain open.&lt;/p&gt;&#xA;&lt;p&gt;If you already have a suitable video, the workflow is short: install Phosphene, import the file, and select it in Wallpaper settings. The Snoopy extraction is entirely optional. Enable &lt;code&gt;Only on Lock Screen&lt;/code&gt; for the closest match to Apple’s Aerial behaviour, or leave it disabled when you want continuous desktop animation.&lt;/p&gt;&#xA;&lt;p&gt;The main limitation is that Phosphene depends on an undocumented framework and the current release requires macOS Tahoe 26 or later. On a supported system, it is the closest implementation I have found to a native custom macOS video wallpaper.&lt;/p&gt;&#xA;&lt;h2 id=&#34;frequently-asked-questions&#34;&gt;Frequently asked questions&#xA;&lt;/h2&gt;&lt;h3 id=&#34;which-macs-does-phosphene-support&#34;&gt;Which Macs does Phosphene support?&#xA;&lt;/h3&gt;&lt;p&gt;At the time of writing, Phosphene 1.2.2 requires macOS Tahoe 26 or later. Its release is universal and supports both Apple silicon and Intel Macs. Because the app relies on a private framework, check its README or Releases after a major macOS upgrade.&lt;/p&gt;&#xA;&lt;h3 id=&#34;do-i-have-to-download-snoopy-saver&#34;&gt;Do I have to download Snoopy-Saver?&#xA;&lt;/h3&gt;&lt;p&gt;No. Snoopy-Saver is only used to obtain the Apple TV Snoopy video files. If you want to use your own video, install Phosphene and go directly to &lt;a class=&#34;link&#34; href=&#34;#install-the-video-wallpaper&#34; &gt;Install the video wallpaper&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;why-does-the-wallpaper-keep-playing-after-i-quit-phosphene&#34;&gt;Why does the wallpaper keep playing after I quit Phosphene?&#xA;&lt;/h3&gt;&lt;p&gt;The main app manages the library and settings. The wallpaper extension runs inside the macOS &lt;code&gt;WallpaperAgent&lt;/code&gt; process and supplies the actual frames, so quitting the management app does not stop the selected wallpaper.&lt;/p&gt;&#xA;&lt;h3 id=&#34;what-should-i-do-if-the-wallpaper-is-grey-frozen-or-showing-the-wrong-video&#34;&gt;What should I do if the wallpaper is grey, frozen, or showing the wrong video?&#xA;&lt;/h3&gt;&lt;p&gt;Open the Phosphene menu bar menu and choose &lt;code&gt;Restart Wallpaper Agent&lt;/code&gt;. The project documentation notes that switching video wallpapers very quickly can occasionally leave the macOS wallpaper process out of sync. Restarting that agent usually restores playback without restarting the whole Mac.&lt;/p&gt;&#xA;&lt;h3 id=&#34;how-can-i-reduce-power-consumption&#34;&gt;How can I reduce power consumption?&#xA;&lt;/h3&gt;&lt;p&gt;Enable &lt;code&gt;Only on Lock Screen&lt;/code&gt; so the desktop remains still, enable &lt;code&gt;Pause When Hidden&lt;/code&gt;, or create &lt;code&gt;Balanced&lt;/code&gt; or &lt;code&gt;Battery Saver&lt;/code&gt; variants. Source resolution, frame rate, and codec complexity also affect power use.&lt;/p&gt;&#xA;&lt;h3 id=&#34;why-modify-the-snoopy-saver-installer-script&#34;&gt;Why modify the Snoopy-Saver installer script?&#xA;&lt;/h3&gt;&lt;p&gt;The original script reconstructs and verifies the DMG, then installs &lt;code&gt;Snoopy.saver&lt;/code&gt; in the user’s screen saver directory. This guide only needs the media files. The replacement script stops after reconstruction and SHA-256 verification, and it does not alter the four downloaded parts.&lt;/p&gt;&#xA;&lt;h3 id=&#34;can-i-redistribute-or-commercially-use-the-snoopy-videos&#34;&gt;Can I redistribute or commercially use the Snoopy videos?&#xA;&lt;/h3&gt;&lt;p&gt;Do not assume so. Snoopy, the Apple TV media, and related assets have their own rights holders. Snoopy-Saver also states that it is not affiliated with Peanuts Worldwide LLC, Peanuts, or Apple Inc. This extraction method is best treated as a personal learning and private-use workflow. Follow the applicable licence for any other footage you import.&lt;/p&gt;&#xA;&lt;h2 id=&#34;references&#34;&gt;References&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/kageroumado/phosphene&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Phosphene project and documentation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/kageroumado/phosphene/releases/tag/v1.2.2&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Phosphene 1.2.2 release&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Cyber-Yichen/Snoopy-Saver/releases/tag/V1.1.0&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Snoopy-Saver: Snoopy 1.1 release and split-DMG instructions&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/hitnology/snoopy&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;hitnology/snoopy macOS screen saver port&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.reddit.com/r/MacOS/comments/1i74ut2/psa_the_absolute_easiest_way_to_get_the_snoopy/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Reddit: The absolute easiest way to get the Snoopy screen saver on macOS&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.reddit.com/r/MacOS/comments/1i84ccr/snoopy_custom_screensaver_with_download_link/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Reddit: Snoopy custom screensaver (with download link)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.reddit.com/r/MacOS/comments/1i1myyk/apple_tv_snoopy_screen_saver_now_can_use_on_macos/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Reddit: Apple TV Snoopy Screen Saver now can use on macOS&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.youtube.com/watch?v=TSOQLyqEL8U&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;YouTube: macOS Snoopy screen saver demonstration&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;disclaimer&#34;&gt;Disclaimer&#xA;&lt;/h2&gt;&lt;p&gt;This article is an independently written, unofficial technical guide intended only for learning and discussion. It is not affiliated with, authorized by, endorsed by, or produced in cooperation with Peanuts Worldwide LLC, Apple Inc., or any of their affiliated companies.&lt;/p&gt;&#xA;&lt;p&gt;The rights to Snoopy, Peanuts, and related characters, names, and materials belong to their respective rights holders. Apple, Apple TV, tvOS, macOS, and related trademarks and materials belong to Apple Inc. This site neither provides nor hosts the original Apple TV Snoopy video files and does not grant any right to copy, redistribute, or commercially use the related materials. Please use these resources only for personal learning and non-commercial purposes where you have lawful access to them.&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
