<?xml version="1.0" encoding="utf-8" standalone="yes"?><?xml-stylesheet type="text/xsl" href="rss-style.xsl"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:webfeeds="http://webfeeds.org/rss/1.0"><channel><title>技术 on 醒石</title><link>https://leonscave.com/tags/%E6%8A%80%E6%9C%AF/</link><description>Recent content in 技术 on 醒石</description><generator>Hugo</generator><language>zh-CN</language><managingEditor>leon.its@outlook.com (leon)</managingEditor><webMaster>leon.its@outlook.com (leon)</webMaster><lastBuildDate>Mon, 21 Apr 2025 23:40:04 +0000</lastBuildDate><atom:link href="https://leonscave.com/tags/%E6%8A%80%E6%9C%AF/index.xml" rel="self" type="application/rss+xml"/><item><title>使用 Python 脚本批量下载 macOS 航拍屏保/壁纸</title><link>https://leonscave.com/p/2025/python-script-download-macos-aerial-screensaver/</link><pubDate>Mon, 21 Apr 2025 23:40:04 +0000</pubDate><author>leon.its@outlook.com (leon)</author><guid>https://leonscave.com/p/2025/python-script-download-macos-aerial-screensaver/</guid><description>&lt;p&gt;从 macOS Sonoma 版本开始，Apple 为 Mac 提供了新的屏幕保护程序。&lt;/p&gt;&#10;&lt;figure&gt;&lt;a&#10; data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/posts/2025/python-script-download-macos-aerial-screensaver/python-script-download-macos-aerial-screensaver-1.png"&gt;&#10;&#10; &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/posts/2025/python-script-download-macos-aerial-screensaver/python-script-download-macos-aerial-screensaver-1.png"&#10; alt="macOS 航拍屏幕保护程序设置界面"&#10; loading="lazy"&#10; &gt; &lt;/a&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;这些屏保都是 4K 航拍视频，可同时设置为壁纸。设置为壁纸后从屏保切回桌面会有一段动态过渡动画。效果非常不错，种类也很多。&lt;/p&gt;&#10;&lt;p&gt;由于是 4K 画质，很占空间，这些屏保并没有预载在系统里。除了预设的几款屏保，其他都需要在设置中点击后等待程序自动下载，但是下载速度非常慢，经常只有十几 kb。&lt;/p&gt;&#10;&lt;figure&gt;&lt;a&#10; data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/posts/2025/python-script-download-macos-aerial-screensaver/python-script-download-macos-aerial-screensaver-2.png"&gt;&#10;&#10; &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/posts/2025/python-script-download-macos-aerial-screensaver/python-script-download-macos-aerial-screensaver-2.png"&#10; alt="macOS 航拍屏保下载速度缓慢"&#10; loading="lazy"&#10; &gt; &lt;/a&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;查了一下资料，这些屏保都存储在 &lt;code&gt;/Library/Application\ Support/com.apple.idleassetsd/Customer&lt;/code&gt; 目录下，而元数据则存储在同目录下的&#10;&lt;code&gt;entries.json&lt;/code&gt; 文件中。&lt;/p&gt;&#10;&lt;p&gt;那事情就好办了，我写了一个 Python 脚本，可以直接批量将这些屏保下载下来。&lt;/p&gt;&#10;&lt;h3 id="脚本代码"&gt;脚本代码&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;import&lt;/span&gt; &lt;span style="color:#24292e"&gt;json&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 2&lt;/span&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;import&lt;/span&gt; &lt;span style="color:#24292e"&gt;asyncio&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 3&lt;/span&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;import&lt;/span&gt; &lt;span style="color:#24292e"&gt;sys&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 4&lt;/span&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;from&lt;/span&gt; &lt;span style="color:#24292e"&gt;argparse&lt;/span&gt; &lt;span style="color:#cf222e"&gt;import&lt;/span&gt; ArgumentParser&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 5&lt;/span&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;from&lt;/span&gt; &lt;span style="color:#24292e"&gt;pathlib&lt;/span&gt; &lt;span style="color:#cf222e"&gt;import&lt;/span&gt; Path&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 6&lt;/span&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;import&lt;/span&gt; &lt;span style="color:#24292e"&gt;plistlib&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 7&lt;/span&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 8&lt;/span&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;import&lt;/span&gt; &lt;span style="color:#24292e"&gt;httpx&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 9&lt;/span&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;from&lt;/span&gt; &lt;span style="color:#24292e"&gt;tqdm&lt;/span&gt; &lt;span style="color:#cf222e"&gt;import&lt;/span&gt; tqdm&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 10&lt;/span&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 11&lt;/span&gt;&lt;span&gt;BASE_PATH &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; Path&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;/Library/Application Support/com.apple.idleassetsd/Customer&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 12&lt;/span&gt;&lt;span&gt;DEST_PATH &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; BASE_PATH &lt;span style="color:#0550ae"&gt;/&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;4KSDR240FPS&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 13&lt;/span&gt;&lt;span&gt;ENTRIES_FILE &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; BASE_PATH &lt;span style="color:#0550ae"&gt;/&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;entries.json&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 14&lt;/span&gt;&lt;span&gt;LOCALIZABLE_FILE &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; BASE_PATH &lt;span style="color:#0550ae"&gt;/&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;TVIdleScreenStrings.bundle/zh_CN.lproj/Localizable.nocache.strings&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 15&lt;/span&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 16&lt;/span&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;load_localizable_strings&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#6639ba"&gt;dict&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 17&lt;/span&gt;&lt;span&gt; strings &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 18&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; LOCALIZABLE_FILE&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;exists&lt;span style="color:#1f2328"&gt;():&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 19&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;with&lt;/span&gt; LOCALIZABLE_FILE&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;open&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;rb&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;as&lt;/span&gt; f&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 20&lt;/span&gt;&lt;span&gt; plist_data &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; plistlib&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;load&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;f&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 21&lt;/span&gt;&lt;span&gt; strings&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;update&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;plist_data&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 22&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; strings&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 23&lt;/span&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 24&lt;/span&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;get_localized_name&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;key&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#6639ba"&gt;str&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; strings&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#6639ba"&gt;dict&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#6639ba"&gt;str&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 25&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; strings&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;get&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;key&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; key&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 26&lt;/span&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 27&lt;/span&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;download_asset_sync&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;item&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#6639ba"&gt;dict&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; dst&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; Path&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 28&lt;/span&gt;&lt;span&gt; name &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0a3069"&gt;f&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;{&lt;/span&gt;item&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;categoryName&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;: &lt;/span&gt;&lt;span style="color:#0a3069"&gt;{&lt;/span&gt;item&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;assetName&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 29&lt;/span&gt;&lt;span&gt; tqdm&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;write&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;f&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Downloading: &lt;/span&gt;&lt;span style="color:#0a3069"&gt;{&lt;/span&gt;name&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 30&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;try&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 31&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;with&lt;/span&gt; dst&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;open&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;wb&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;as&lt;/span&gt; download_file&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 32&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;with&lt;/span&gt; httpx&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;stream&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;GET&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; item&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;url-4K-SDR-240FPS&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;],&lt;/span&gt; verify&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;False&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;as&lt;/span&gt; response&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 33&lt;/span&gt;&lt;span&gt; total &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;int&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;response&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;headers&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;get&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Content-Length&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 34&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;with&lt;/span&gt; tqdm&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;total&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;total&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; unit&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;B&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; unit_scale&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;True&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; unit_divisor&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1024&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; desc&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;name&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; position&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; leave&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;False&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;as&lt;/span&gt; progress&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 35&lt;/span&gt;&lt;span&gt; num_bytes_downloaded &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; response&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;num_bytes_downloaded&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 36&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; chunk &lt;span style="color:#0550ae"&gt;in&lt;/span&gt; response&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;iter_bytes&lt;span style="color:#1f2328"&gt;():&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 37&lt;/span&gt;&lt;span&gt; download_file&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;write&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;chunk&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 38&lt;/span&gt;&lt;span&gt; progress&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;update&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;response&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;num_bytes_downloaded &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; num_bytes_downloaded&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 39&lt;/span&gt;&lt;span&gt; num_bytes_downloaded &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; response&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;num_bytes_downloaded&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 40&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;except&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;httpx&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;RequestError&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; httpx&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;HTTPStatusError&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;as&lt;/span&gt; e&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 41&lt;/span&gt;&lt;span&gt; tqdm&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;write&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;f&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Error downloading &lt;/span&gt;&lt;span style="color:#0a3069"&gt;{&lt;/span&gt;name&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;: &lt;/span&gt;&lt;span style="color:#0a3069"&gt;{&lt;/span&gt;e&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 42&lt;/span&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 43&lt;/span&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;async&lt;/span&gt; &lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;download_asset_async&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;client&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; item&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#6639ba"&gt;dict&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; dst&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; Path&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; position&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#6639ba"&gt;int&lt;/span&gt;&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 44&lt;/span&gt;&lt;span&gt; name &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0a3069"&gt;f&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;{&lt;/span&gt;item&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;categoryName&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;: &lt;/span&gt;&lt;span style="color:#0a3069"&gt;{&lt;/span&gt;item&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;assetName&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 45&lt;/span&gt;&lt;span&gt; tqdm&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;write&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;f&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Downloading: &lt;/span&gt;&lt;span style="color:#0a3069"&gt;{&lt;/span&gt;name&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 46&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;try&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 47&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;async&lt;/span&gt; &lt;span style="color:#cf222e"&gt;with&lt;/span&gt; client&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;stream&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;GET&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; item&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;url-4K-SDR-240FPS&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;])&lt;/span&gt; &lt;span style="color:#cf222e"&gt;as&lt;/span&gt; response&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 48&lt;/span&gt;&lt;span&gt; total &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;int&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;response&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;headers&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;get&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Content-Length&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 49&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;with&lt;/span&gt; tqdm&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;total&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;total&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; unit&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;B&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; unit_scale&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;True&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; unit_divisor&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1024&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; desc&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;name&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; position&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;position&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; leave&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;False&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;as&lt;/span&gt; progress&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 50&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;with&lt;/span&gt; dst&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;open&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;wb&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;as&lt;/span&gt; download_file&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 51&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;async&lt;/span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; chunk &lt;span style="color:#0550ae"&gt;in&lt;/span&gt; response&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;aiter_bytes&lt;span style="color:#1f2328"&gt;():&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 52&lt;/span&gt;&lt;span&gt; download_file&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;write&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;chunk&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 53&lt;/span&gt;&lt;span&gt; progress&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;update&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;len&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;chunk&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 54&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;except&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;httpx&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;RequestError&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; httpx&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;HTTPStatusError&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;as&lt;/span&gt; e&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 55&lt;/span&gt;&lt;span&gt; tqdm&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;write&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;f&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Error downloading &lt;/span&gt;&lt;span style="color:#0a3069"&gt;{&lt;/span&gt;name&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;: &lt;/span&gt;&lt;span style="color:#0a3069"&gt;{&lt;/span&gt;e&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 56&lt;/span&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 57&lt;/span&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;async&lt;/span&gt; &lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;download_asset_concurrent&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;items&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#6639ba"&gt;list&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; max_concurrent&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#6639ba"&gt;int&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;5&lt;/span&gt;&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 58&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;async&lt;/span&gt; &lt;span style="color:#cf222e"&gt;with&lt;/span&gt; httpx&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;AsyncClient&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;verify&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;False&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; timeout&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;30.0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;as&lt;/span&gt; client&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 59&lt;/span&gt;&lt;span&gt; tasks &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 60&lt;/span&gt;&lt;span&gt; pending_items &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;item &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; item &lt;span style="color:#0550ae"&gt;in&lt;/span&gt; items &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#0550ae"&gt;not&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;DEST_PATH &lt;span style="color:#0550ae"&gt;/&lt;/span&gt; &lt;span style="color:#0a3069"&gt;f&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;{&lt;/span&gt;item&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;.mov&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;exists&lt;span style="color:#1f2328"&gt;()&lt;/span&gt; &lt;span style="color:#0550ae"&gt;and&lt;/span&gt; item&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;get&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;url-4K-SDR-240FPS&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 61&lt;/span&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 62&lt;/span&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# 预留进度条行&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 63&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; i &lt;span style="color:#0550ae"&gt;in&lt;/span&gt; &lt;span style="color:#6639ba"&gt;range&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;min&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;max_concurrent&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;len&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;pending_items&lt;span style="color:#1f2328"&gt;))):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 64&lt;/span&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;f&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;\033&lt;/span&gt;&lt;span style="color:#0a3069"&gt;[K&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; end&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# 清除行&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 65&lt;/span&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt; &lt;span style="color:#57606a"&gt;# 预留一行&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 66&lt;/span&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;f&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;\033&lt;/span&gt;&lt;span style="color:#0a3069"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;{&lt;/span&gt;&lt;span style="color:#6639ba"&gt;min&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;max_concurrent&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;len&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;pending_items&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;A&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; end&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; flush&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;True&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# 移动光标到第一行&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 67&lt;/span&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 68&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; index&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; item &lt;span style="color:#0550ae"&gt;in&lt;/span&gt; &lt;span style="color:#6639ba"&gt;enumerate&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;pending_items&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 69&lt;/span&gt;&lt;span&gt; position &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;index &lt;span style="color:#0550ae"&gt;%&lt;/span&gt; max_concurrent&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;+&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt; &lt;span style="color:#57606a"&gt;# 分配行号（1 到 max_concurrent）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 70&lt;/span&gt;&lt;span&gt; tasks&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;append&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;download_asset_async&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;client&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; item&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; DEST_PATH &lt;span style="color:#0550ae"&gt;/&lt;/span&gt; &lt;span style="color:#0a3069"&gt;f&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;{&lt;/span&gt;item&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;.mov&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; position&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 71&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#6639ba"&gt;len&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;tasks&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;gt;=&lt;/span&gt; max_concurrent&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 72&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;await&lt;/span&gt; asyncio&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;gather&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;tasks&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; return_exceptions&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;True&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 73&lt;/span&gt;&lt;span&gt; tasks &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 74&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; tasks&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 75&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;await&lt;/span&gt; asyncio&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;gather&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;tasks&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; return_exceptions&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;True&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 76&lt;/span&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 77&lt;/span&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# 清除进度条区域&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 78&lt;/span&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;f&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;\033&lt;/span&gt;&lt;span style="color:#0a3069"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;{&lt;/span&gt;&lt;span style="color:#6639ba"&gt;min&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;max_concurrent&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;len&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;pending_items&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;A&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; end&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; flush&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;True&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 79&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; _ &lt;span style="color:#0550ae"&gt;in&lt;/span&gt; &lt;span style="color:#6639ba"&gt;range&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;min&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;max_concurrent&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;len&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;pending_items&lt;span style="color:#1f2328"&gt;))):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 80&lt;/span&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;f&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;\033&lt;/span&gt;&lt;span style="color:#0a3069"&gt;[K&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; end&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# 清除行&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 81&lt;/span&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 82&lt;/span&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 83&lt;/span&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;main&lt;/span&gt;&lt;span style="color:#1f2328"&gt;():&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 84&lt;/span&gt;&lt;span&gt; parser &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; ArgumentParser&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;description&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Download macOS Aerial screensaver assets&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 85&lt;/span&gt;&lt;span&gt; parser&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;add_argument&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;--batch&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; nargs&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;?&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; const&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;5&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;type&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#6639ba"&gt;int&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; metavar&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;SIZE&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; help&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Use concurrent downloads, 5 tasks by default&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 86&lt;/span&gt;&lt;span&gt; args &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; parser&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;parse_args&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 87&lt;/span&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 88&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#0550ae"&gt;not&lt;/span&gt; ENTRIES_FILE&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;exists&lt;span style="color:#1f2328"&gt;():&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 89&lt;/span&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;f&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Error: &lt;/span&gt;&lt;span style="color:#0a3069"&gt;{&lt;/span&gt;ENTRIES_FILE&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt; not found&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 90&lt;/span&gt;&lt;span&gt; sys&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;exit&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 91&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;with&lt;/span&gt; ENTRIES_FILE&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;open&lt;span style="color:#1f2328"&gt;()&lt;/span&gt; &lt;span style="color:#cf222e"&gt;as&lt;/span&gt; f&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 92&lt;/span&gt;&lt;span&gt; data &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; json&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;load&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;f&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 93&lt;/span&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 94&lt;/span&gt;&lt;span&gt; localizable_strings &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; load_localizable_strings&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 95&lt;/span&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 96&lt;/span&gt;&lt;span&gt; categories &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 97&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; category &lt;span style="color:#0550ae"&gt;in&lt;/span&gt; data&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;get&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;categories&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[]):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 98&lt;/span&gt;&lt;span&gt; category_name &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; get_localized_name&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;category&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;localizedNameKey&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;],&lt;/span&gt; localizable_strings&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 99&lt;/span&gt;&lt;span&gt; categories&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;category&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; category_name&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;100&lt;/span&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;101&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; asset &lt;span style="color:#0550ae"&gt;in&lt;/span&gt; data&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;get&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;assets&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[]):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;102&lt;/span&gt;&lt;span&gt; category_id &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; asset&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;get&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;categories&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;])[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;103&lt;/span&gt;&lt;span&gt; asset&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;categoryName&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; categories&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;get&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;category_id&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;104&lt;/span&gt;&lt;span&gt; asset&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;assetName&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; get_localized_name&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;asset&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;localizedNameKey&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;],&lt;/span&gt; localizable_strings&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;105&lt;/span&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;106&lt;/span&gt;&lt;span&gt; DEST_PATH&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;mkdir&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;parents&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;True&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; exist_ok&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;True&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;107&lt;/span&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;108&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; args&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;batch&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;109&lt;/span&gt;&lt;span&gt; asyncio&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;run&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;download_asset_concurrent&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;data&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;get&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;assets&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[]),&lt;/span&gt; max_concurrent&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;args&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;batch&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;110&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;else&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;111&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; item &lt;span style="color:#0550ae"&gt;in&lt;/span&gt; tqdm&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;data&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;get&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;assets&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[]),&lt;/span&gt; desc&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Processing assets&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; position&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;112&lt;/span&gt;&lt;span&gt; dst &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; DEST_PATH &lt;span style="color:#0550ae"&gt;/&lt;/span&gt; &lt;span style="color:#0a3069"&gt;f&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;{&lt;/span&gt;item&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;.mov&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;113&lt;/span&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#0550ae"&gt;not&lt;/span&gt; dst&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;exists&lt;span style="color:#1f2328"&gt;()&lt;/span&gt; &lt;span style="color:#0550ae"&gt;and&lt;/span&gt; item&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;get&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;url-4K-SDR-240FPS&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;114&lt;/span&gt;&lt;span&gt; download_asset_sync&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;item&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; dst&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;115&lt;/span&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;116&lt;/span&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Done&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;117&lt;/span&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;118&lt;/span&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#953800"&gt;__name__&lt;/span&gt; &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;119&lt;/span&gt;&lt;span&gt; main&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;h3 id="使用方法"&gt;使用方法&lt;/h3&gt;&#10;&lt;p&gt;首先确保你安装了以下两个 pip 依赖，在终端执行：&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;/usr/bin/pip3 install httpx tqdm&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;新建一个 screensaver.py 文件，将代码内容拷贝到 screensaver.py 中，并在终端中执行 &lt;code&gt;sudo /usr/python3 screensaver.py&lt;/code&gt;&lt;/p&gt;&#10;&lt;figure&gt;&lt;a&#10; data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/posts/2025/python-script-download-macos-aerial-screensaver/python-script-download-macos-aerial-screensaver-3.png"&gt;&#10;&#10; &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/posts/2025/python-script-download-macos-aerial-screensaver/python-script-download-macos-aerial-screensaver-3.png"&#10; alt="在终端运行屏保下载脚本"&#10; loading="lazy"&#10; &gt; &lt;/a&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;默认单线程下载，你也可以使用 batch 参数进行批量下载：&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;sudo /usr/python3 screensaver.py --batch 5 &lt;/code&gt;&lt;/p&gt;&#10;&lt;figure&gt;&lt;a&#10; data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/posts/2025/python-script-download-macos-aerial-screensaver/python-script-download-macos-aerial-screensaver-4.png"&gt;&#10;&#10; &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/posts/2025/python-script-download-macos-aerial-screensaver/python-script-download-macos-aerial-screensaver-4.png"&#10; alt="使用 batch 参数并发下载屏保"&#10; loading="lazy"&#10; &gt; &lt;/a&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;所有壁纸下载完成后有 66G，还是挺占空间的。&lt;/p&gt;&#10;&lt;figure&gt;&lt;a&#10; data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/posts/2025/python-script-download-macos-aerial-screensaver/gh5bq-ma.png"&gt;&#10;&#10; &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/posts/2025/python-script-download-macos-aerial-screensaver/gh5bq-ma.png"&#10; alt="下载完成后的 macOS 航拍屏保列表"&#10; loading="lazy"&#10; &gt; &lt;/a&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;P.S. 下载完成后可能需要重新登陆用户（或重启）后才能在设置中正常显示。&lt;/p&gt;&#10;&lt;p&gt;P.P.S. 如果需要删除屏保，清除 &lt;code&gt;/Library/Application\ Support/com.apple.idleassetsd/Customer/4KSDR240FPS&lt;/code&gt; 这个文件夹即可。&lt;/p&gt;&#10;</description></item></channel></rss>