

<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>電腦相關應用 &#8211; Max的每一天</title>
	<atom:link href="https://max-everyday.com/category/computer/feed/" rel="self" type="application/rss+xml" />
	<link>https://max-everyday.com</link>
	<description>認真過每一天、快樂過每一天</description>
	<lastBuildDate>Fri, 12 Jun 2026 02:39:40 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://max-everyday.com/wp-content/uploads/2020/02/ic_launcher_round_2020-003.png</url>
	<title>電腦相關應用 &#8211; Max的每一天</title>
	<link>https://max-everyday.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>GitHub 2FA 鎖死救回血淚史：一篇讓你不用哭著找 GitHub 客服的防呆指南</title>
		<link>https://max-everyday.com/2026/06/github-2fa-vide-coding/</link>
					<comments>https://max-everyday.com/2026/06/github-2fa-vide-coding/#respond</comments>
		
		<dc:creator><![CDATA[Max]]></dc:creator>
		<pubDate>Fri, 12 Jun 2026 02:39:40 +0000</pubDate>
				<category><![CDATA[電腦相關應用]]></category>
		<category><![CDATA[Tool]]></category>
		<guid isPermaLink="false">https://max-everyday.com/?p=23878</guid>

					<description><![CDATA[哈囉大家！最近幾年「Vibe Coding」超紅，大家是不是也越來越享受那種「我出嘴、AI 出手」，劈哩啪啦就把一個網站或工具給生出來的爽快感？ 口哨吹著吹著，前幾天我就 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="572" src="https://max-everyday.com/wp-content/uploads/2026/06/github-2fa-16_clean-1024x572.jpg?v=1781231924" alt="" class="wp-image-23879" srcset="https://max-everyday.com/wp-content/uploads/2026/06/github-2fa-16_clean-1024x572.jpg?v=1781231924 1024w, https://max-everyday.com/wp-content/uploads/2026/06/github-2fa-16_clean-500x279.jpg?v=1781231924 500w, https://max-everyday.com/wp-content/uploads/2026/06/github-2fa-16_clean-615x343.jpg?v=1781231924 615w, https://max-everyday.com/wp-content/uploads/2026/06/github-2fa-16_clean.jpg?v=1781231924 1376w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">哈囉大家！最近幾年「Vibe Coding」超紅，大家是不是也越來越享受那種「我出嘴、AI 出手」，劈哩啪啦就把一個網站或工具給生出來的爽快感？</p>



<p class="wp-block-paragraph">口哨吹著吹著，前幾天我就被現實賞了一巴掌。</p>



<p class="wp-block-paragraph">我經歷了一場差點讓我跟所有程式碼<strong>永遠說掰掰</strong>的數位慘劇——帳號被自己的 2FA 鎖死，而且備份金鑰早就不知道去哪流浪了。焦慮地對著螢幕枯坐了好幾個小時，那種無力感，比 Debug 找不到 Bug 還痛。</p>



<p class="wp-block-paragraph">這篇就是那幾小時焦慮換來的血淚教訓。如果你也是「寫 Code 靠 Vibe、帳號安全靠祖先保佑」的同路人，請花 3 分鐘把它看完。我保證，這三分鐘會是你今天最值回票價的投資。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f631.png" alt="😱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 先搞清楚：2FA 是什麼，它又是怎麼把我鎖在門外的？</h2>



<p class="wp-block-paragraph">先用大白話解釋：<strong>2FA（雙重驗證）</strong> 就是登入時除了密碼，系統還會要你打開手機 App，輸入一組<strong>每 30 秒就自動換一次</strong>的 6 位數字。密碼 + 動態碼，缺一不可。</p>



<p class="wp-block-paragraph">聽起來超安全對吧？對，它確實超安全——<strong>安全到連帳號本人都可能進不去。</strong></p>



<p class="wp-block-paragraph">我的故事是這樣的：我換了手機，舊手機上的驗證 App 沒有雲端同步，資料就這樣人間蒸發。偏偏當初 GitHub 叫我下載的那份 <code>recovery-code.txt</code>（官方認可的「後門鑰匙」），也早被我在某次「清理下載資料夾」的勤勞行動中光榮刪除。</p>



<p class="wp-block-paragraph">結果就是：<strong>密碼輸入完全正確，但 GitHub 就是不讓我進門。</strong></p>



<p class="wp-block-paragraph">這種感覺就像——你家裝了全世界最堅固的保險鎖，但你把備用鑰匙鎖在保險箱裡，然後把保險箱密碼忘了。更慘的是，連鎖匠（GitHub 客服）在確認完你的身份之前，也無能為力。</p>



<p class="wp-block-paragraph">夠慘了吧？好，現在讓我們來設定「這輩子再也不會被鎖在門外」的防呆機制。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 防呆第一步：不要把雞蛋放在同一個 App（多設幾條退路）</h2>



<p class="wp-block-paragraph">很多人以為 2FA 只能綁一支手機的 Authenticator App，這是最大的誤解。GitHub 其實讓你同時設定多種驗證方式，多一條退路，就少一次崩潰的機會。</p>



<h3 class="wp-block-heading">1. 把沒有備份功能的 App 換掉</h3>



<p class="wp-block-paragraph">如果你現在還在用 <strong>Google Authenticator</strong>（舊版），請注意：它早期的版本不會自動雲端同步，一旦手機遺失或重置，裡面的驗證設定就跟著消失。</p>



<p class="wp-block-paragraph">立刻換成 <strong>Microsoft Authenticator</strong> 或 <strong>Authy</strong>，這兩款都支援雲端備份，綁定帳號後，換新手機重新登入，所有驗證設定一鍵還原。就算手機掉進馬桶，你也不用跟著跳下去。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>補充建議：</strong> 不管用哪款 App，設定完之後，都去找一找它的「備份 / 匯出」功能，確認備份機制是真的有在運作，別等到用的時候才發現是空包彈。</p>
</blockquote>



<h3 class="wp-block-heading">2. 綁定生物辨識登入（Passkey）——這是你的最後一道防線</h3>



<p class="wp-block-paragraph">這是整篇文章我最想推給你用的功能，沒有之一。</p>



<p class="wp-block-paragraph">現在 GitHub 支援 <strong>Passkey（通行密鑰）</strong>，白話說就是：<strong>讓你用指紋或臉部辨識直接登入，不需要輸入任何動態碼。</strong></p>



<p class="wp-block-paragraph"><strong>設定方式：</strong></p>



<ol class="wp-block-list">
<li>進入 GitHub → <code>Settings</code> → <code>Password and authentication</code></li>



<li>找到 <strong>Passkeys</strong> 區塊，點選新增</li>



<li>依照系統提示，綁定你的：</li>
</ol>



<ul class="wp-block-list">
<li>Mac：<strong>Touch ID（指紋）</strong></li>



<li>Windows：<strong>Windows Hello（臉部辨識或指紋）</strong></li>



<li>手機：<strong>iPhone Face ID / Android 指紋</strong></li>
</ul>



<p class="wp-block-paragraph">設定完之後，下次登入只要手指在筆電上碰一下，或拿起手機讓它認個臉，驗證就通過了。再也不用慌慌張張搶在 30 秒倒數結束前把數字抄完。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>強烈建議：</strong> 把你的<strong>筆電和手機都各綁一個 Passkey</strong>。這樣萬一筆電壞了，拿起手機照樣能登入；手機不見了，筆電依然救得了你。兩個裝置互為備援，防呆效果加倍。</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4be.png" alt="💾" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 防呆第二步：Recovery Codes 的正確存法（不是丟「下載」資料夾）</h2>



<p class="wp-block-paragraph">當你開啟 2FA 時，GitHub 會強迫你下載一份 <code>recovery-code.txt</code>，裡面有 16 組一次性緊急備用碼。這份文件的正式用途是：<strong>當你所有驗證方式都失效時，用這些備用碼來進入帳號。</strong></p>



<p class="wp-block-paragraph">問題是，絕大多數人的 SOP 是：下載 → 看都不看 → 丟著 → 某天清理電腦時一起刪掉。等到真正需要它的時候，才開始後悔。</p>



<p class="wp-block-paragraph">以下推薦兩種「既有效、又真的不會弄丟」的存法：</p>



<h3 class="wp-block-heading">方案 A：科技小白最安心——印出來夾進重要文件</h3>



<ul class="wp-block-list">
<li><strong>怎麼做：</strong> 直接按 <code>Ctrl+P</code>（Mac 是 <code>Cmd+P</code>）把那頁<strong>印出來</strong>。</li>



<li><strong>怎麼存：</strong> 對折，放進你收身分證、護照或房屋契約的那個「重要文件夾」或保險箱裡。</li>



<li><strong>為什麼有效：</strong> 電腦會壞、雲端會出事，但只要你家沒發生不可抗力，那個放重要文件的地方，你這輩子都不會無緣無故去清理它。</li>
</ul>



<h3 class="wp-block-heading">方案 B：現代人必備——存進密碼管理員（強力推薦）</h3>



<p class="wp-block-paragraph">如果連印出來都嫌麻煩，請下載 <strong>Bitwarden</strong>（免費）或 <strong>1Password</strong> 這類密碼管理員。</p>



<ul class="wp-block-list">
<li><strong>怎麼存：</strong> 找到 GitHub 那筆記錄，將 Recovery Codes 貼進「安全附註（Notes）」欄位，或者直接把 <code>.txt</code> 檔上傳成附件。</li>



<li><strong>為什麼有效：</strong> 密碼管理員只要記住一組「主密碼」，就能在任何裝置上存取所有資料。你等於把這把救命鑰匙，鎖進了一個你永遠找得到的宇宙級保險箱。</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>重要提醒：Recovery Codes 每組只能用一次！</strong> 一旦你真的用了其中一組緊急碼登入，請立刻去 GitHub 重新產生一組全新的 Recovery Codes，並且把舊的那份丟掉換成新的，否則用完就是零存糧。</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 立即行動清單（現在就做，5 分鐘搞定）</h2>



<p class="wp-block-paragraph">說再多都不如馬上動手。請打開你的 GitHub，把下面這幾件事做完：</p>



<ul class="wp-block-list">
<li>[ ] <strong>換用有雲端備份的驗證 App</strong>（Microsoft Authenticator 或 Authy）</li>



<li>[ ] <strong>新增 Passkey</strong>，筆電和手機各綁一個</li>



<li>[ ] <strong>找到你的 Recovery Codes</strong>——不知道在哪？去 <code>Settings</code> → <code>Password and authentication</code> 重新產生一組</li>



<li>[ ] <strong>把 Recovery Codes 印出來或存進密碼管理員</strong></li>
</ul>



<p class="wp-block-paragraph">以上四件事，花不到 5 分鐘，卻能幫未來的你省下不知道幾小時的崩潰與自責。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4ac.png" alt="💬" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 結語：Vibe 可以隨性，數位資產必須理性</h2>



<p class="wp-block-paragraph">用 AI 寫 Code 可以很浪漫，吹著口哨就把專案生出來，這種感覺真的很爽。但請記住，你靠著 Vibe 累積起來的那些 Repositories、那些 Commits、那些用時間堆疊出的作品，都是真真實實屬於你的資產。</p>



<p class="wp-block-paragraph">別讓一個沒備份的驗證 App，或者一份被你刪掉的 <code>.txt</code> 檔，把這一切都鎖在門外。</p>



<p class="wp-block-paragraph">現在就去做，你未來的自己會感謝你今天花了這 5 分鐘。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><em>覺得有用的話，歡迎把這篇分享給你身邊那些「寫扣靠 Vibe、安全靠保佑」的朋友。救人一命，勝造七級浮屠！</em> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f64f.png" alt="🙏" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://max-everyday.com/2026/06/github-2fa-vide-coding/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>簡化指令的聰明解法：使用 agyy.bat 取代 agy -y</title>
		<link>https://max-everyday.com/2026/06/agyy/</link>
					<comments>https://max-everyday.com/2026/06/agyy/#respond</comments>
		
		<dc:creator><![CDATA[Max]]></dc:creator>
		<pubDate>Wed, 10 Jun 2026 02:07:16 +0000</pubDate>
				<category><![CDATA[電腦相關應用]]></category>
		<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://max-everyday.com/?p=23863</guid>

					<description><![CDATA[使用 gemini 幾乎每次都是進入 YOLO 模式, 改到 agy 之後指令變超長, 怎麼可能記的起來. agy -y---flags provided but not [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="572" src="https://max-everyday.com/wp-content/uploads/2026/06/agyy-16_clean-1024x572.jpg?v=1781057101" alt="" class="wp-image-23866" srcset="https://max-everyday.com/wp-content/uploads/2026/06/agyy-16_clean-1024x572.jpg?v=1781057101 1024w, https://max-everyday.com/wp-content/uploads/2026/06/agyy-16_clean-500x279.jpg?v=1781057101 500w, https://max-everyday.com/wp-content/uploads/2026/06/agyy-16_clean-615x343.jpg?v=1781057101 615w, https://max-everyday.com/wp-content/uploads/2026/06/agyy-16_clean.jpg?v=1781057101 1376w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">使用 gemini 幾乎每次都是進入 YOLO 模式, 改到 agy 之後指令變超長, 怎麼可能記的起來.</p>



<pre class="wp-block-preformatted">agy -y<br>---<br>flags provided but not defined: -y<br>Usage of agy:<br>  --add-dir                       Add a directory to the workspace (repeatable) (default [])<br>  -c                              Short alias for --continue<br>  --continue                      Continue the most recent conversation<br>  --conversation                  Resume a previous conversation by ID<br>  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">--dangerously-skip-permissions</mark>  Auto-approve all tool permission requests without prompting<br>  -i                              Short alias for --prompt-interactive<br>  --log-file                      Override CLI log file path<br>  --model                         Model for the current CLI session<br>  -p                              Short alias for --print<br>  --print                         Run a single prompt non-interactively and print the response<br>  --print-timeout                 Timeout for print mode wait (default 5m0s)<br>  --prompt                        Alias for --print<br>  --prompt-interactive            Run an initial prompt interactively and continue the session<br>  --sandbox                       Run in a sandbox with terminal restrictions enabled<br><br>Available subcommands:<br>  changelog       Show changelog and release notes<br>  help            Show help for subcommands<br>  install         Configure environment paths and shell settings<br>  models          List available models<br>  plugin          Manage plugins (install, uninstall, list, enable, disable)<br>  plugins         Alias for plugin<br>  update          Update CLI</pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">透過建立 agyy.bat，你可以<strong>完全避免與原本的 agy.exe 發生名稱衝突或無窮迴圈（自己呼叫自己）的風險</strong>。同時，這也能將冗長的參數縮短，讓操作變得非常直覺。</p>



<p class="wp-block-paragraph">以下是為你寫好的 <code>agyy.bat</code> 腳本與使用方式：</p>



<h3 class="wp-block-heading">1. 建立 <code>agyy.bat</code> 檔案</h3>



<p class="wp-block-paragraph">請打開記事本，將以下程式碼貼進去：</p>



<p class="wp-block-paragraph">DOS</p>



<pre class="wp-block-code"><code>@echo off
setlocal enabledelayedexpansion

set "params="
for %%a in (%*) do (
    if "%%a"=="-y" (
        set "params=!params! --dangerously-skip-permissions"
    ) else (
        set "params=!params! %%a"
    )
)

:: 直接呼叫原本的 agy，並帶入轉換後的參數
agy %params%
</code></pre>



<h3 class="wp-block-heading">2. 儲存與放置路徑</h3>



<p class="wp-block-paragraph"><strong>正確儲存檔案</strong>：將檔案另存新檔，檔名設定為 <strong><code>agyy.bat</code></strong>。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>貼心提醒</strong>：存檔時請將「存檔類型」切換為「所有檔案 (<em>.</em>)」，避免副檔名變成 <code>agyy.bat.txt</code>。</p>
</blockquote>



<p class="wp-block-paragraph"><strong>設定全域執行</strong>：為了讓你在任何資料夾路徑下（例如目前的 git 專案目錄）都能直接輸入 <code>agyy</code> 執行，建議將這個檔案放到以下其中一個地方：</p>



<ul class="wp-block-list">
<li><strong>方案 A（最省事）</strong>：直接放到 <code>C:\Windows</code> 資料夾下。</li>



<li><strong>方案 B（最正規）</strong>：放到你自己專門存放工具的自訂資料夾（例如 <code>C:\tools</code>），並確保該資料夾已加入到 Windows 的系統環境變數（PATH）中。</li>
</ul>



<h3 class="wp-block-heading">3. 如何使用？</h3>



<p class="wp-block-paragraph">設定完成後，你以後在 CMD 或 PowerShell 中就可以這樣用：</p>



<ul class="wp-block-list">
<li>原本你想輸入：<code>agy -y --add-dir .</code></li>



<li>現在改成輸入：<code>agyy -y --add-dir .</code></li>
</ul>



<p class="wp-block-paragraph">這個批次檔會自動幫你把 <code>-y</code> 替換成 <code>--dangerously-skip-permissions</code>，其餘的參數（如 <code>--add-dir .</code> 或 <code>-c</code>）都會原封不動地傳遞給 <code>agy</code>，既安全又不會搞混！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">既然你提到想要在 Linux 或 macOS 上也達到同樣的效果，其實事情反而變得更簡單了，因為在 Unix-like 系統中，我們不需要寫複雜的批次檔，直接使用內建的別名功能就可以完美搞定。</p>



<p class="wp-block-paragraph">你可以透過設定別名，讓系統在看到 agyy 的時候自動替換指令。請參考以下的操作步驟：</p>



<h2 class="wp-block-heading">1. 臨時測試別名</h2>



<p class="wp-block-paragraph">如果你想先測試看看效果，可以直接在終端機中輸入以下指令：</p>



<p class="wp-block-paragraph">alias agyy=&#8217;agy &#8211;dangerously-skip-permissions&#8217;</p>



<p class="wp-block-paragraph">現在，你可以試試看輸入：</p>



<p class="wp-block-paragraph">agyy &#8211;add-dir .</p>



<p class="wp-block-paragraph">系統就會自動幫你執行 <code>agy --dangerously-skip-permissions --add-dir .</code>。不過，這個方法在關閉終端機視窗後就會失效。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">2. 永久儲存設定</h2>



<p class="wp-block-paragraph">若要讓這個設定每次開啟終端機時都有效，必須將這行指令寫進你 shell 的設定檔中。</p>



<h3 class="wp-block-heading">步驟 A：確認你使用的是哪一種 Shell</h3>



<p class="wp-block-paragraph">請在終端機輸入以下指令：</p>



<p class="wp-block-paragraph">echo $SHELL</p>



<p class="wp-block-paragraph">終端機會回傳你的 shell 路徑：</p>



<ul class="wp-block-list">
<li>如果顯示 <code>/bin/zsh</code>（macOS 目前預設），你的設定檔是 <code>~/.zshrc</code></li>



<li>如果顯示 <code>/bin/bash</code>（舊版 macOS 或多數 Linux 預設），你的設定檔是 <code>~/.bashrc</code></li>
</ul>



<h3 class="wp-block-heading">步驟 B：將別名寫入設定檔</h3>



<p class="wp-block-paragraph">根據你確認的 shell 類型，選擇對應的指令輸入：</p>



<ul class="wp-block-list">
<li><strong>如果你是 zsh（macOS 預設）</strong>：echo &#8220;alias agyy=&#8217;agy &#8211;dangerously-skip-permissions'&#8221; >> ~/.zshrc</li>



<li><strong>如果你是 bash（Linux 預設）</strong>：echo &#8220;alias agyy=&#8217;agy &#8211;dangerously-skip-permissions'&#8221; >> ~/.bashrc</li>
</ul>



<h3 class="wp-block-heading">步驟 C：讓設定立即生效</h3>



<p class="wp-block-paragraph">最後，讓剛剛修改的設定檔立刻生效，不用重開終端機：</p>



<ul class="wp-block-list">
<li><strong>如果你是 zsh</strong>：source ~/.zshrc</li>



<li><strong>如果你是 bash</strong>：source ~/.bashrc</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">3. 進階玩法：直接蓋掉原本的 agy</h2>



<p class="wp-block-paragraph">因為 Linux 與 macOS 的別名機制非常聰明，它不會像 Windows 批次檔那樣造成無窮迴圈。如果你連多打一個 y 都嫌麻煩，甚至可以直接把別名命名為 <code>agy</code>：</p>



<p class="wp-block-paragraph">alias agy=&#8217;agy &#8211;dangerously-skip-permissions&#8217;</p>



<p class="wp-block-paragraph">這樣一來，你以後照常輸入 <code>agy --add-dir .</code>，系統就會在背景偷偷幫你補上 <code>--dangerously-skip-permissions</code>，完全不需要改變操作習慣，而且絕對不會發生自己呼叫自己的衝突問題。</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://max-everyday.com/2026/06/agyy/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>數位沙盒的力量：在安全與自由之間找回 AI 的生產力</title>
		<link>https://max-everyday.com/2026/05/ai-safe-pocketos-case/</link>
					<comments>https://max-everyday.com/2026/05/ai-safe-pocketos-case/#respond</comments>
		
		<dc:creator><![CDATA[Max]]></dc:creator>
		<pubDate>Sat, 02 May 2026 17:27:48 +0000</pubDate>
				<category><![CDATA[電腦相關應用]]></category>
		<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://max-everyday.com/?p=23746</guid>

					<description><![CDATA[想像你請了一位動作飛快的實習生幫忙打掃房間。結果他在短短九秒之內，不只掃乾淨了地板，還順手把你藏在床底下的存摺與合約全部送進碎紙機。這不是科幻小說，而是最近發生在 Poc [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="572" src="https://max-everyday.com/wp-content/uploads/2026/05/ai-safe-pocketos-case-16_clean-1024x572.jpg?v=1777742547" alt="" class="wp-image-23747" srcset="https://max-everyday.com/wp-content/uploads/2026/05/ai-safe-pocketos-case-16_clean-1024x572.jpg?v=1777742547 1024w, https://max-everyday.com/wp-content/uploads/2026/05/ai-safe-pocketos-case-16_clean-500x279.jpg?v=1777742547 500w, https://max-everyday.com/wp-content/uploads/2026/05/ai-safe-pocketos-case-16_clean-615x343.jpg?v=1777742547 615w, https://max-everyday.com/wp-content/uploads/2026/05/ai-safe-pocketos-case-16_clean.jpg?v=1777742547 1376w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">想像你請了一位動作飛快的實習生幫忙打掃房間。結果他在短短九秒之內，不只掃乾淨了地板，還順手把你藏在床底下的存摺與合約全部送進碎紙機。這不是科幻小說，而是最近發生在 PocketOS 這家公司的真實慘劇。</p>



<p class="wp-block-paragraph">事情的經過是這樣的：工程師正用 AI 工具修復測試環境的一個小錯誤。沒想到這個 AI 像個好奇寶寶，在程式碼裡翻出了一把「API 密鑰」——就像工程師不小心把保險箱鑰匙掉在客廳。AI 撿起鑰匙後誤以為自己正在執行清理任務，結果直接刪除了正式運作中的資料庫，連備份都沒留下。</p>



<p class="wp-block-paragraph">▋ 到底是工具太危險，還是防護做太少？</p>



<p class="wp-block-paragraph">很多人聽完後的第一個反應是「AI 太恐怖了」。但如果冷靜分析這場意外，你會發現這其實是傳統工程管理的崩潰。AI 本身沒有善惡，它只是按照指令執行任務。問題出在人類給了它過大的權限。</p>



<p class="wp-block-paragraph">權限就像是門禁卡的層級。如果你只讓實習生進出客廳，他絕對沒機會弄壞臥室。在這場災難中，那把被 AI 撿到的鑰匙居然可以自由開啟「生產環境」，也就是正在對外服務的系統核心，這在軟體開發中是非常嚴重的疏失。</p>



<p class="wp-block-paragraph">▋ 建立安全護欄，別讓 AI 裸奔。</p>



<p class="wp-block-paragraph">要避免這種數位慘案，我們需要幫這個強力助手穿上「約束衣」。首先，絕對不能讓 AI 擁有刪除或清空資料的最高權力。我們應該只給它「讀取與寫入」的權限，並禁止它執行任何毀滅性的指令。</p>



<p class="wp-block-paragraph">其次，備份資料必須放在完全獨立的地方，就像你不會把備份鑰匙放在客廳地毯下。如果備份與生產環境共用同一組帳號密鑰，一旦鑰匙外流，資料庫與備份就會同時消失。這正是 PocketOS 這次學到的昂貴教訓。</p>



<p class="wp-block-paragraph">▋ 把 AI 當作實習生，而不是當成神。</p>



<p class="wp-block-paragraph">目前的 AI 雖然知識淵博，但它完全沒有「常識」。它不懂得什麼叫作「後悔」，也不知道哪些資料是絕對不能碰的禁地。身為使用者，我們應該扮演謹慎的主管角色，而不是把整間公司的鑰匙交給 AI 盲目駕駛。</p>



<p class="wp-block-paragraph">▋ 鎖好異地的門，別讓 AI 鑰匙通往全世界。</p>



<p class="wp-block-paragraph">如果你覺得「九秒刪光資料庫」已經夠可怕，那更恐怖的劇本是：AI 助手在刪掉你家客廳的沙發後，還順手用同一把鑰匙，打開了你位在另一個城市、專門存放黃金的保險箱。這就是「BCP 異地備援」在 AI 時代面臨的新考驗。</p>



<p class="wp-block-paragraph">「BCP」的白話意思是「公司如果不幸出事，要如何活下去的計畫」。傳統做法是把資料複製一份放到遙遠的地方（異地備援）。然而，如果你的 AI 助手握著一把「萬能鑰匙」（權限過大的 Token），這道防護牆就會瞬間瓦解，異地備援形同虛設。</p>



<p class="wp-block-paragraph">▋ 隱形的萬能鑰匙：權限範圍的致命陷阱。</p>



<p class="wp-block-paragraph">所謂的 Token，就像是給 AI 的「臨時通行證」。很多開發者為了省麻煩，會給 AI 一張可以進出「所有房間」的黑卡。問題就在於：如果你原本只想讓 AI 搬移測試區的資料，它的通行證卻同時能打開異地備援的資料中心，後果就難以挽回了。</p>



<p class="wp-block-paragraph">這就像是原本只想讓實習生清理分公司的倉庫，卻給了他全公司所有金庫的磁卡。當 AI 因為誤判發出「刪除指令」時，這張通行證會讓災難跨越地理限制，把你在幾百公里外的最後防線也一併抹除。</p>



<p class="wp-block-paragraph">▋ 打造數位防火牆，落實最小權限原則。</p>



<p class="wp-block-paragraph">要防止這種跨區災難，核心概念是「最小權限」：嚴格限制通行證的有效範圍。如果 AI 在測試環境工作，它的權限就不應跨入正式環境。具體可以從三個方向著手：</p>



<ul class="wp-block-list">
<li>設定「唯讀權限」：讓 AI 只能查看資料，不能刪除資料。</li>



<li>隔離「備援金鑰」：備援系統的通行證必須與日常工作的金鑰完全分開，且嚴禁交給 AI 管理。</li>



<li>建立「異地隔離」：備援資料不應只是換個地方存放，更要換一組身分認證才能進入，確保 AI 無法憑同一張通行證讓兩地的資料同時消失。</li>
</ul>



<p class="wp-block-paragraph">▋ 自動化不是免死金牌，請記得定期演練。</p>



<p class="wp-block-paragraph">很多人以為只要設好「自動備份」就萬事大吉，但在 AI 介入後，自動化反而可能成為加速滅亡的工具。再完善的計畫，如果沒有經過「實戰演練」，在災難真正發生時都只是紙上談兵。</p>



<p class="wp-block-paragraph">定期檢查你交給 AI 助手的通行證，確認它的權限是否大到足以毀掉整間公司。在依賴科技提升效率的同時，別忘了幫你的異地堡壘裝上一道 AI 轉不動的實體鎖。你對 AI 的「授權邊界」畫清楚了嗎？</p>



<p class="wp-block-paragraph">▋ 用圍欄養出一隻聽話的 AI，別讓它翻牆去搞破壞。</p>



<p class="wp-block-paragraph">了解了權限失控的風險之後，接下來的問題是：如何讓 AI 安全又有效率地工作？想像你請了一個幫傭，卻把全家的鑰匙都串在一起交給他。萬一他哪天糊塗了，可能會把你珍藏的傳家寶也當成垃圾扔掉。在 AI 的世界裡，「Token」就像是這串鑰匙。如果工具的權限太大，一旦 AI 判斷錯誤，連你在遠方的備份資料都會一起消失。</p>



<p class="wp-block-paragraph">這就是自動化最令人頭痛的核心問題：如何讓 AI 幫忙做事，卻又不給它「翻牆」去搞破壞的機會？</p>



<p class="wp-block-paragraph">▋ 用 Docker 打造獨立的數位工作室：NanoClaw 的隔離戰術。</p>



<p class="wp-block-paragraph">NanoClaw 就像是幫 AI 蓋了一間專屬的「獨立工作室」。它使用一種叫做「Docker」的技術，白話說就是把 AI 關在一個虛擬的箱子裡。AI 在這個箱子裡可以自由地寫程式、做計算或整理資料，但它絕對無法跨出這個箱子去碰你的電腦主機，更碰不到你在其他地方存放的機密文件。</p>



<p class="wp-block-paragraph">這個工具的設計核心就是「簡單」。因為程式碼少且透明，你一眼就能看出它被授予了哪些權限。這就像是把複雜的門禁系統簡化為一張感應卡——實習生手上只有「這間辦公室」的通行證，就算卡片弄丟了，壞人也進不了你的臥室。</p>



<p class="wp-block-paragraph">▋ 簡單就是最好的防彈衣，降低失控的風險。</p>



<p class="wp-block-paragraph">很多強大的 AI 助手之所以危險，是因為功能太雜，像是一台裝滿機關的超級跑車——一旦其中一個零件出錯，整台車就會失控。NanoClaw 選擇走相反的路，移除所有不必要的複雜功能，只留下最核心的自動化任務與排程能力。</p>



<p class="wp-block-paragraph">系統越簡單，漏洞就越少。這就像是與其蓋一座裝滿監視器的高科技監獄，不如直接把 AI 放在一個「沒有對外通道」的密室裡工作。它雖然能幫你完成任務，但通行證的範圍被限制在最低限度，自然就解決了權限過大所帶來的資安隱憂。</p>



<p class="wp-block-paragraph">▋ 數位斷捨離：從源頭控管權限。</p>



<p class="wp-block-paragraph">在使用 AI 提升效率的同時，我們必須學會「分權」。NanoClaw 提供了一個很好的方向，讓自動化任務在受控的環境下執行。與其事後擔心資料被誤刪，不如一開始就不把「萬能鑰匙」交給 AI。</p>



<p class="wp-block-paragraph">在挑選自動化工具時，建議先確認它是否具備「環境隔離」的能力，再將非必要的權限全部關閉，只留下任務必要的那一部分。把 AI 關進合適的圍欄，它才會是你最得力的助手，而不是隨時可能爆炸的定時炸彈。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">圍欄是越多越好嗎？上面談的都是「如何圍住 AI」，但如果圍欄設得太多，AI 反而什麼都做不了。這就帶出了另一個重要問題：安全與效率，究竟要怎麼平衡？</p>



<p class="wp-block-paragraph">▋ 幫跑車裝煞車，不是為了讓它跑不動。</p>



<p class="wp-block-paragraph">想像你買了一台全世界最快的跑車，馬力強大到只要輕踩油門就能衝破時速 300 公里。如果你因為害怕速度太快而裝了 10 道鐵鍊鎖住車輪，這台車確實會變得很安全，但它也就此淪為客廳裡的昂貴裝飾品。在 AI 的世界裡，防護機制就像是這台車的煞車——煞車存在的目的，是為了讓這台跑車能夠跑得更快、更遠，而不是讓它動彈不得。</p>



<p class="wp-block-paragraph">很多人擔心給 AI 太多限制，會讓它變得像沒手沒腳的廢物，什麼都不能做。但這其實是一個誤解，因為「煞車」的存在，正是為了讓駕駛更放心地踩油門。</p>



<p class="wp-block-paragraph">▋ 害怕失控的恐懼，正在扼殺進化的可能。</p>



<p class="wp-block-paragraph">當我們因為害怕 AI 犯錯，而把它的所有權限通通關掉，或設定一堆繁雜的審核流程，AI 就會失去它的靈魂。它不再是那個能幫你解決問題的「聰明實習生」，而變成了一個只會說「這我不能做」的機器人。</p>



<p class="wp-block-paragraph">過度保護的環境就像是一個塞滿海綿的無塵室。雖然不會受傷，但也無法練習如何應對真實世界的挑戰。如果 AI 沒辦法嘗試新方法，它的創意就會被關在名為「安全」的牢籠裡，永遠無法發揮真正的價值。</p>



<p class="wp-block-paragraph">▋ 聰明的護欄，是讓它在跑道內狂奔。</p>



<p class="wp-block-paragraph">解決方案不是拆掉所有護欄，也不是加裝更多鐵鍊，而是把護欄蓋在正確的地方。我們需要的是「邊界」，而不是「限制」。這就像是在跑道兩側建起高牆，只要跑車在跑道內，它想怎麼衝刺都沒問題。</p>



<p class="wp-block-paragraph">我們可以讓 AI 在「沙盒環境」裡自由嘗試。這個環境就像是虛擬的練習場，它在裡面刪掉一萬次資料庫都無所謂。透過這種方式，AI 可以在不威脅公司安全的前提下，盡情發揮想像力去優化流程。</p>



<p class="wp-block-paragraph">▋ 拿掉手銬，換上專業的賽車服。</p>



<p class="wp-block-paragraph">別再把 AI 當成隨時會爆炸的炸彈，而是把它當成一個需要正確引導的高手。幫它穿上「防護衣」——也就是設定好「權限隔離」與「錯誤回報機制」——然後大膽地讓它去執行任務。</p>



<p class="wp-block-paragraph">現在就檢查你的自動化工具：你是在幫它加裝高性能煞車，還是正拿著鐵鍊鎖住它的手腳？真正的效率來自「受控的自由」。如果你有任何想法，歡迎在下方留言分享。</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://max-everyday.com/2026/05/ai-safe-pocketos-case/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AI 進入Skills 時代</title>
		<link>https://max-everyday.com/2026/01/ai-skills-md/</link>
					<comments>https://max-everyday.com/2026/01/ai-skills-md/#respond</comments>
		
		<dc:creator><![CDATA[Max]]></dc:creator>
		<pubDate>Thu, 22 Jan 2026 19:36:50 +0000</pubDate>
				<category><![CDATA[電腦相關應用]]></category>
		<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://max-everyday.com/?p=22878</guid>

					<description><![CDATA[最近網路上超級多 AI 使用 skill 的教學和資源, 大致上來說, 使用或參考別人寫好的的 skill, 有可能可以省下一些摸索,調教或試錯的時間. 但也有可能你誤以 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">最近網路上超級多 AI 使用 skill 的教學和資源, 大致上來說, 使用或參考別人寫好的的 skill, 有可能可以省下一些摸索,調教或試錯的時間. </p>



<p class="wp-block-paragraph">但也有可能你誤以為使用了 skill 可以省時間, 反而花了更多時間, skill 類似別人用 prompt 與 script / template 先寫好了參考用的範本, 例如: 大家都是在做製件出甜的豆漿, 套用了別人的skill 一定是做出甜豆漿, 如果你又想省時間拿別人造好的輪子(skill) 來用, 又想要最後做出的是鹹豆漿, 你那就要有辧法看的懂和去修改別人的 skill.</p>



<p class="wp-block-paragraph">要怎麼學習和使用 ai 的 skill, antigravity 的說明:<br><a href="https://antigravity.google/docs/skills">https://antigravity.google/docs/skills</a></p>



<p class="wp-block-paragraph">Extend Claude with skills 說明:<br><a href="https://code.claude.com/docs/en/skills">https://code.claude.com/docs/en/skills</a></p>



<p class="wp-block-paragraph">Agent Skills Marketplace, for the open SKILL.md ecosystem<br><a href="https://skillsmp.com/">https://skillsmp.com/</a></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="638" src="https://max-everyday.com/wp-content/uploads/2026/01/2026-01-23_03-26_li-1024x638.jpg?v=1769110008" alt="" class="wp-image-22879" srcset="https://max-everyday.com/wp-content/uploads/2026/01/2026-01-23_03-26_li-1024x638.jpg?v=1769110008 1024w, https://max-everyday.com/wp-content/uploads/2026/01/2026-01-23_03-26_li-500x312.jpg?v=1769110008 500w, https://max-everyday.com/wp-content/uploads/2026/01/2026-01-23_03-26_li-615x383.jpg?v=1769110008 615w, https://max-everyday.com/wp-content/uploads/2026/01/2026-01-23_03-26_li.jpg?v=1769110008 1457w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">YouTube 教學影片:</p>



<ul class="wp-block-list">
<li>A man installed 300 agent skills. This Is What Happened To His Brain.<br><a href="https://www.youtube.com/watch?v=0HIlhRl38QA">https://www.youtube.com/watch?v=0HIlhRl38QA</a></li>



<li>爆火的Skills怎么用？数据分析，内容创作，编程实战Agent Skills<br><a href="https://www.youtube.com/watch?v=3nm_hDALBmY">https://www.youtube.com/watch?v=3nm_hDALBmY</a></li>



<li>Understand what a large model is in 10 minutes.<br><a href="https://www.youtube.com/watch?v=lnneAfJqd9M">https://www.youtube.com/watch?v=lnneAfJqd9M</a></li>



<li>别再手写提示词了！用谷歌 antigravity &#8220;Skills&#8221; 技术解锁 AI 视频极致动态|提示词的进化：从“提示词工程”到“智能体技能”<br><a href="https://www.youtube.com/watch?v=ey0WbwPEurk">https://www.youtube.com/watch?v=ey0WbwPEurk</a></li>



<li>Antigravity 新手入門｜為什麼這個 AI 工具讓我放棄 Gemini、ChatGPT<br><a href="https://www.youtube.com/watch?v=lHkz99ohnQE">https://www.youtube.com/watch?v=lHkz99ohnQE</a></li>



<li>AI 编程工具都在用 Agent Skills：一键安装 + 推荐清单 + 编写最佳实践（Claude/Codex/OpenCode/Antigravity）<br><a href="https://www.youtube.com/watch?v=nZW5xzVz9O0">https://www.youtube.com/watch?v=nZW5xzVz9O0</a></li>



<li>AI 秒变靠谱老员工！2026 最实用 AI 技能：Agent Skills 深度解析！原理+创建+使用！<br><a href="https://www.youtube.com/watch?v=M4XIEjja1zI">https://www.youtube.com/watch?v=M4XIEjja1zI</a></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Antigravity IDE 技能教學筆記</h2>



<p class="wp-block-paragraph">Antigravity IDE 是一個讓人工智慧幫你寫程式的平台。技能是給人工智慧用的工具包。它不是普通的對話紀錄。它像是一本說明書。告訴人工智慧在特定情況下該怎麼做。當你遇到重複的任務時。技能就能派上用場。這讓開發過程變得更像在指揮團隊。</p>



<h2 class="wp-block-heading">檔案放在哪裡</h2>



<p class="wp-block-paragraph">技能是存在資料夾裡的檔案。你有兩種選擇。如果你只想讓某個專案使用。就放在專案根目錄下的 .agent/skills/ 資料夾。如果你希望所有專案都能用。就放在電腦個人設定夾裡的 ~/.gemini/antigravity/skills/ 底下。每個技能都要有自己的資料夾。資料夾的名字最好簡單易懂。</p>



<h2 class="wp-block-heading">如何撰寫技能檔案</h2>



<p class="wp-block-paragraph">每個技能資料夾裡。一定要有一個名為 SKILL.md 的檔案。這個檔案的最上方要用 YAML 格式寫說明。裡面包含名稱和描述。這部分非常關鍵。因為人工智慧是靠描述來決定要不要使用這個技能。描述寫得越清楚。人工智慧就越聰明。</p>



<h2 class="wp-block-heading">技能的內容重點</h2>



<p class="wp-block-paragraph">在 SKILL.md 的正文裡。你要寫下具體的指引。通常包含目標和執行步驟。你可以提供一些範例。讓人工智慧模仿。也要寫下限制條件。例如禁止刪除某些資料庫。這就像在教導新進員工。規則講得越細。出錯的機會就越小。</p>



<h2 class="wp-block-heading">腳本與自動化</h2>



<p class="wp-block-paragraph">技能不只是文字說明。它還可以搭配腳本。你可以寫 Python 或 Bash 腳本放在同一個資料夾。在 SKILL.md 裡告訴人工智慧怎麼執行這些程式碼。人工智慧會自動幫你填入參數。這樣就能完成自動化測試或部署。這讓原本複雜的命令變得一鍵完成。</p>



<h2 class="wp-block-heading">實際使用的感覺</h2>



<p class="wp-block-paragraph">寫技能的過程很像在整理筆記。這強迫你思考工作流程。當你寫好一個技能。下次遇到同樣問題時。人工智慧會自動偵測並套用。不需要你重複下指令。這種感覺非常神奇。它讓開發者從繁瑣的細節中解脫。把精力放在更有創意的事情上。</p>



<h2 class="wp-block-heading">範例檔案內容</h2>



<p class="wp-block-paragraph">Markdown</p>



<pre class="wp-block-code"><code>---
name: my-python-tester
description: 當需要對 Python 檔案執行單元測試時使用此技能。
---

# 目標
自動執行專案中的單元測試並回報結果。

# 指引
1. 檢查目前目錄下的測試檔案。
2. 使用 pytest 執行所有測試案例。
3. 如果測試失敗，分析錯誤原因並提出修改建議。

# 限制
不要修改現有的原始碼檔案。
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Claude Code Skill 的基本概念</h2>



<p class="wp-block-paragraph">Claude Code 的 Skill 就像是教 AI 學會新的工具。平常它只能做內建的事，但你可以給它專屬的指令。這讓 AI 能夠執行你專案中特定的任務。就像是幫 AI 裝上新的外掛工具。你可以讓它去操作你公司內部的腳本，或是執行複雜的打包指令。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">建立 Skill 的設定檔</h2>



<p class="wp-block-paragraph">你需要在專案根目錄建立一個資料夾與檔案。路徑是 .claude/skills.json。這個檔案用來存放所有的自定義指令。AI 會在啟動時自動讀取這些設定。如果資料夾不存在就手動建立一個。這是讓 Claude 認識新技能的唯一地方。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">檔案內容與格式</h2>



<p class="wp-block-paragraph">檔案內容必須符合 JSON 規範。每個項目需要有名稱、描述與指令。最核心的部分是描述文字。你要用白話文告訴 AI 這個指令在做什麼。當 AI 覺得你的需求跟描述相符，它就會主動執行該指令。</p>



<p class="wp-block-paragraph">JSON</p>



<pre class="wp-block-code"><code>{
  "skills": &#91;
    {
      "name": "run_tests",
      "description": "執行專案的單元測試並顯示結果",
      "command": "npm test"
    }
  ]
}
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">描述文字的重要性</h2>



<p class="wp-block-paragraph">描述是 AI 判斷時機的依據。寫得越直覺越好。例如你可以寫 檢查程式碼風格。當你對 Claude 說 幫我看看程式碼有沒有寫歪，它就會聯想到這個 Skill。描述不需要專業術語，只要能讓 AI 理解用途即可。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">實際應用範例</h2>



<p class="wp-block-paragraph">假設你有一個清理快取的腳本。你可以定義一個名為 clean_cache 的項。描述寫成 清除專案的暫存檔案以解決建置問題。指令寫成 ./scripts/clean.sh。之後你只要對 Claude 說 幫我清理環境，它就會自動幫你跑腳本。這種自動化流程能省下很多打字時間。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">注意事項與建議</h2>



<p class="wp-block-paragraph">描述寫得越清楚越好。指令必須在你的終端機環境中本來就可以執行。不要給 AI 太過危險的權限。確保你在執行 Claude Code 的環境已經安裝了必要的工具。這樣 AI 就能順利幫你處理各種瑣碎的雜事。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">什麼是 Agent Skills？</h2>



<p class="wp-block-paragraph">Agent Skills 是一種創新的技術架構，它的核心概念是將專業知識、工作流程（Workflows）和最佳實踐（Best Practices）封裝成「可重複使用的檔案系統資源」。</p>



<p class="wp-block-paragraph">你可以把它想像成一份給新進員工的「入職指南」。 過去，我們可能需要透過一次性、冗長的對話指令來教導 AI 完成任務；而現在，透過 Agent Skills，AI Agent 可以根據當下的需求，自動探索並載入這份「指南」，瞬間從通才變身為能處理特定任務的專家。</p>



<h2 class="wp-block-heading">Skills 架構具備三大核心優勢：</h2>



<ul class="wp-block-list">
<li>專業化（Specialization）：能針對特定領域量身打造功能，例如法律文件審查、財務報表分析，或是符合特定品牌調性的內容創作。</li>



<li>重複使用性（Reusability）：一旦建立完成，就能自動應用在不同的對話、專案中，甚至可以跨越不同的相容 AI Agent 產品使用。</li>



<li>可組合性（Composability）：可以將多個獨立的技能（Skills）組合起來，構建出強大的工作流，用來處理複雜且多步驟的任務。</li>
</ul>



<h2 class="wp-block-heading">對使用者的核心價值</h2>



<p class="wp-block-paragraph">整合 Agent Skills 並非只是技術規格的升級，它對實際應用帶來了兩個實質的改變：</p>



<h3 class="wp-block-heading">固化個人最佳實踐，提升工作效率</h3>



<p class="wp-block-paragraph">在日常工作中，你可能曾經引導 AI 非常完美地完成了一項複雜任務。過去，這個成功的互動可能就留在那次對話紀錄裡。現在，你可以一鍵將這個成功的流程封裝成個人的「Skill」。這等同於將你對特定任務的 Know-how（專業訣竅）和最佳實踐固定下來。未來遇到相同任務時，只需直接調用這個 Skill，就能穩定複製之前的成功流程，不需要重新下指令或試錯，大幅提升個人生產力。</p>



<h3 class="wp-block-heading">降低進入門檻，複用團隊專業知識</h3>



<p class="wp-block-paragraph">對於團隊來說，成員的經驗與知識是最寶貴的資產。Manus AI 即將推出「團隊技能庫」（Team Skill Library），讓成員分享經過驗證的高效 Skill。這代表，新進成員或經驗較資淺的同事可以「站在巨人的肩膀上」，直接使用資深成員建立的 Skill 來執行任務。這不僅降低了操作門檻，更加速了團隊內部的知識累積與流動。<br>核心設計：漸進式揭露（Progressive Disclosure）</p>



<p class="wp-block-paragraph">在技術實作上，Agent Skills 採用了一種極具效率的設計機制，稱為「漸進式揭露」。這個設計是為了確保 AI Agent 在處理任務時，能最有效地利用寶貴的上下文視窗（Context Window），避免資源浪費。</p>



<p class="wp-block-paragraph">Skill 的內容被精細地劃分為三個層級，系統只會在必要時才將內容載入上下文：</p>



<ul class="wp-block-list">
<li>第 1 層：元數據（Metadata）
<ul class="wp-block-list">
<li>內容：包含 Skill 的名稱與描述。</li>



<li>載入時機：系統啟動時載入。</li>



<li>成本：極低（每個 Skill 僅約 100 tokens）。</li>
</ul>
</li>



<li>第 2 層：指令（Instructions）
<ul class="wp-block-list">
<li>內容：SKILL.md 檔案的主要操作指引。</li>



<li>載入時機：當該 Skill 被觸發時才載入。</li>



<li>成本：中等（通常小於 5,000 tokens）。</li>
</ul>
</li>



<li>第 3 層：資源（Resources）
<ul class="wp-block-list">
<li>內容：相關的程式腳本、參考檔案、資產素材。</li>



<li>載入時機：依需求動態載入。</li>



<li>成本：僅在被引用時才會消耗運算資源。</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://max-everyday.com/2026/01/ai-skills-md/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>[YouTube] 下載 mp3 遇到錯誤: HTTP Error 403: Forbidden. Retrying fragment</title>
		<link>https://max-everyday.com/2026/01/youtube-http-error-403-forbidden-retrying-fragment/</link>
					<comments>https://max-everyday.com/2026/01/youtube-http-error-403-forbidden-retrying-fragment/#respond</comments>
		
		<dc:creator><![CDATA[Max]]></dc:creator>
		<pubDate>Fri, 16 Jan 2026 13:24:00 +0000</pubDate>
				<category><![CDATA[電腦相關應用]]></category>
		<category><![CDATA[Tool]]></category>
		<guid isPermaLink="false">https://max-everyday.com/?p=22829</guid>

					<description><![CDATA[在使用 yt-dlp 下載 youtube 影片為 mp3 時出現錯訊息, 這時候即使把瀏覽器的 cookie 儲存為 .txt 檔餵給 yt-dlp 一樣顯示無法下載. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">在使用 yt-dlp 下載 youtube 影片為 mp3 時出現錯訊息, 這時候即使把瀏覽器的 cookie 儲存為 .txt 檔餵給 yt-dlp 一樣顯示無法下載.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="528" src="https://max-everyday.com/wp-content/uploads/2026/01/2026-01-16_21-21_l8-1024x528.jpg?v=1768569709" alt="" class="wp-image-22830" srcset="https://max-everyday.com/wp-content/uploads/2026/01/2026-01-16_21-21_l8-1024x528.jpg?v=1768569709 1024w, https://max-everyday.com/wp-content/uploads/2026/01/2026-01-16_21-21_l8-500x258.jpg?v=1768569709 500w, https://max-everyday.com/wp-content/uploads/2026/01/2026-01-16_21-21_l8-1536x792.jpg?v=1768569709 1536w, https://max-everyday.com/wp-content/uploads/2026/01/2026-01-16_21-21_l8-615x317.jpg?v=1768569709 615w, https://max-everyday.com/wp-content/uploads/2026/01/2026-01-16_21-21_l8.jpg?v=1768569709 1916w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">解法:<br><a href="https://github.com/yt-dlp/yt-dlp/issues/15586#issuecomment-3758088372">https://github.com/yt-dlp/yt-dlp/issues/15586#issuecomment-3758088372</a></p>



<p class="wp-block-paragraph">See this:<br><a href="https://github.com/yt-dlp/yt-dlp/issues/15012">#15012</a></p>



<p class="wp-block-paragraph">update installed&nbsp;<code>yt-dlp</code>&nbsp;and install&nbsp;<code>deno</code>&nbsp;or&nbsp;<code>nodejs</code></p>



<pre class="wp-block-code"><code>pip install -U "yt-dlp&#91;default]"
</code></pre>



<p class="wp-block-paragraph">說明, 一定要執行上面這行, 會多安裝一些新的元件.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Linux/Mac users:</h3>



<pre class="wp-block-code"><code># install deno
curl -fsSL https://deno.land/install.sh | sh

# upgrade yt-dlp
pip install -U "yt-dlp&#91;default]"</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">Windows 平台下載 mp3 使用 dl.bat</p>



<pre class="wp-block-code"><code>yt-dlp -x --audio-format mp3 --js-runtimes node --cookies c:\max\bin\www.youtube.com_cookies.txt --embed-thumbnail %1 %2</code></pre>



<p class="wp-block-paragraph">如果不需要使用 cookie 也可以下載話, 你可以使用這個 dl.bat</p>



<pre class="wp-block-code"><code>yt-dlp -x --audio-format mp3 --js-runtimes node --embed-thumbnail %1 %2</code></pre>



<p class="wp-block-paragraph">如果你是要下載影片, 直接使用 yt-dlp 下載, 無法下載到正確版本的影片, 請使用這個 dlvideo.bat</p>



<pre class="wp-block-code"><code>yt-dlp -f "bestvideo&#91;ext=mp4]+bestaudio&#91;ext=m4a]/best&#91;ext=mp4]/best" --js-runtimes node %1 %2</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">取得瀏覽器的 cookies:</p>



<h2 class="wp-block-heading">在 yt-dlp 改用 –cookies 參數來解決問題</h2>



<p class="wp-block-paragraph">你要先在 chrome 瀏覽器安裝擴充工具(extension): Get cookies.txt LOCALLY</p>



<p class="wp-block-paragraph">傳送門:&nbsp;<a href="https://chromewebstore.google.com/detail/get-cookiestxt-locally/cclelndahbckbenkjhflpdbgdldlbecc">https://chromewebstore.google.com/detail/get-cookiestxt-locally/cclelndahbckbenkjhflpdbgdldlbecc</a></p>



<p class="wp-block-paragraph">點下上面網址後, 按右上角的 “Add to chrome”</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1237" height="519" src="https://max-everyday.com/wp-content/uploads/2025/09/2025-09-25_19-54_bo.jpg?v=1758801320" alt="" class="wp-image-22082" srcset="https://max-everyday.com/wp-content/uploads/2025/09/2025-09-25_19-54_bo.jpg?v=1758801320 1237w, https://max-everyday.com/wp-content/uploads/2025/09/2025-09-25_19-54_bo-500x210.jpg?v=1758801320 500w, https://max-everyday.com/wp-content/uploads/2025/09/2025-09-25_19-54_bo-1024x430.jpg?v=1758801320 1024w, https://max-everyday.com/wp-content/uploads/2025/09/2025-09-25_19-54_bo-615x258.jpg?v=1758801320 615w" sizes="auto, (max-width: 1237px) 100vw, 1237px" /></figure>



<p class="wp-block-paragraph">接著到 youtube 網站, 並登入你的Google 帳號.</p>



<p class="wp-block-paragraph">在 chrome 瀏覽器網址列右側點開擴充工具的小圖, 並點擊 get cookies.txt locally 的小圖:</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="737" height="371" src="https://max-everyday.com/wp-content/uploads/2025/09/2025-09-26_03-45_bq.jpg?v=1758829767" alt="" class="wp-image-22083" srcset="https://max-everyday.com/wp-content/uploads/2025/09/2025-09-26_03-45_bq.jpg?v=1758829767 737w, https://max-everyday.com/wp-content/uploads/2025/09/2025-09-26_03-45_bq-500x252.jpg?v=1758829767 500w, https://max-everyday.com/wp-content/uploads/2025/09/2025-09-26_03-45_bq-615x310.jpg?v=1758829767 615w" sizes="auto, (max-width: 737px) 100vw, 737px" /></figure>



<p class="wp-block-paragraph">點擊 Export As</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="762" height="259" src="https://max-everyday.com/wp-content/uploads/2025/09/2025-09-26_03-45_br.jpg?v=1758829788" alt="" class="wp-image-22084" srcset="https://max-everyday.com/wp-content/uploads/2025/09/2025-09-26_03-45_br.jpg?v=1758829788 762w, https://max-everyday.com/wp-content/uploads/2025/09/2025-09-26_03-45_br-500x170.jpg?v=1758829788 500w, https://max-everyday.com/wp-content/uploads/2025/09/2025-09-26_03-45_br-615x209.jpg?v=1758829788 615w" sizes="auto, (max-width: 762px) 100vw, 762px" /></figure>



<p class="wp-block-paragraph">預設會取得 youtube 網站的 cookies 並儲存到「下載」的資料夾下,</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="762" height="473" src="https://max-everyday.com/wp-content/uploads/2025/09/2025-09-26_03-46_bs.jpg?v=1758831413" alt="" class="wp-image-22088" srcset="https://max-everyday.com/wp-content/uploads/2025/09/2025-09-26_03-46_bs.jpg?v=1758831413 762w, https://max-everyday.com/wp-content/uploads/2025/09/2025-09-26_03-46_bs-500x310.jpg?v=1758831413 500w, https://max-everyday.com/wp-content/uploads/2025/09/2025-09-26_03-46_bs-615x382.jpg?v=1758831413 615w" sizes="auto, (max-width: 762px) 100vw, 762px" /></figure>



<p class="wp-block-paragraph">我是使用 “Export As”, 請把 www.youtube.com_cookies.txt 檔案移到一個你記得起來的與 youtube 外部指令相關的資料夾, 我放在 C:\max\bin\ 目錄下, </p>



<p class="wp-block-paragraph">想偷懶, 不想多點幾下滑鼠去選擇資料夾, 也不想用鍵盤打太多字的話, 可以直接在檔案名稱第一個字之前插入一個 \ 符號, 就會直接存到根目錄.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://max-everyday.com/2026/01/youtube-http-error-403-forbidden-retrying-fragment/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>如何使用n8n的範本</title>
		<link>https://max-everyday.com/2026/01/n8n-workflow-template/</link>
					<comments>https://max-everyday.com/2026/01/n8n-workflow-template/#respond</comments>
		
		<dc:creator><![CDATA[Max]]></dc:creator>
		<pubDate>Tue, 13 Jan 2026 16:55:11 +0000</pubDate>
				<category><![CDATA[電腦相關應用]]></category>
		<guid isPermaLink="false">https://max-everyday.com/?p=22802</guid>

					<description><![CDATA[剛接觸 n8n 的時候最怕對著空白畫面發呆。官方的範本庫是最好的起點。裡面有上千個現成的自動化流程。不管是想處理電子郵件。還是整理 Notion 資料。先搜尋關鍵字看看別 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">剛接觸 n8n 的時候最怕對著空白畫面發呆。官方的範本庫是最好的起點。裡面有上千個現成的自動化流程。不管是想處理電子郵件。還是整理 Notion 資料。先搜尋關鍵字看看別人的做法。這能幫你省下很多摸索的時間。</p>



<p class="wp-block-paragraph">自動化流程的範例。例如有人填寫了 Google 表單，n8n 就能自動把資料存進資料庫，順便發個訊息通知你。</p>



<h2 class="wp-block-heading">如何快速套用流程</h2>



<p class="wp-block-paragraph">在官網找到喜歡的流程後。點開頁面會看到一整串節點圖。直接點擊網頁上的複製按鈕。回到你自己的 n8n 工作區。直接用鍵盤貼上。整個流程就會跳出來。剩下的工作就是填入自己的帳號授權。這比自己慢慢拉節點快得多。</p>



<p class="wp-block-paragraph">範例: <a href="https://n8n.io/workflows/">https://n8n.io/workflows/</a></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="492" src="https://max-everyday.com/wp-content/uploads/2026/01/2026-01-14_00-46_l2-1024x492.jpg?v=1768322845" alt="" class="wp-image-22804" srcset="https://max-everyday.com/wp-content/uploads/2026/01/2026-01-14_00-46_l2-1024x492.jpg?v=1768322845 1024w, https://max-everyday.com/wp-content/uploads/2026/01/2026-01-14_00-46_l2-500x240.jpg?v=1768322845 500w, https://max-everyday.com/wp-content/uploads/2026/01/2026-01-14_00-46_l2-1536x738.jpg?v=1768322845 1536w, https://max-everyday.com/wp-content/uploads/2026/01/2026-01-14_00-46_l2-615x295.jpg?v=1768322845 615w, https://max-everyday.com/wp-content/uploads/2026/01/2026-01-14_00-46_l2.jpg?v=1768322845 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">How to Use Free n8n Templates Without Breaking Everything – Beginner Tutorial<br><a href="https://www.youtube.com/watch?v=tf6L9gzShf0">https://www.youtube.com/watch?v=tf6L9gzShf0</a></p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<div class="gutenbee-responsive-embed"><iframe loading="lazy" title="How to Use Free n8n Templates Without Breaking Everything – Beginner Tutorial" width="885" height="498" src="https://www.youtube.com/embed/tf6L9gzShf0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>
</div></figure>



<h2 class="wp-block-heading">探索社群的實戰經驗</h2>



<p class="wp-block-paragraph">GitHub 上的資源通常更貼近個人開發需求。這類個人收集的筆記。可能包含一些官方沒想到的巧妙組合。官方範本通常追求標準化。看這種個人整理的內容更有趣。你可以學到如何彈性運用節點。這對訓練邏輯很有幫助。</p>



<p class="wp-block-paragraph">網友分享範例: N8N Workflow Collection<br><a href="https://zie619.github.io/n8n-workflows/">https://zie619.github.io/n8n-workflows/</a></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="501" src="https://max-everyday.com/wp-content/uploads/2026/01/2026-01-14_00-44_l1-1024x501.jpg?v=1768322722" alt="" class="wp-image-22803" srcset="https://max-everyday.com/wp-content/uploads/2026/01/2026-01-14_00-44_l1-1024x501.jpg?v=1768322722 1024w, https://max-everyday.com/wp-content/uploads/2026/01/2026-01-14_00-44_l1-500x245.jpg?v=1768322722 500w, https://max-everyday.com/wp-content/uploads/2026/01/2026-01-14_00-44_l1-1536x751.jpg?v=1768322722 1536w, https://max-everyday.com/wp-content/uploads/2026/01/2026-01-14_00-44_l1-615x301.jpg?v=1768322722 615w, https://max-everyday.com/wp-content/uploads/2026/01/2026-01-14_00-44_l1.jpg?v=1768322722 1719w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">從模仿中學習進步</h2>



<p class="wp-block-paragraph">學習自動化流程不需要從頭發明輪子。先把別人的流程搬過來跑一次。觀察資料在每個步驟之間怎麼流動。遇到錯誤再去翻文件找答案。這樣學起來比看長篇理論還快。這是最輕鬆的入門方式。</p>



<h2 class="wp-block-heading">如何使用n8n 自動化工作流（Workflows）資源庫</h2>



<p class="wp-block-paragraph">資源庫網站有3個主要功能</p>



<ul class="wp-block-list">
<li><strong>搜尋與篩選</strong>：首頁提供強大的搜尋框，你可以輸入關鍵字（例如：OpenAI, Gmail, Webhook）來尋找特定的自動化場景。</li>



<li><strong>分類瀏覽</strong>：提供超過 15 種分類（如：Marketing 營銷、DevOps 開發維運、Sales 銷售、AI 應用等），幫助你快速定位需求。</li>



<li><strong>複雜度標記</strong>：每個範例都會標註複雜度（Low, Medium, High）以及包含的節點數量，讓你在導入前評估難易度。</li>
</ul>



<p class="wp-block-paragraph">範例的分類:</p>



<ul class="wp-block-list">
<li>All Categories / 所有分類</li>



<li>AI Agent Development  / AI 代理人開發</li>



<li>Business Process Automation / 業務流程自動化</li>



<li>CRM &amp; Sales / 客戶關係管理與銷售</li>



<li>Cloud Storage &amp; File Management  / 雲端儲存與檔案管理</li>



<li>Communication &amp; Messaging / 通訊與訊息傳遞</li>



<li>Creative Content &amp; Video Automation / 創意內容與影片自動化</li>



<li>Creative Design Automation / 創意設計自動化</li>



<li>Data Processing &amp; Analysis / 數據處理與分析</li>



<li>E-commerce &amp; Retail / 電子商務與零售</li>



<li>Financial &amp; Accounting / 財務與會計</li>



<li>Marketing &amp; Advertising Automation / 行銷與廣告自動化</li>



<li>Project Management / 專案管理</li>



<li>Social Media Management / 社群媒體管理</li>



<li>Technical Infrastructure &amp; DevOps / 技術基礎設施與 DevOps</li>



<li>Web Scraping &amp; Data Extraction / 網頁爬蟲與數據擷取</li>
</ul>



<h3 class="wp-block-heading">如何使用這些範本</h3>



<p class="wp-block-paragraph">可以依照以下步驟將其安裝到你的 n8n 環境中：</p>



<ol start="1" class="wp-block-list">
<li><strong>獲取 JSON 或 ID</strong>：
<ul class="wp-block-list">
<li>找到感興趣的之後範本，點擊 <strong>「Download JSON」</strong> 下載檔案，或是點擊 <strong>「Copy ID」</strong>（如果你的 n8n 版本支援從 ID 導入）。</li>
</ul>
</li>



<li><strong>導入至 n8n</strong>：
<ul class="wp-block-list">
<li>打開你的 n8n 編輯器介面。</li>



<li>點擊左上角的選單，選擇 <strong>「Import from File」</strong>（匯入檔案）並上傳剛剛下載的 <code>.json</code> 檔。</li>



<li>或者直接使用快捷鍵 <code>Ctrl + V</code>（Windows）或 <code>Cmd + V</code>（Mac）將複製的 JSON 內容貼上到空白畫布中。</li>
</ul>
</li>



<li><strong>配置憑證 (Credentials)</strong>：
<ul class="wp-block-list">
<li>導入後，你會看到許多節點。由於範本不包含原作者的密鑰，你需要點開如 Google Sheets、Slack 或 OpenAI 的節點，點擊「Select Credential」來<strong>連結你自己的帳號</strong>。</li>
</ul>
</li>



<li><strong>測試與執行</strong>：
<ul class="wp-block-list">
<li>設定完成後，點擊右下角的 <strong>「Test Workflow」</strong> 運行一次。如果一切正常，即可點擊右上角的開關將其變更為 <strong>「Active」</strong>（啟用）狀態。</li>
</ul>
</li>
</ol>



<h3 class="wp-block-heading">3. 常見範例類型推薦</h3>



<ul class="wp-block-list">
<li><strong>AI 與 LLM 應用</strong>：例如使用 OpenAI 進行內容摘要、RAG（檢索增強生成）知識庫構建。</li>



<li><strong>數據抓取與處理</strong>：自動抓取 Facebook 留言、讀取網站 Sitemap 並過濾 URL。</li>



<li><strong>社群媒體與營銷</strong>：LinkedIn 領英潛在客戶開發、自動回覆訊息等。</li>
</ul>



<h3 class="wp-block-heading">4. 注意事項</h3>



<ul class="wp-block-list">
<li><strong>安全性</strong>：由於這些是社群貢獻的範本，導入後請檢查「HTTP Request」或「Code」節點，確保沒有惡意代碼或不明的外連網址。</li>



<li><strong>版本相容性</strong>：部分舊版範本在最新的 n8n 版本中可能需要手動更新節點（n8n 會提示有可用更新）。</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://max-everyday.com/2026/01/n8n-workflow-template/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>單頁懶人包 (Single-page quick reference table)：資訊圖表生成的工程化方法</title>
		<link>https://max-everyday.com/2026/01/single-pager-table-nano-banana-pro/</link>
					<comments>https://max-everyday.com/2026/01/single-pager-table-nano-banana-pro/#respond</comments>
		
		<dc:creator><![CDATA[Max]]></dc:creator>
		<pubDate>Thu, 01 Jan 2026 15:30:06 +0000</pubDate>
				<category><![CDATA[電腦相關應用]]></category>
		<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://max-everyday.com/?p=22723</guid>

					<description><![CDATA[做資訊圖表其實不是在畫圖。它的本質是把整理好的資訊，轉變成一套視覺系統。如果你的資料結構不清楚，邏輯也還沒定型，AI 就只能亂猜你的意思。這時候出現亂碼或圖不對文，都是很 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">做資訊圖表其實不是在畫圖。它的本質是把整理好的資訊，轉變成一套視覺系統。如果你的資料結構不清楚，邏輯也還沒定型，AI 就只能亂猜你的意思。這時候出現亂碼或圖不對文，都是很正常的事情。如果你還是抱著舊思維，覺得這只是設計工具或下指令的技巧，那就只會一直踩雷。然後你還會誤以為是自己不會用 AI，其實是根本沒搞懂核心問題。</p>



<p class="wp-block-paragraph">解法：先用咒語1號產成好雛型提示詞，修改提示詞內容為正確的資訊之後，再呼叫 nano banana PRO 生成最後圖表。</p>



<p class="wp-block-paragraph">針對產生出來的結果覺得滿意的話，下次就可以跳過使用 Gem 的咒語1號的步驟，可以更快的生成想要的圖表，想視覺化管理你的圖表可以試看看我寫的小工具 <a href="https://max-everyday.com/2025/12/promptnano/">PromptNano</a>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" src="https://max-everyday.com/wp-content/uploads/2026/01/single-pager-16x9-cover-1024x559.jpg?v=1767284053" alt="" class="wp-image-22729" srcset="https://max-everyday.com/wp-content/uploads/2026/01/single-pager-16x9-cover-1024x559.jpg?v=1767284053 1024w, https://max-everyday.com/wp-content/uploads/2026/01/single-pager-16x9-cover-500x273.jpg?v=1767284053 500w, https://max-everyday.com/wp-content/uploads/2026/01/single-pager-16x9-cover-615x335.jpg?v=1767284053 615w, https://max-everyday.com/wp-content/uploads/2026/01/single-pager-16x9-cover.jpg?v=1767284053 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">建議增加一個單頁懶人包的 Gem 在 gemini 裡:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="609" src="https://max-everyday.com/wp-content/uploads/2026/01/2026-01-01_23-20_kt-1024x609.jpg?v=1767281122" alt="" class="wp-image-22724" srcset="https://max-everyday.com/wp-content/uploads/2026/01/2026-01-01_23-20_kt-1024x609.jpg?v=1767281122 1024w, https://max-everyday.com/wp-content/uploads/2026/01/2026-01-01_23-20_kt-500x297.jpg?v=1767281122 500w, https://max-everyday.com/wp-content/uploads/2026/01/2026-01-01_23-20_kt-615x366.jpg?v=1767281122 615w, https://max-everyday.com/wp-content/uploads/2026/01/2026-01-01_23-20_kt.jpg?v=1767281122 1342w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">輸入主題</h2>



<p class="wp-block-paragraph">Java 遷移到 Kotlin</p>



<h2 class="wp-block-heading">就可以取得的可修改題示詞</h2>



<pre class="wp-block-code"><code>## **Java 遷移到 Kotlin：從繁瑣冗長到精煉高效的現代化演進**

### **第一區塊：背景與定位 (Context &amp; Positioning)**

本區塊呈現 Kotlin 如何作為「橋樑」存在於 JVM 生態系中，實現與 Java 的無縫互操作。

* **&#91;圖示：Java 原始碼]**  **&#91;圖示：Kotlin 編譯器]**  **&#91;圖示：JVM 虛擬機]**
* **Java 遺留系統 (Legacy)**：提供穩定的商業邏輯與豐富的程式庫基礎。
* **Kotlin 層 (Modern Layer)**：透過 100% Interoperability 呼叫 Java 代碼，負責新功能的開發。
* **JVM 執行環境**：雙方編譯後皆為 Bytecode，在同一運行環境內共存與溝通。
* **開發者工具 (IDE)**：IntelliJ/Android Studio 提供一鍵轉換（J2K）提升遷移效率。



---

### **第二區塊：核心功能與操作 (Core Operations &amp; Syntax)**

展示遷移過程中最具感的語法精簡與安全性提升。

1. **步驟一：空指標安全轉型 (Null Safety)**
* **視覺建議**：&#91;盾牌圖示] 防禦性編程。
* **說明**：將 Java 可能拋出 NPE 的變數改為 Kotlin 的 Nullable 類型。


2. **步驟二：資料類別精簡 (Data Classes)**
* **視覺建議**：&#91;壓縮文件圖示] 消除樣板代碼。
* **說明**：將數十行的 POJO 轉化為單行代碼，自動生成 getter/setter/toString。


3. **步驟三：函式擴充與 Lambda (Functional)**
* **視覺建議**：&#91;插座圖示] 增強既有類別功能。
* **說明**：在不繼承的情況下，為 Java 舊類別增加新方法。



**【代碼視窗：終端機/編輯器模擬】**

```kotlin
// 1. Data Class: 取代 Java 50 行的 User.java
data class User(val id: Int, var name: String, val email: String?)

// 2. Extension Function: 為 String 增加驗證功能
fun String.isValidEmail(): Boolean = this.contains("@")

// 3. Null Safety: 編譯時即攔截錯誤
val name: String? = null
println(name?.length ?: 0) // 若為 null 則輸出 0

```

---

### **第三區塊：典型應用場景 (Use Cases)**

* **&#91;圖示：手機設備] 現代化 Android 開發**
* 利用 Coroutines 取代複雜的 AsyncTask 或 RxJava。
* 大幅縮減 UI 層代碼，配合 Jetpack Compose 實現聲明式佈局。


* **&#91;圖示：伺服器] Spring Boot 微服務升級**
* 利用 Kotlin 的編譯時檢查減少生產環境的 Runtime Exception。
* 透過 Kotlin DSL 撰寫更易讀的組態設定與資料庫查詢。


* **&#91;圖示：齒輪/扳手] 遺留系統局部翻新**
* 不需一次性重構，僅在開發新模組時使用 Kotlin 撰寫。
* 利用混合編譯特性，讓舊 Java 代碼與新 Kotlin 功能在同專案運行。



---

### **第四區塊：優缺點與比較 (Evaluation &amp; Comparison)**

| **優點清單 (綠色區)** | **限制與替代方案 (紫色/紅色區)** |
| --- | --- |
| 1. **空安全 (Null Safety)**：消除 NPE 隱患。 | 1. **編譯速度**：增量編譯較 Java 慢（替代：優化 Gradle 快取）。 |
| 2. **簡潔性**：減少約 30%-40% 的樣板代碼。 | 2. **學習曲線**：進階特性（Coroutines, DSL）需時間。 |
| 3. **協程 (Coroutines)**：高效率並行處理。 | 3. **二進制兼容**：舊版庫可能衝突（替代：保持 Kotlin 版本一致）。 |
| 4. **完全兼容**：與現有 Java 庫無縫混用。 |  |

**&#91;未來趨勢 (右側小區塊)]**

* **Kotlin Multiplatform (KMP)**：代碼共享至 iOS/Desktop。
* **Server-side Growth**：成為 Spring 生態系的首選語言。
* **Wasm Support**：Kotlin 在 WebAssembly 的效能優化。</code></pre>



<h2 class="wp-block-heading">Gemini nano banana 的 &#8220;思考型&#8221; 結果</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" src="https://max-everyday.com/wp-content/uploads/2026/01/Gemini_Generated_Image_vf3tjqvf3tjqvf3t-1024x559.png?v=1767281301" alt="" class="wp-image-22725" srcset="https://max-everyday.com/wp-content/uploads/2026/01/Gemini_Generated_Image_vf3tjqvf3tjqvf3t-1024x559.png?v=1767281301 1024w, https://max-everyday.com/wp-content/uploads/2026/01/Gemini_Generated_Image_vf3tjqvf3tjqvf3t-500x273.png?v=1767281301 500w, https://max-everyday.com/wp-content/uploads/2026/01/Gemini_Generated_Image_vf3tjqvf3tjqvf3t-615x335.png?v=1767281301 615w, https://max-everyday.com/wp-content/uploads/2026/01/Gemini_Generated_Image_vf3tjqvf3tjqvf3t.png?v=1767281301 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">呼叫 nana banana “PRO” 生成, 用”思考型” 會糊糊的, 亂碼也會很多, 建議使用 “PRO”</p>



<p class="wp-block-paragraph">資料來源<br><a href="https://www.facebook.com/tunghsing.hsieh/videos/2368202500302680/">https://www.facebook.com/tunghsing.hsieh/videos/2368202500302680/</a></p>



<h2 class="wp-block-heading">架構生成提示詞</h2>



<pre class="wp-block-code"><code># Role
你是一位精通技術溝通的資深架構師，擅長將複雜技術轉化為「單頁懶人包 (One-pager Cheat Sheet)」。
# Task
請針對主題：**&#91;填入您的主題，例如：Docker 容器化技術]**，依照下列的視覺化版面邏輯，撰寫一份詳細的內容架構企劃。
# Structure Constraints (必須嚴格遵守以下四個區塊)
**標題區：**
- 主標題：&#91;主題]：&#91;一句強而有力的Slogan]
**第一區塊：背景與定位 (Context &amp; Positioning)**
- 目標：用類似流程圖的概念解釋該技術在生態系中的位置。
- 內容要求：列出 3-4 個關鍵圖示實體（例如：OS、User、Cloud），並用簡短文字描述它們之間的互動關係。
**第二區塊：核心功能與操作 (Core Operations &amp; Syntax)**
- 目標：展示實際如何使用（How-to）。
- 內容要求：
1. 提供 3 個關鍵步驟。
2. **必須包含代碼視窗內容**：請提供 2-3 行核心指令（Command Line）或程式碼片段，模擬終端機顯示。
3. 每個步驟需搭配一個視覺圖示建議。
**第三區塊：典型應用場景 (Use Cases)**
- 目標：展示可以用來做什麼。
- 內容要求：提供 3 個最具代表性的應用場景，每個場景包含：
- 圖示建議
- 標題
- 兩行簡短說明
**第四區塊：優缺點與比較 (Evaluation &amp; Comparison)**
- 目標：總結與客觀分析。
- 內容要求：
- **優點清單 (綠色區)**：4 點核心優勢。
- **限制與替代方案 (紫色/紅色區)**：3 點限制，並在括號內提供替代工具（例如：缺點 X -&gt; 替代 Y）。
- **未來趨勢 (右側小區塊)**：3 個未來發展關鍵字。
# Tone &amp; Style
- 語言：繁體中文。
- 風格：專業、精簡、模組化。
- 避免長篇大論，使用條列式（Bullet points）。</code></pre>



<p class="wp-block-paragraph">幫我根據上面的指令生成，主題：透過MCP服務，自由搭建AI Agent 的主題</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">YouTube: <a href="https://youtu.be/ch50vpFjFYc">https://youtu.be/ch50vpFjFYc</a></p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<div class="gutenbee-responsive-embed"><iframe loading="lazy" title="單頁懶人包 ：資訊圖表生成的工程化方法single pager final" width="885" height="498" src="https://www.youtube.com/embed/ch50vpFjFYc?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>
</div></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://max-everyday.com/2026/01/single-pager-table-nano-banana-pro/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PromptNano &#8211; AI 提示詞圖庫</title>
		<link>https://max-everyday.com/2025/12/promptnano/</link>
					<comments>https://max-everyday.com/2025/12/promptnano/#respond</comments>
		
		<dc:creator><![CDATA[Max]]></dc:creator>
		<pubDate>Tue, 30 Dec 2025 14:10:49 +0000</pubDate>
				<category><![CDATA[電腦相關應用]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Tool]]></category>
		<guid isPermaLink="false">https://max-everyday.com/?p=22699</guid>

					<description><![CDATA[不用自己架設網站, 就可以有自己的網站, 網頁上傳的圖片會放在自己的 google drive, 收集的提示詞儲存於 google sheet, 刪除的照片會移動到 go [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1877" height="1024" src="https://max-everyday.com/wp-content/uploads/2025/12/prompt-nano-1920x_clean.jpg?v=1767104624" alt="" class="wp-image-22704" srcset="https://max-everyday.com/wp-content/uploads/2025/12/prompt-nano-1920x_clean.jpg?v=1767104624 1877w, https://max-everyday.com/wp-content/uploads/2025/12/prompt-nano-1920x_clean-500x273.jpg?v=1767104624 500w, https://max-everyday.com/wp-content/uploads/2025/12/prompt-nano-1920x_clean-1024x559.jpg?v=1767104624 1024w, https://max-everyday.com/wp-content/uploads/2025/12/prompt-nano-1920x_clean-1536x838.jpg?v=1767104624 1536w, https://max-everyday.com/wp-content/uploads/2025/12/prompt-nano-1920x_clean-615x336.jpg?v=1767104624 615w" sizes="auto, (max-width: 1877px) 100vw, 1877px" /></figure>



<p class="wp-block-paragraph">不用自己架設網站, 就可以有自己的網站, 網頁上傳的圖片會放在自己的 google drive, 收集的提示詞儲存於 google sheet, 刪除的照片會移動到 google drive 的垃圾桶.</p>



<p class="wp-block-paragraph">下載點: <a href="https://github.com/max32002/PromptNano">https://github.com/max32002/PromptNano</a></p>



<p class="wp-block-paragraph">執行畫面:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="686" src="https://max-everyday.com/wp-content/uploads/2025/12/2025-12-30_21-27_ks-1024x686.jpg?v=1767101383" alt="" class="wp-image-22700" srcset="https://max-everyday.com/wp-content/uploads/2025/12/2025-12-30_21-27_ks-1024x686.jpg?v=1767101383 1024w, https://max-everyday.com/wp-content/uploads/2025/12/2025-12-30_21-27_ks-500x335.jpg?v=1767101383 500w, https://max-everyday.com/wp-content/uploads/2025/12/2025-12-30_21-27_ks-615x412.jpg?v=1767101383 615w, https://max-everyday.com/wp-content/uploads/2025/12/2025-12-30_21-27_ks.jpg?v=1767101383 1194w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">YouTube: <a href="https://youtu.be/gbjrb-OC3Qw">https://youtu.be/gbjrb-OC3Qw</a></p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<div class="gutenbee-responsive-embed"><iframe loading="lazy" title="PromptNano – AI 提示詞圖庫" width="885" height="498" src="https://www.youtube.com/embed/gbjrb-OC3Qw?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>
</div></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><strong>PromptNano</strong>&nbsp;是一個輕量級、視覺化的 AI 提示詞（Prompt）管理工具。專為 Nano banana, chatGPT, Midjourney、Stable Diffusion 等 AI 創作者設計。</p>



<p class="wp-block-paragraph">不同於冷冰冰的文字表格，PromptNano 讓你透過「看圖」的方式直覺管理靈感。搭配溫暖可愛的 UI 設計，支援深色/淺色主題切換，讓整理提示詞變成一件療癒的事。</p>



<p class="wp-block-paragraph">本專案使用 <strong>Google Apps Script</strong> 架構，支援線上使用流暢的操作體驗。如果想在本地端或雲端虛擬主機上使用，可以使用 <a href="https://github.com/max32002/PromptNano-Node">Node.js + SQLite 架構的 PromptNano-Node</a>。</p>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2728.png" alt="✨" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 主要功能<a href="https://github.com/max32002/PromptNano#-%E4%B8%BB%E8%A6%81%E5%8A%9F%E8%83%BD"></a></h2>



<ul class="wp-block-list">
<li><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f440.png" alt="👀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 視覺化瀑布流</strong>&nbsp;捨棄枯燥的文字列表，採用卡片式瀑布流設計，透過圖片直接回想並複製提示詞。</li>



<li><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f313.png" alt="🌓" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 雙色溫暖主題</strong>&nbsp;內建「草莓牛奶（淺色）」與「黑巧克力（深色）」兩種主題，隨點隨切，所有介面與彈窗完美適應。</li>



<li><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3f7.png" alt="🏷" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 智慧標籤檢索</strong>&nbsp;支援&nbsp;<code>#Tag</code>&nbsp;快速過濾與關鍵字搜尋。輸入框右側附帶一鍵清除功能，操作更流暢。</li>



<li><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4d8.png" alt="📘" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 內建詠唱秘籍</strong>&nbsp;整合「提示詞教學」模組，包含逆向工程技巧、光影氛圍關鍵字與手繪風格指令，點擊關鍵字即可一鍵複製。</li>



<li><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9cb.png" alt="🧋" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 繁體中文友善</strong>&nbsp;新增的提示詞都會先轉換為繁體中文再存入Google Sheet資料庫。</li>



<li><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2601.png" alt="☁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Google Drive 整合</strong>&nbsp;基於 Google Apps Script (GAS) 開發，圖片與資料直接儲存在你的 Google Drive 與 Sheets，無需架設伺服器。</li>
</ul>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 技術架構<a href="https://github.com/max32002/PromptNano#%EF%B8%8F-%E6%8A%80%E8%A1%93%E6%9E%B6%E6%A7%8B"></a></h2>



<ul class="wp-block-list">
<li><strong>Frontend</strong>: HTML5, CSS3 (CSS Variables for Theming), Vanilla JavaScript</li>



<li><strong>Backend</strong>: Google Apps Script (GAS)</li>



<li><strong>Database</strong>: Google Sheets (儲存資料), Google Drive (儲存圖片)</li>
</ul>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 如何部署 (Installation)<a href="https://github.com/max32002/PromptNano#-%E5%A6%82%E4%BD%95%E9%83%A8%E7%BD%B2-installation"></a></h2>



<p class="wp-block-paragraph">本專案適合部署於 Google Apps Script 環境。</p>



<ol class="wp-block-list">
<li><strong>建立 Google Sheet</strong>&nbsp;在 Google Drive 建立一個新的試算表，記下網址的&nbsp;<code>Spreadsheet ID</code>。 在 Google Drive 建立一個用於上傳的資料夾，記下網址的&nbsp;<code>Folder ID</code>。</li>



<li><strong>建立 Apps Script</strong>&nbsp;在試算表中點擊&nbsp;<code>擴充功能</code>&nbsp;&gt;&nbsp;<code>Apps Script</code>。</li>



<li><strong>貼上程式碼</strong>
<ul class="wp-block-list">
<li>將&nbsp;<code>Code.gs</code>&nbsp;的內容複製到編輯器的&nbsp;<code>.gs</code>&nbsp;檔案。</li>



<li>建立一個&nbsp;<code>index.html</code>&nbsp;檔案，將前端代碼貼入。</li>
</ul>
</li>



<li><strong>發布為網頁應用程式</strong>&nbsp;點擊右上角&nbsp;<code>部署</code>&nbsp;&gt;&nbsp;<code>新增部署作業</code>&nbsp;&gt; 選取&nbsp;<code>網頁應用程式</code>。
<ul class="wp-block-list">
<li>執行身分：<code>我</code></li>



<li>誰可以存取：<code>任何人</code>&nbsp;(或僅限自己)</li>
</ul>
</li>



<li><strong>開始使用</strong>&nbsp;取得生成的 Web App URL，即可開始管理你的靈感庫。</li>
</ol>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2699.png" alt="⚙" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 如何詠唱出你自己的版本 (Build app prompt)<a href="https://github.com/max32002/PromptNano#%EF%B8%8F-%E5%88%9D%E5%A7%8B%E7%89%88%E6%9C%AC-initial-prompt"></a></h2>



<p class="wp-block-paragraph">生成 Google Apps script + html 網頁的 AI提示詞:</p>



<pre class="wp-block-code"><code>使用 google GAS, 寫一個相簿管理的網站, 網頁顯示風格為溫暖可愛, 上傳的圖片要在放 google driver 指定的上傳路徑, 上傳後自動產生縮圖, 圖片的屬性有:標題,說明欄位,tag,圖片實際google driver 存放路徑.

前端相簿網頁, 可以輸入關鍵字進行圖片的說明欄位過濾查詢,

前端相簿網頁在顯示上傳的照片時, 以縮圖的方式顯示, 並將圖片的 hash tag 欄位以 # 號進行分隔顯示, 點下某一個 tag, 以 tag 名稱過關鍵字, 對 tag 欄位進行 "#" + tag 名稱的過濾查詢,

點下某一個縮圖後,彈出實際完整圖片, 並顯示標題與說明欄位, 有要一個"複製" 的按鈕, 把說明欄位內容複製到剪貼簿.</code></pre>



<p class="wp-block-paragraph">如果你有VPS 或 GCP / AWS 的話, 修改掉提示詞裡的 Google GAS, 就可以取得你需要的程式碼了.</p>



<p class="wp-block-paragraph">有了相簿管理程式之後，提示詞用於修改網站名稱與相關按鈕上的名稱：</p>



<pre class="wp-block-code"><code>修改溫暖相簿為"AI靈感資料庫", 圖片的說明欄位, 修改為"提示詞", 讓我們透過「圖片」直覺尋找提示詞， 結合強大的「逆向工程」分析，一鍵提煉雲標籤，讓創意隨取隨用。</code></pre>



<p class="wp-block-paragraph">增加刪除提示詞與相薄功能：</p>



<pre class="wp-block-code"><code>在圖片清單的頁面, 增加刪除照片的功能, 刪除前要讓使用者做確認後才實際從 google drive 與 sheet 中刪除資料.</code></pre>



<p class="wp-block-paragraph">以下增加微調元件位置，與增加提示與確認不使用瀏覽器內建指令：</p>



<pre class="wp-block-code"><code>* &lt;button&gt; tag 比照 hash tag 的 span 在 hover 時變換顏色.
* #uploadOverlay的  modal 彈出後, &lt;input type="text" name="title"&gt; auto focus()
* 移動 &lt;button&gt; &#x1f4cb; 複製提示詞 到 &lt;div class="prompt-label"&gt;提示詞 (Prompt)&lt;/div&gt; 右側, 讓使用者不用 scroll down.
* #detailModal 裡的 #modalTags 比照瀏覽清單的 hash tag 顯示方式與規則.
* #detailModal 裡的提供刪除該組照片的功能.
* 整個網站, 要支援深色主題/淺色主題的切換功能.
* 修改 confirm() 為使用 modal, 因為 confirm() 畫面太醜.
* 修改 alert(), 以 Modal 取代.</code></pre>



<p class="wp-block-paragraph">用來切換整個網站風格：</p>



<pre class="wp-block-code"><code>重新改寫這個整個網站的 css, 風格是可愛溫暖, 要支援深色/淺色主題的切換, 所有的彈出式 modal 都要套用到深色/淺色的主題.</code></pre>



<p class="wp-block-paragraph">增加&#8221;清除過濾&#8221;功能：</p>



<pre class="wp-block-code"><code>增加"清除過濾" button 在 search box 右側, 點下後清除 search 關鍵字, 並重新取得無關鍵字的 list.</code></pre>



<p class="wp-block-paragraph">「詠唱魔法秘籍」的新增, 也很奇葩，這句是提問，結果變成實作：</p>



<pre class="wp-block-code"><code>想在這個網頁增加提示詞教學的功能, 有那些設計的選擇, 教學的內容如下:
---
不知道怎麼下高品質的提示詞，也可以先去收集別人的作品，上傳給AI 之後，請 AI 分析圖片並生成可以生成出圖片的提示詞，有了提示詞再進行調整就比較有效率。

另一個方式是先知道常用的提示詞用於風格與質感...。</code></pre>



<p class="wp-block-paragraph">調整右側的按鈕：</p>



<pre class="wp-block-code"><code>調整 .header-top 下, 右側3個 button 在視窗width 較小之下, 要置右.</code></pre>



<p class="wp-block-paragraph">這句比較神奇，AI 反而給出更具建設性的解法，是要把右側的按鈕變成群組，並集體置右。</p>



<p class="wp-block-paragraph">修改 hash tag 沒有正確被分隔開：</p>



<pre class="wp-block-code"><code>修改 &lt;span class="tag" onclick="filterByTag('#opennana #nano', event)"&gt;##opennana #nano&lt;/span&gt; 的顯示方式為:
tag 的內容, 以 "#" 進行 split, 前端顯示為多個 span tag.
span tag 的 text 不要顯示 # 符號, </code></pre>



<p class="wp-block-paragraph">同一個檔案名稱在Google Drive 是可以同時存在，但使用者下載之後就會被覆蓋：</p>



<pre class="wp-block-code"><code>解決上傳檔案名稱相同造成的問題</code></pre>



<p class="wp-block-paragraph">這個解法最後只有修改上傳的檔名，加入前置的目前時間，例如 &#8220;20251230_&#8221; + 原檔名</p>



<p class="wp-block-paragraph">增加 footer：</p>



<pre class="wp-block-code"><code>在不起眼的地方, 想增加版本號碼, 第一版是 1.0.0 版.</code></pre>



<p class="wp-block-paragraph">如果你是<strong>簡體中文</strong>的使用者，請註解掉文字轉換的scrip，因為提示詞都會先轉換為繁體中文再存入Google Sheet資料庫，看不懂 Code.gs 程式，可以服用下列提示詞對 Code.gs 進行修改:</p>



<pre class="wp-block-code"><code>移除程式中關於提示詞語言轉換繁體中文的程式碼，並確保上傳的資料內容維持正確。
</code></pre>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3a8.png" alt="🎨" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 更換主題 (Theme)<a href="https://github.com/max32002/PromptNano#-%E6%9B%B4%E6%8F%9B%E4%B8%BB%E9%A1%8C-theme"></a></h2>



<p class="wp-block-paragraph">複製 index.html 內容貼到 AI, 提示詞:</p>



<pre class="wp-block-code"><code>重新改寫這個整個網站的 css, 風格是可愛溫暖, 要支援深色/淺色主題的切換, 所有的彈出式 modal 都要套用到深色/淺色的主題.
</code></pre>



<p class="wp-block-paragraph">AI 自動生成網頁通常提供以下幾種主流風格：</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f308.png" alt="🌈" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 按視覺氛圍分類<a href="https://github.com/max32002/PromptNano#-%E6%8C%89%E8%A6%96%E8%A6%BA%E6%B0%9B%E5%9C%8D%E5%88%86%E9%A1%9E"></a></h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>風格名稱</th><th>視覺特徵</th><th>適用場景</th></tr></thead><tbody><tr><td><strong>極簡主義 (Minimalist)</strong></td><td>大量留白、細字體、單色調</td><td>個人品牌、建築、攝影</td></tr><tr><td><strong>科技未來 (Tech/Futuristic)</strong></td><td>深色模式、霓虹發光、3D 幾何</td><td>SaaS、AI 工具、加密貨幣</td></tr><tr><td><strong>可愛活潑 (Cute/Playful)</strong></td><td>粉嫩色、圓角、手繪插圖</td><td>教育、寵物、創意市集</td></tr><tr><td><strong>復古懷舊 (Retro/Vintage)</strong></td><td>紙張紋理、低飽和度、Y2K 感</td><td>古著、黑膠唱片、獨立雜誌</td></tr><tr><td><strong>自然環保 (Organic)</strong></td><td>大地色系、植物元素、有機曲線</td><td>有機食品、心理諮商、戶外</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4bc.png" alt="💼" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 按專業功能分類<a href="https://github.com/max32002/PromptNano#-%E6%8C%89%E5%B0%88%E6%A5%AD%E5%8A%9F%E8%83%BD%E5%88%86%E9%A1%9E"></a></h3>



<ul class="wp-block-list">
<li><strong>專業商務 (Corporate)</strong>：嚴謹排版、藍灰色調，適合律師、金融業。</li>



<li><strong>藝術創意 (Artistic)</strong>：誇張漸層、不對稱設計，適合設計工作室。</li>



<li><strong>沉浸式 3D (Immersive)</strong>：玻璃擬態、動態渲染，適合高端產品展示。</li>



<li><strong>俐落電商 (E-commerce)</strong>：清晰網格、醒目 CTA 按鈕，適合零售業。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" />&nbsp;<strong>小撇步</strong>：在 AI 生成指令（Prompt）中加入&nbsp;<code>Glassmorphism</code>&nbsp;(玻璃擬態) 或&nbsp;<code>Clean Typography</code>&nbsp;(乾淨排版) 等關鍵字，可以大幅提升產出的質感。</p>
</blockquote>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c2.png" alt="📂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 檔案結構<a href="https://github.com/max32002/PromptNano#-%E6%AA%94%E6%A1%88%E7%B5%90%E6%A7%8B"></a></h2>



<pre class="wp-block-code"><code>PromptNano/
├── Code.gs         # 後端邏輯 (處理圖片上傳、刪除、讀取 Sheet)
├── index.html      # 前端介面 (包含 CSS, JS 與 HTML 結構)
├── appscript.json  # 資訊清單（Manifest），記錄專案的時區、權限範圍（OAuth Scopes）與程式庫等核心設定
└── README.md       # 專案說明文件
</code></pre>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4dd.png" alt="📝" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 版本紀錄<a href="https://github.com/max32002/PromptNano#-%E7%89%88%E6%9C%AC%E7%B4%80%E9%8C%84"></a></h2>



<ul class="wp-block-list">
<li><strong>v1.1.0</strong>&nbsp;(2025-12-31)
<ul class="wp-block-list">
<li>增加下載圖片按鈕。</li>



<li>置換部份按鈕的圖示。</li>



<li>調整部份顏色。</li>
</ul>
</li>



<li><strong>v1.0.0</strong>&nbsp;(2025-12-30)
<ul class="wp-block-list">
<li>初始版本發布。</li>



<li>實作深色/淺色主題切換。</li>



<li>文字內容簡轉中。</li>



<li>新增「詠唱魔法秘籍」教學模組。</li>



<li>優化 RWD 手機版瀏覽體驗。</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c4.png" alt="📄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 授權 (License)<a href="https://github.com/max32002/PromptNano#-%E6%8E%88%E6%AC%8A-license"></a></h2>



<p class="wp-block-paragraph">本專案採用&nbsp;<a href="https://github.com/max32002/PromptNano/blob/main/LICENSE">MIT License</a>&nbsp;授權。 歡迎自由修改、使用或作為學習用途。</p>



<p class="wp-block-paragraph"></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">相關文章</h2>



<ul class="wp-block-list">
<li><a href="https://stackoverflow.max-everyday.com/2025/12/gas-debug/">GAS 除錯</a></li>



<li><a href="https://stackoverflow.max-everyday.com/2025/12/gas-web-app-google-drive-cross-site/">GAS web app 與 Google drive 的「防盜連機制」造成圖片無法顯示</a></li>



<li><a href="https://stackoverflow.max-everyday.com/2025/12/gas-deploy-exec-dev/">GAS 執行的2種網址: 正式版 /exec , 測試版 /dev</a></li>



<li><a href="https://stackoverflow.max-everyday.com/2025/12/gas-deploy/">GAS – 編輯有版本的部署作業</a></li>



<li><a href="https://stackoverflow.max-everyday.com/2025/12/gas-appsscript-json/">GAS appsscript.json 被稱為資訊清單（Manifest）</a></li>



<li><a href="https://stackoverflow.max-everyday.com/2025/12/gas-google-driver-permission/">GAS 雲端硬碟權限錯誤</a></li>



<li><a href="https://stackoverflow.max-everyday.com/2025/12/gas-languageapp/">GAS 簡體中文字轉成繁中</a></li>



<li><a href="https://stackoverflow.max-everyday.com/2025/12/gas-telegram-bot/">GAS 串接 telegram bot</a></li>



<li><a href="https://stackoverflow.max-everyday.com/2025/12/gas-web-app/">GAS 網頁服務</a></li>



<li><a href="https://stackoverflow.max-everyday.com/2025/12/gas-multi-sheet/">GAS 跨檔案抓取資料</a></li>



<li><a href="https://stackoverflow.max-everyday.com/2025/12/gas-send-email/">GAS 寄送電子郵件</a></li>



<li><a href="https://stackoverflow.max-everyday.com/2025/12/gas-sheet-fill/">GAS 用程式自動填寫試算表的格子</a></li>



<li><a href="https://stackoverflow.max-everyday.com/2025/12/gas-hello-world/">Google Apps Script 入門教學</a></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">心得</h2>



<p class="wp-block-paragraph">Google 的 Apps script 真好, 給大家免費(有限流量)的圖床(Google Drive), 還可以架設免費的網站, 還提供免費的資料庫(Google Sheet).</p>
]]></content:encoded>
					
					<wfw:commentRss>https://max-everyday.com/2025/12/promptnano/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>用 AI  幫苦累蛙圓體補缺字「搐」</title>
		<link>https://max-everyday.com/2025/12/antigravity-kurewa-tutorial/</link>
					<comments>https://max-everyday.com/2025/12/antigravity-kurewa-tutorial/#respond</comments>
		
		<dc:creator><![CDATA[Max]]></dc:creator>
		<pubDate>Sun, 28 Dec 2025 04:27:33 +0000</pubDate>
				<category><![CDATA[電腦相關應用]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Google]]></category>
		<guid isPermaLink="false">https://max-everyday.com/?p=22646</guid>

					<description><![CDATA[示範用 antigravity, 修改github 上的專案, 幫苦累蛙圓體補缺字「搐」, 網友的許願網址:https://github.com/max32002/kur [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" src="https://max-everyday.com/wp-content/uploads/2025/12/zi2zi-kurewa-cover-1920-1024x559.jpg?v=1766895988" alt="" class="wp-image-22650" srcset="https://max-everyday.com/wp-content/uploads/2025/12/zi2zi-kurewa-cover-1920-1024x559.jpg?v=1766895988 1024w, https://max-everyday.com/wp-content/uploads/2025/12/zi2zi-kurewa-cover-1920-500x273.jpg?v=1766895988 500w, https://max-everyday.com/wp-content/uploads/2025/12/zi2zi-kurewa-cover-1920-615x335.jpg?v=1766895988 615w, https://max-everyday.com/wp-content/uploads/2025/12/zi2zi-kurewa-cover-1920.jpg?v=1766895988 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">示範用 antigravity, 修改github 上的專案,  幫苦累蛙圓體補缺字「搐」, 網友的許願網址:<br><a href="https://github.com/max32002/kurewa-gothic/issues/4">https://github.com/max32002/kurewa-gothic/issues/4</a></p>



<p class="wp-block-paragraph">修改前的程式碼:<br><a href="https://github.com/EuphoriaYan/zi2zi-pytorch">https://github.com/EuphoriaYan/zi2zi-pytorch</a></p>



<p class="wp-block-paragraph">antigravity 提示詞:</p>



<pre class="wp-block-code"><code>採樣改用 PixelShuffle
增加 Self-Attention
調整程式輸入 384x384 的圖片也可以正常運作</code></pre>



<p class="wp-block-paragraph">修改後的程式碼:<br><a href="https://github.com/max32002/zi2zi-pytorch">https://github.com/max32002/zi2zi-pytorch</a></p>



<h2 class="wp-block-heading">補字製作步驟</h2>



<p class="wp-block-paragraph">從 AI 訓練到字型文件生成的 14 個步驟回饋循環</p>



<p class="wp-block-paragraph"><strong>Phase A: AI 訓練與生成</strong></p>



<ul class="wp-block-list">
<li>Step 1：數據預處理<br>程式碼: font2img.py</li>



<li>Step 2：數據打包 (Pickle)<br>程式碼: package.py</li>



<li>Step 3：模型訓練 (cGAN) 接收優化後的數據進行微調<br>程式碼: train.py</li>



<li>Step 4：推論轉換<br>程式碼: infer.py</li>



<li>Step 5：檢視訓練成果<br>初步觀察推論結果品質: 差強人意(maybe), 極優(good)</li>
</ul>



<p class="wp-block-paragraph"><strong>Phase B: 圖像與向量處理</strong></p>



<ul class="wp-block-list">
<li>Step 6：合併推論與手動修圖<br>程式碼: generate_glyphs.py,<a href="https://dictionary.max-everyday.com/" target="_blank" rel="noreferrer noopener">&nbsp;中文部件查詢</a></li>



<li>Step 7：剪裁右側對照圖, 完成圖像清理後回灌優質數據進行訓練優化<br>程式碼: crop_images.py</li>



<li>Step 8：轉為 SVG 格式<br>程式碼: bmp_to_svg.py</li>



<li>Step 9：SVG 內容簡化<br>程式碼: svg_simplify.py</li>
</ul>



<p class="wp-block-paragraph"><strong>Phase C: 字型工程與生成</strong></p>



<ul class="wp-block-list">
<li>Step 10：字型匯入 SVG<br>程式碼: import_svg.py</li>



<li>Step 11：處理衝突的字元<br>程式碼: font_delete_font.py, </li>



<li>Step 12：縮放筆畫 (多種字重) , Regular ➔ ExtraLight, Light, SemiBold, Bold<br>程式碼: expand_stroke.py</li>



<li>Step 13：修改字重/版號資訊, 腳本化處理，避免 GUI 操作<br>程式碼: replace_string.py </li>



<li>Step 14：生成字型與 Webfont<br>程式碼: generate.py</li>
</ul>



<p class="wp-block-paragraph">極醜的完成品下載: <br><a href="https://github.com/max32002/kurewa-gothic">https://github.com/max32002/kurewa-gothic</a></p>



<p class="wp-block-paragraph">線上效果預覽: 苦累蛙圓體 Kurewa Gothic<br><a href="https://max-everyday.com/2021/06/kurewa-gothic/">https://max-everyday.com/2021/06/kurewa-gothic/</a></p>



<p class="wp-block-paragraph">訓練用的 batch size 建議值:<br><a href="https://stackoverflow.max-everyday.com/2025/12/zi2zi-decrease-batch-size/">https://stackoverflow.max-everyday.com/2025/12/zi2zi-decrease-batch-size/</a><br>（AI 的答案有可能是錯誤的？參數數值別全信！處處存疑、反覆求證是王道。）</p>



<p class="wp-block-paragraph">YouTube: <a href="https://youtu.be/RcigPCJZQEY">https://youtu.be/RcigPCJZQEY</a></p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<div class="gutenbee-responsive-embed"><iframe loading="lazy" title="用 AI  幫苦累蛙圓體補缺字" width="885" height="664" src="https://www.youtube.com/embed/RcigPCJZQEY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>
</div></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">在 Windows 平台, 所有使用到的指令:</p>



<pre class="wp-block-code"><code>@...................................................
@ 用人工去比對 paired image, 
@...................................................
@ 為什麼會有 paired_images_debug,
@ 因為需要先配對一次, 用人工去比對 paired image, 
@ 移除不適合訓練的字, 例如: symbols &amp; 筆劃不同.

cd C:\Max\Documents\zi2zi-pytorch\
rd /q/s C:\Max\Documents\zi2zi-pytorch\source\paired_images-kurewa-debug
python font2img.py --src_font=source/font/SweiGothicCJKtc-DemiLight.ttf ^
    --dst_font=source/font/ZenKurenaido-Regular.ttf ^
    --charset=charset/charset_test.txt ^
    --sample_dir=source/paired_images-kurewa-debug ^
    --label=0 ^
    --canvas_size=384 ^
    --char_size=384 ^
    --dst_y_offset=-111 ^
    --disable_auto_fit ^
    --mode=font2font

@...................................................
@ 產生訓練清單
@...................................................
@ 調整訓練的字的清單, 很有可能會動態調整內容, 所以要用自動化的腳本來維護與管理控制。

cd C:\Max\Documents\kurewa-gothic\orig
copy /y charset_kurenaido.txt charset_kurenaido_train.txt
python \max\sh\remove_selected_char.py --input charset_kurenaido_train.txt --remove charset_kurenaido_alpha.txt --output charset_kurenaido_train.txt
python \max\sh\remove_selected_char.py --input charset_kurenaido_train.txt --remove charset_kurenaido_train_removed.txt --output charset_kurenaido_train.txt
copy /y charset_kurenaido_train.txt C:\Max\Documents\zi2zi-pytorch\charset

@ 確定好內容, 產生 paired_images

cd C:\Max\Documents\zi2zi-pytorch\
rd /q/s C:\Max\Documents\zi2zi-pytorch\source\paired_images-kurewa
python font2img.py --src_font=source/font/SweiGothicCJKjp-Light.ttf ^
    --dst_font=source/font/ZenKurenaido-Regular.ttf ^
    --charset=charset/charset_kurenaido_train_match_noto_light.txt ^
    --sample_dir=source/paired_images-kurewa ^
    --shuffle ^
    --canvas_size=384 ^
    --char_size=384 ^
    --dst_y_offset=-111 ^
    --disable_auto_fit ^
    --mode=font2font

@...................................................
@ package 
@...................................................

rd /q/s C:\Max\Documents\zi2zi-pytorch\experiments\data-kurewa-regular-384-jp
mkdir C:\Max\Documents\zi2zi-pytorch\experiments\data-kurewa-regular-384-jp
cd C:\Max\Documents\zi2zi-pytorch\
python package.py --dir=source/paired_images-kurewa ^
    --save_dir=experiments/data-kurewa-regular-384-jp ^
    --no_label ^
    --split_ratio=0

@...................................................
@ train
@...................................................
@ local

cd C:\Max\Documents\zi2zi-pytorch\
python train.py --experiment_dir=experiments ^
    --data_dir=experiments/data-kurewa-regular-384-jp ^
    --gpu_ids=cuda:0 ^
    --batch_size=16 ^
    --epoch=1 ^
    --lr=0.00105 ^
    --self_attention ^
    --checkpoint_steps=20 ^
    --ngf=64 ^
    --accum_steps=8 ^
    --image_size=384 ^
    --d_spectral_norm ^
    --checkpoint_only_last

@ colab
@ --resume=48019 \
@ batch_size, https://stackoverflow.max-everyday.com/2025/12/zi2zi-decrease-batch-size/

%cd '/gdrive/My Drive/Colab Notebooks/zi2zi-pytorch'
!python train.py --experiment_dir=experiments \
    --data_dir=experiments/data-kurewa-regular-384-jp \
    --gpu_ids=cuda:0 \
    --batch_size=64 \
    --image_size=384 \
    --ngf=64 \
    --ndf=64 \
    --epoch=100 \
    --lr=0.000999 \
    --self_attention \
    --checkpoint_steps=100 \
    --checkpoint_steps_after=300 \
    --d_spectral_norm \
    --checkpoint_only_last

@ get char list.
fontforge \max\sh\get_ttf_chars.py kurewa-max-new-chi-only.ttf


python \max\sh\remove_selected_char.py --input charset_kurewa-max-new-chi-only.txt --remove charset_SweiGothicCJKjp-Light.txt --mode=int --output charset_kurewa-max-new-chi-match-noto-light.txt
length of input file: 1113
length of remove file: 44170
excepted length of formated file: 1010
final length of target file: 1010

python \max\sh\remove_selected_char.py --input charset_kurenaido_train.txt --remove charset_SweiGothicCJKjp-Light.txt --mode=int --output charset_kurenaido_train_match_noto_light.txt
length of input file: 6645
length of remove file: 44170
excepted length of formated file: 6419
final length of target file: 6419

python \max\sh\remove_selected_char.py --input charset_kurenaido_train_match_noto_light.txt --remove charset_SweiGothicCJKjp-Light-more-9.txt --mode=int --output charset_kurenaido_train_match_noto_light-more-9.txt
length of input file: 6419
length of remove file: 26282
excepted length of formated file: 5287
final length of target file: 5287

cd C:\Max\Documents\zi2zi-pytorch\
rd /q/s C:\Max\Documents\zi2zi-pytorch\source\paired_images-kurewa-debug
python font2img.py --src_font=source/font/SweiGothicCJKtc-Light.ttf ^
    --dst_font=source/font/kurewa-max-new-chi-only.ttf ^
    --charset=charset/charset_kurewa-max-new-chi-match-noto-light.txt ^
    --sample_dir=source/paired_images-kurewa-debug ^
    --label=1 ^
    --shuffle ^
    --canvas_size=384 ^
    --char_size=384 ^
    --dst_y_offset=-111 ^
    --disable_auto_fit ^
    --mode=font2font

cd C:\Max\Documents\zi2zi-pytorch\
del C:\Max\Documents\zi2zi-pytorch\source\paired_images-kurewa\1_*
move C:\Max\Documents\zi2zi-pytorch\source\paired_images-kurewa-debug\*.png C:\Max\Documents\zi2zi-pytorch\source\paired_images-kurewa
rmdir  C:\Max\Documents\zi2zi-pytorch\source\paired_images-kurewa-debug

@...................................................
@ infer
@...................................................
rd /q/s experiments\infer\0
cd C:\Max\Documents\zi2zi-pytorch
set checkpoint=48019
set image_size=384
set ngf=48
set ndf=48
python infer.py --experiment_dir=experiments ^
    --checkpoint_dir=experiments/checkpoint-kurewa-regular-384-jp ^
    --gpu_ids=cuda:0 ^
    --resume=%checkpoint% ^
    --ngf=%ngf% ^
    --ndf=%ndf% ^
    --batch_size=40 ^
    --from_txt ^
    --filename_rule=unicode_int ^
    --src_font=source/font/SweiGothicCJKtc-Light.ttf ^
    --src_font_y_offset=0 ^
    --src_txt_file=charset/charset_kurewa_infer_list_without_max_new.txt ^
    --self_attention ^
    --image_size=%image_size% ^
    --canvas_size=%image_size% ^
    --char_size=%image_size% ^
    --d_spectral_norm ^
    --label=0
rd /q/s experiments\infer\0_%checkpoint%_tc
ren experiments\infer\0 0_%checkpoint%_tc


@...................................................
@ mix maybe and good png.
@...................................................

xcopy /y C:\Max\Documents\kurewa-gothic\orig\png-maybe\*.png C:\Max\Documents\zi2zi-pytorch\source\paired_images-kurewa
xcopy /y C:\Max\Documents\kurewa-gothic\orig\png-good\*.png C:\Max\Documents\zi2zi-pytorch\source\paired_images-kurewa

@...................................................
@ package 
@...................................................

rd /q/s C:\Max\Documents\zi2zi-pytorch\experiments\data-kurewa-regular-384-jp
mkdir C:\Max\Documents\zi2zi-pytorch\experiments\data-kurewa-regular-384-jp
cd C:\Max\Documents\zi2zi-pytorch\
python package.py --dir=source/paired_images-kurewa ^
    --save_dir=experiments/data-kurewa-regular-384-jp ^
    --no_label ^
    --split_ratio=0

@...................................................
@ generate_glyphs 
@...................................................

    --keyword "白申車甲旦音里由早者曲果昜卑曷旲莫是單亘昔重昚軍昆尞电章龺亶百旬皇曾󰕊更會奄童易旨覃專敫香卓東斬皆農宣昷单󰒄旱昌畢 昏倝春原曹󰓛連意皀昗复 妟豊冥泉習朁間巢猒帛匽惠厭樂󰒒星戠景竟查寅󰓅明暴耆魯佰 旣  昬甹㬎厘皋鲁葛宿晃晉曳湯便㝵時沓普晶󰒏󰑁替復黾署昝動諸旧朝皐圼著漸昇幹廛󰓲陳间幕単时奢皕审綿寮屠庫旻晏杲竜猪豬皃耤乾亀亯诸賜兜皂的昱嘗野歆團曇董崑庳恒草贛戟晋軒軗輦昭显暑楽神筍軎泊澧皛谒貍貌謁"
    --keyword "佹危卼垝姽尯峗峞恑桅洈硊祪脆臲蛫觤詭诡跪陒頠鮠"
    --keyword "侒咹垵姲安峖按晏暥案桉氨洝胺荌銨铵鞌鞍頞騴鮟鴳鷃鼹"
    --keyword "倦儯券劵勌勝勬卷啳圈圏埢堘塍奍婘媵巻帣幐弮惓慻拳捲搼桊棬椦榺橳淃滕漛潫牶犈畻眷睠箞籐籘絭綣縢绻腃腾膡菤蔨蕂藤虅蜷螣裷觠誊謄豢賸踡錈锩闂韏飬餋駦騰驣鬈鮝鰧鲞黱齤龹"
    --keyword "俔儬儭哯嚫囕垷娊嫢宽寛寬寴岘峴悓挸揽搅摫撹攪攬斍晛枧梘椝榄槻槼櫬欖欟涀漞瀙灚灠爦现現睍瞡砚硯窥窺竀笕筧粯絸纜缆臗舰苋莧萈藽蚬蜆襯見覌覍覎規覐覑覒覓覔覕視覗覘覙覚覛覜覝覞覟覠覡覢覣覤覥覦覧覨覩親覫覬覭覮覯覰覱覲観覴覵覶覷覸覹覺覻覼覽"
    --keyword "俞偷偸兪匬喩喻堬婾媮崳嵛愈愉揄楡榆歈毹毺渝瀭牏瑜瘉癒睮窬緰羭腧萮蕍蝓褕覦觎諭谕貐踰輸输逾鄃鍮隃騟"
    --keyword "兄冋加卟占古句另叧叨叩叫召叭叮台叱右叴叵叶号叹叺叻叼叽叾叿吀吁吂吃各吅吆吇合吉吊吋同名后吐吒吓吔吕吖吗𫝘吘吙吚君吜吝吞吟吠吡吢吣吤吥否吧吨吩吪含听吭吮启吰吱吲吴吵吶吷吸吹吺吻吼吽吾吿呀呁呃呅呆呇呈告呋呌呍呎呏呐呒呓呔呕呖呗员呙呚呛呜𠯗㕸呝呞呟呠呡呢呣呤呥呦呧呩呪呫呬呭呮呯呰呱呲味呴呵呶呷呸呹呺呻呼呾呿咀咁咂咃咄咅咆咇咈咉咊咋和咍咎咏咐咑咓咔咕咖咗咘咙咚咛咜咝㖅咞咟咠咡咣咤咥咦咧咨咩咪咬咭咮咯咰咱咲咳咴咵咶咷咸咹咺咻咼咽咾咿哀品哂哃哄哅哆哇哈哉哊哋哌响哎哏哐哑哒哓哔哕哖哗哘哙哚哜哝哞哟哠員哢哣哤哦哧哨哩哪哫哬哮哯哰哱哲哳哴哵哷哸哹哺哻哼哽哾唀唁唂唃唄唅唆唇唈唉唊唋唌唍唏唑唒唓唔唕唖唗唙唚唛唝唞唠唡唢唣唤唥唦唧𠲿㖭唨唩唪唫唬唭售唯唰唱唲唳唴唵唶唷唸唹唺唻唼唽唾唿啀啁啂啃啄啅啈啉啊啋啌啍問啐啑啒啓啕啖啗啘啛啜啝啞啠啡啢啣啤啥啦啧啨啩啪啭啮啯啰啱啲啳啴啵啶啷啸啹㖸㗎啫啺啻啼啽啾啿喀喁喂喃喅喇喈喉喊喋喎喏喐喑喒喓喔喕喖喗喘喙喚喛喜喝喞喟喠喡喢喤喥喧喨喩喫喭喯喰喱喲喳喴喵喷喹喺喻喼喽噅㗘喍嗀嗁嗂嗃嗄嗅嗆嗈嗉嗊嗋嗌嗍嗎嗏嗐嗑嗒嗓嗔嗕嗖嗗嗘嗙嗚嗛嗜嗝嗞嗟嗡嗢嗤嗥嗦嗨嗪嗫嗬嗮嗯嗰嗱嗲嗳嗴嗵嗶嗷嗸嗹嗺嗻嗼"
    --keyword "値值嗭埴徝悳惪植殖淔犆禃稙置"
    --keyword "傎厧嗔填嫃寘嵮慎搷槙滇瑱瘨瞋磌禛稹窴縝缜蒖衠謓貭蹎鎮镇闐阗顛颠鬒鷏黰齻"
    --keyword "儐嬪擯檳殯濱獱璸矉礗穦繽臏薲蠙鑌顮馪驞髕鬢𩼧"
    --keyword "凥卢孱尻尼𡰪𡰯尾尿屁层屃屄居屆屇屈屉届屋屌屍屎屏𡱒屑屒屓屖屙屚屛屝属屟屠屡屢屣層履𡳞屩屪屭户戸杘羼迉鳲鸤"
    --keyword "字宁宂它宄宅宆宇守安宊宋完宍宎宏宑宒宓宔宕宖宗官宙宛宜宝实実宠审客宣室宥宦宨宩宪宫㝗宧宬宭宮宯宰宱宲宴宵家宷宸容宺宽宾宿寀寁寂寃寄寈寉寊富寏寑寓寔寪寖寘寙寚寛㝩寞察寠寥實審寫寬寭寮寯寰寲寴寵寷惌梥灾牢賔"
    --keyword "傅博㗘圑愽搏榑溥煿牔猼磗禣糐縛缚䍸膊蒪賻赙鎛镈餺馎髆"
    --keyword "傛塎嫆嵱彮愹搈榕溶熔瑢穃蓉褣鎔镕鰫"
    --keyword "塞寋寨弿搴褰謇賽赛蹇騫骞鶱"
    --keyword "䟓趴趵趶趷䟘趺趻趽趾跀跁跂跃跄𧿬䟩跅跆跇跈跊跋跌跍跎跏跐跑跒跓跔跕跖跗跘跙跚跛跜距跞践𧿳趼跟跠跡跢跣跤跥跦跧跨跩跪跬跭跮路跰跱跲跳跴跶跷跸跹跺跻𬦰跼跽跿踀踁踂踃踄踆踇踈踉踊踋踌踍踎踏踐踑踒踓踔踕踖踗踘踙踚踛踜踝踞踟踠踡踢踣踤踥踦踧踩踪踬踭踮踯踺踫踰踱踳踴踵踶踷踸踹踻踼踽踾踿蹀蹁蹂蹃蹄蹅𨂾𨂿蹆蹈蹉蹊蹋蹌蹍蹎蹏蹐蹑蹒蹓𨃰䠡蹕蹖蹗蹘蹚蹛蹜蹝蹞蹟蹠蹡蹢蹣蹤蹥蹦蹧蹮躀蹨蹪蹫蹬蹭蹯蹰蹱蹲蹳蹴蹶蹸蹹蹺蹻蹼蹽蹾蹿𨅔躁躂躃躅躆躈躊躋躌躍躎躏躐躑躒躓躔躕躖躘躙躚躜躝躞躟躢躣躤躥躦躧躩躪躨"
    --keyword "氻氾氿汀汁汃汄汅汇汈汉汊汋汌汍汎汏汐汑汒汓汔汕汗汘汙汚汛汜汝江池污汢汣汤汥汦汧汨汩汪汫汭汮汯汰汱汲汳汴汵汶汷汸汹決汻汼汽汾汿沁沂沃沄沅沆沇沈沉沋沌沍沎沏沐沑沔沕沖沘沙沚沛沜沞沟沠没沢沣沤沥沦沧沨沩沪𣲩沫沬沭沮沱沲河沴沵沶沷沸油沺治沼沽沾泀況泂泃泄泅泆泇泈泊泋泌泍泎泏泐泑泒泓泔法泖泗泘泙泛泜泝泞泟泠泡波泣泤泥泦泧注泩泪泫泬泭泮泯泱泲泳泷泸泹泺泻泼泽泾泚泿洀洁洂洃洄洅洆洇洈洉洊洋洌洎洏洐洑洒洓洔洕洗洘洙洚洛洝洞洟洠洡洢洣洤津洦洧洨洩洪洫洬洭洮洰洱洲洳洴洵洶洷洸洹洺活洼洽派洿浀流浂浃浄浅浇浈浉浊测浌浍济浏浐浑浒浓浔浕洍洖浖浗浘浙浚浛浜浝浞浟浠浡浢浣浤浥浦浧浨浩浪浫浬浭浮浯浰浱浲浳浴浵浶海浹浺浻浼浽浾浿涀涁涂涃涄涅涆涇消涉涊涋涌涍涎涏涐涑涒涓涔涕涖涗涘涚涛涜涝涞涟涠涡涢涣涤涥润涧涨涙涪涫涬涭涮涯涰涱液涳涴涵涶涷涸涹涺涻涼涽涾涿淀淁淂淃淄淅淆淇淈淉淊淋淌淍淎淏淐淑淒淓淔淕淖淗淘淙淚淛淜淝淞淟淠淡淢淣淤淥淦淧淨淩淪淫淬淭淮淯淰深淲淳淴淵淶混淸淹淺添淽淿渀渁渂渄清渆済渉渊渌渍渎渏渐渑渒渔渖渗渚湴㴘㴙渃渘渙減渜渝渞渟渡渢渣渤渥渦渧渨温渪渫測渭渮港渰渱渲渳渴渵渶渷游渹渺渻渼渽渾渿湀湁湂湃湄湅湆湇湈湉湊湋"
    --keyword "佞囡奴奵奶奷奸她奺奻奼好奾奿妀妁如妃妄妅妆妇妈妉妊妋妌妎妏妐妑妒妓妔妕妖妗妘妙妚妜妝妞妟妠妡妢妣妤妥妦妧妨妩妪妫㚷妬妭妮妯妰妱妲妳妴妵妶妷妸妹妺妼妽妾妿姀姁姂姃姄姅姆姇姈姉姊始姌姍姎姏姐姑姒姓委姕姖姗妍姘姙姚姛姜姝姞姟姠姡姢姣姤姥姦姨姩姪姫姭姮姯姰姱姲姳姴姶姷姸姹姺姻姼姽姾姿娀威娂娃娅娆娇娈姬娉娊娋娌娍娎娏娐娑娒娓娔娕娖娗娘娙娚娛娜娝娞娟娠娡娢娣娤娥娦娧娨娩娪娫娭娮娯娰娱娲娴娽娬娵娶娷娸娹娺娻娼娾娿婀婂婃婄婅婆婇婈婉婊婋婌婍婎婏婐婑婒婓婔婕婖婗婘婙婚婛婜婝婞婟婠婡婢婣婤婥婦婧婨婩婪婫婬婭婮婯婰婱婲婳婵婶婷婸婹婺婻婼婽婾婿媀媁媂媃媄媅媆媇媈媉媊媋媌媍媎媏媑媒媓媔媕媖媗媘媙媚媛媜媝媞媟媡媢媣媤媥媦媧媨媩媪媬媭媮媯嫏媐媰媱媲媳媴媶媷媸媹媻媼媽媾媿嫀嫁嫂嫃嫄嫅嫆嫇嫉嫊嫋嫌嫍嫎嫒嫔嫕嫖嫗嫘嫙嫚嫛嫜嫝嫞嫟嫠嫡嫢嫣嫤嫥嫦嫧嫩嫪嫫嫬嫭嫮嫯嫰嫱嫲嫳嫴嫵嫶嫷嫸嫹嫺嫻嫼嫽嫾嫿嬀嬂嬃嬄嬅嬆嬇嬈嬉嬋嬌嬍嬏𡢃嬐嬑嬒嬓嬕嬖嬗嬘嬙嬚嬛嬜嬝嬞嬟嬠嬡嬢嬴㜮嬣嬤嬥嬦嬧嬨嬩嬪嬫嬬嬭嬮嬯嬰嬱嬳嬵嬶嬷嬸嬺嬻嬼嬹嬾嬿㜷孀孁孂孃孄孅孆孇孈孉孊孋孌孍孎孏安汝娄籹耍肗要邚釹钕"
    --keyword "㑁咄屈㤕拙昢朏柮欪泏炪础祟窋笜粜絀绌聉胐茁袦詘诎貀趉鈯韷飿饳黜"
    --keyword "伢冴厊呀岈庌㤉㧎枒𤘅牚犽玡疨砑穿笌芽蚜衺訝讶谺迓邪釾閕雅颬鴉鸦齖"
    --keyword "坹屄岤帘㧒柼泬狖穵究穷穸穹空穻穼穽穾穿窀突窂窃窄窅窆窇窈窉窊窋窌窍窎窏窐窑窒窔窕窖窗窘窙窚窜窝窞窟窠窡窢窣窤窥窦窧窨窩窪窫窬窭窮窯窰窱窲窳窴窵窶窷窸窹窺窻窼窽窾窿竁竂竄竅竆竇竉茓袕貁鴥鴪"
    --keyword "唿惚㧾淴鍃锪"
    --keyword "妉帎忱抌枕沈沊瓭㽎眈紞耽衴訦躭邥酖鈂馾髧魫鴆鸩黆黕"
    --keyword "偡勘卙啿堪夦媅尠嵁愖戡揕斟椹歁湛煁㽎瘎碪糂葚諶谌踸鍖黮"
    --keyword "冒泪狊盯䀐盰盱盲盳盵盶盷相盹盺盻盼盽盿眀省眂眃眄眅眆眇眈眉眊看眍眎眏眐眑眒眓眕眖眗眘眙眚眛眜眝眠眡眢眣眤眥眦眧眨眩眪眫眬眿眭眮眯眰眱眲眳眴眵眶眸眹眺眻眼眽睁䀯䀴着睃睄睅睆睇睈睉睊睋睌睍睎睏睐睑睒睓睔睕睖睗睙睚睛睜睝睞睟睠睢督睤睥睦睧睨睩睫睬睭睡睮睯睰睱睲睳睴睵睶睷睸睹睺睻睼睽瞀瞁瞃瞄瞅瞆瞇瞈瞉瞊瞋瞌瞍瞎瞐瞑瞒瞓𥉌瞔瞕瞖瞗瞘瞙瞚瞛瞜瞝瞞瞟瞠瞡瞣䁯瞤瞥瞦瞧瞨瞩瞪瞫瞬瞭瞯瞰瞱瞲瞳瞴瞵瞶瞷瞸瞹瞺瞻瞼瞽矀矁矂矃矄矅矆矇矉矊矋矌矎矏𥌚矐矑矒矓矔𥍉矕矘矙矖矚窅苜見貝鉬钼"
    --keyword "浊烛独痋茧萤虬虭虮虯虰虲虳虴虵虶虷虸虹虺虻虼虽虾虿蚀蚁蚂蚃蚄蚅蚆蚇蚉蚊蚋蚌蚍蚎蚏蚐蚑蚒蚓蚔蚕蚖蚗蚘蚙蚚蚛蚜蚝蚞蚟蚠蚡蚢蚣蚤蚥蚦蚧蚨蚩蚪蚬蚫蚭蚮蚯蚰蚱蚲蚳蚴蚵蚶蚷蚸蚹蚺蚻蚼蚽蚾蚿蛀蛁蛂蛃蛄蛅蛆蛇蛈蛉蛊蛋蛌蛎蛏﨡𧉟𧊅䖳蚈蛐蛑蛒蛓蛔蛕蛗蛘蛙蛚蛛蛜蛝蛞蛟蛠蛡蛢蛣蛤蛥蛦蛧蛨蛩蛪蛫蛬蛭蛮蛯蛰蛱蛲蛳蛴蛖蛵蛶蛷蛸蛹蛺蛻蛼蛽蛾蛿蜂蜃蜄蜅蜆蜇蜈蜉蜊蜋蜌蜍蜎蜏蜐蜑蜒蜓蜔蜕蜖蜗蜫蝆䗁䗆蜘蜙蜚蜛蜜蜝蜞蜟蜠蜡蜢蜣蜤蜥蜦蜧蜨蜩蜪蜬蜭蜮蜯蜰蜱蜲蜳蜴蜵蜶蜷蜸蜹蜺蜻蜼蜽蜾蜿蝀蝁蝂蝃蝄蝅蝇蝈蝉蝊蝋𧌄𬠖䗐蝌蝍蝎蝏蝐蝑蝒蝓蝔蝕蝖蝗蝘蝙蝚蝛蝜蝝蝞蝟蝠蝡蝢蝣蝤蝥蝦蝧蝩蝪蝫蝬蝭蝮蝯蝰蝲蝳蝴蝵蝶蝷蝸蝺蝻蝼蝽蝾螀蟡蝹螁螂螃螄螅螆螇螈螉螊螋螌融螎螏螐螑螓螔螕螖螗螘螚螛螜螝螞螟螠螢螥螦螧螨螩螪螫螬螭螮螯螰螱螲螳螴螵螷螸螹螺螻螼螾螿蟀蟂蟃蟄蟅蟆蟇蟈蟉蟋蟌蟍蟎蟏蟐蟑蟒蠁蟓蟔蟕蟖蟘蟙蟚蟛蟜蟝蟞蟟蟠蟢蟣蟤蟥蟦蟧蟨蟩蟪蟫蟬蟭蟮蟯蟰蟱蟲蟳蟴蟵蠎蟶蟷蟹蟺蟻蟼蟽蟾蠀蠂蠃蠄蠅蠆蠇蠈蠉蠊蠋蠌蠍蠏蠐蠑蠒蠓蠔蠕蠖蠗蠘蠙蠛蠜蠝蠞蠟蠣蠴䘆蠥蠦蠨蠩蠪蠬蠮蠰蠳蠵蠷蠸蠻蠼蠾触赨鉵閩闽"
    --keyword "塟蒸爇萬繤艺艻艼艽艾艿芀芁芃芄芅芆芇芉芊芋芌芍芎芏芐芑芒芓芕芖芗芘芙芚芛芜芝芞芟芠芡芢芣芤芥芦芧芨芩芪芫芬芭芮芯芰花芲芳芴芵芶芷芸芹芺芼芽芾苀苁苂苃苄苅苆苇苈苉苊苋苌苍苎苏茾芿苐苑苒苓苔苕苖苗苘苙苚苛苜苝苞苟苠苡苢苣苤若苦苧苨苩苪苫苬苭苮苯苰英苲苳苴苵苶苷苸苹苺苻苼苽苾苿茀茁茂范茄茅茆茇茈茉茊茋茌茍茎茏茐茑茓茒茖茗茘茙茚茛茜茞茟茠茡茢茤茥茦茧茨茩茪茫茬茭茮茯茱茲茳茴茵茷茸茹茺茼茽茿荀荁荂荃荄荅荇荈草荊荋荌荍荎荏荐荑荒荔荕荖荗荘荙荚荛荜荝荞荟荠荡荢荣荤荥荨荩荪荫荬荭荮药茝茣荰荱荲荳荴荵荶荷荸荹荺荻荼荽荾荿莀莁莂莃莄莅莆莇莈莉莊莋莌莍莎莏莐莑莒莓莔莕莖莗莘莙莚莛莜莝莞莟莠莡莢莣莤莥莦莧莨莩莪莫莬莮莯莰莱莲莳莴莵莶获莸莼荓莾莿菀菁菂菃菄菅菆菇菈菉菊菋菌菍菎菏菑菒菓菔菕菖菗菘菙菚菛菜菝菞菟菠菡菢菣菤菥菦菧菨菩菪菬菭菮菰菱菲菳菴菵菶菷菸菹菺菻菼菽菾菿萀萁萂萃萄萅萆萇萉萊萋萌萍萎萏萐萑萒萓萔萕萖萗萘萙萚萜萝萟萠萡萢萣萧著莭萩萪萫萭萮萯萰萱萲萳萴萵萶萷萸萹萺萻萼落萾萿葀葁葂葃葄葅葆葇葈葉葊葋葌葍葎葏葐葑葒葓葔葕葖葘葙葚葛葜葝葞葟葠葡葢董葤葥葦葧葨葩葪葫葭葮葯葰葱葲葳葴葵葶葷葸葹葺葻葼葽葾葿蒀蒁蒂蒃蒄"
    --keyword "字宁宂它宄宅宆宇守安宊宋完宍宎宏宑宒宓宔宕宖宗官宙宛宜宝实実宠审客宣室宥宦宨宩宪宫㝗宧宬宭宮宯宰宱宲宴宵家宷宸容宺宽宾宿寀寁寂寃寄寈寉寊富寏寑寓寔寪寖寘寙寚寛㝩寞察寠寥實審寫寬寭寮寯寰寲寴寵寷惌梥灾牢賔"
    --keyword "亗仙仚冚喦圸奾密乢屲屳屴屵屶屷屸屹屺屻屼屽屾屿岁岂岃岄岅岆岇岈岉岊岋岌岎岏岐岑岒岓岔岕岖岗岘岙岚岜岝岞岟岠岢岣岤岥岦岧岨岩岪岫岬岭岮岯岰岱岲岳岴岵岶岷岸岹岺岻岼岽岾岿峀峁峂峄峅岍峆峇峈峉峊峋峌峍峎峏峐峑峒峓峔峕峖峗峘峙峚峛峜峝峞峟峠峡峢峣峤峥峦峧峨峩峪峫峬峭峮峯峰峲峳峴峵峷峸峹峺峻峼峽峾峿崀崁崂崃崄崅崆崇崈崉崊崌崍崎崏崐崑崒崓崔崕崖崗崘崙崚崛崜崝崞崟崠崡崢崣崤崥崦崧崨崩崪崫崬崭崮崯崰崱崲崳崴崵崶崷崸崹崺崻崼崽崾崿嵀嵁嵂嵃嵄嵅嵆嵈嵉嵋嵌嵍嵎嵏嵐嵑嵒嵓嵔嵕嵖嵘嵙嵚嵛嵜嵝﨑㟴嵊嵟嵠嵡嵢嵣嵥嵦嵧嵨嵩嵪嵫嵬嵭嵮嵯嵰嵱嵲嵳嵴嵵嵶嵷嵸嵹嵺嵻嵼嵽嵾嵿嶀嶁嶂嶃嶄嶅嶆嶇嶈嶉嶊嶋嶌嶍嶎嶐嶑嶒嶓嶔嶕嶖嶗嶘嶙嶚嶛嶜嶝嶞嶟嶠嶡嶢嶣嶤嶥嶦嶧嶩嶪嶫嶬嶮嶯嶰嶱嶲嶴嶵嶶嶷嶸嶹嶺嶼嶽嶾嶿巁嶻巃巄巅巆巇巈巉巊巋巌巍巏巐巎巑巒巓巔巗巖巘巙巚幽旵杣氙汕汖灿炭疝秈籼耑舢訔訕讪豈赸軕辿邖閊"
    --keyword "倥啌埪崆悾控曌椌涳焢瞾硿箜羫聜腔谾躻鞚鵼"
    --keyword "扎扐扑扒打扔払扖扏扗托扙扚扛扜扝扞扠扡扢扣扤扦执扨扩扪扫扬㧌㧎扟扭扮扯扰扱扲扳扴扵扶扷批扺扻扼扽找技抁抂抃抄抅抆抇抈抉把抋抌抍抎抏抐抑抒抓抔投抖抗折抙抚抛抜抝択抟抠抡抢抣护报𢪱㧒扸抦抧抨抩抪披抬抭抮抯抰抱抲抳抴抵抶抷抸抹抺抻押抽抾抿拀拁拂拃拄担拆拇拈拉拊拌拍拎拐拑拒拓拔拕拖拗拘拙拚招拞拟拠拡拢拣拤拥拦拧拨择𫝺㧡㧣拪拫括拭拮拯拰拱拴拵拶拷拸拹拺拻拼拽拾挀持挂挃挄挅挆指按挊挋挌挍挎挏挑挒挓挔挕挖挗挘挜挝挞挟挠挡挢挣挤挥挦挧𢫦𫝻挨挩挪挫挬挭挮振挰挱挳挴挵挶挷挸挹挺挻挼挽挾挿捀捁捂捃捄捅捆捇捈捉捊捋捌捍捎捏捐捒捓捔捕捖捗捘捙捚捛捝捞损捠捡换捣捤㧻㧾㨂捥捦捧捨捩捪捫捬捭据捰捱捲捳捴捵捶捷捸捹捺捻捼捽捾捿掀掁掂掃掄掅掆掇授掉掊掋掍掎掏掐掑排掓掕掖掗掘掙掚掛掜掝掞掟掠採探掤接掦控推掩措掫掬掭掮掯掳掴掵掶掷掸掹掺掻掼掽㨑掲掾掿揀揁揂揃揄揆揇揈揉揊揋揌揍揎描提揑插揓揔揕揖揗揘揙揚換揜揝揞揟揠揢揣揤揥揨揩揪揬揭揮揯揰揲揳援揵揶揷揸揹揻揼揽揾揿搀搁搂搃搄搅摒𢯭𢯾㨨㨪搆搇搈搉搊搋搌損搎搏搐搑搒搓搔搕搗搘搙搚搛搜搝搞搟搠搡搢搣搤搥搦搧搨搩搪搬搭搮搯搰搲搳搵搶搷搸搹携搼搽搾摀摁摃摄摅摆摇摈摉摊𢱤摋摌摍摎摏摐摑摓摔"
    --keyword "丗丯乫伽冄农刄办匁包另叻咖哿嗧嘉坐夹妿幽弐戋拁架枷毠泇珈甴电畞痂笳耞茄袈譱賀贺跏迦鉫隺駕驾鴐龙"
    --keyword "喀愘愙揢楁碦額额髂"
    --keyword "佫咯嗠垎客峈峉𢓜恪挌敋𢼛格洛洜烙狢珞略畧硌笿絡络胳臵茖蛒衉袼觡詻貉賂赂路輅辂酪鉻铬閣阁雒頟餎饹駱骆骼鮥鴼鵅"
    --keyword "呚坆孜收攷改攺攻攼攽放政敀敂敃敄故敇效敉敋敌啟敎敏敐救敒敓敔敕敗敘教敚敛敜敝敞敟敦敨敩敪敭敬数敳敵敶敷數敾敿斁斂贁斆枚炇牧玫畋致變败赦駇"
    --keyword "攵敁𢼌敆敊𢼛敍㪐㪗敠敡敤敥敧敮敯敱敲敺敼敽斀斅軙鈙鼔"
    --keyword "仿坊妨彷房放斺於施旀旈旉旑旔旘旙昉昘枋汸牥瓬眆祊紡纺肪舫芳蚄訪访趽䢍邡鈁钫閍防雱髣魴鲂鴋"
    --keyword "偉喡圍媁幃徫愇暐椲湋煒瑋禕稦緯葦衛褘諱違郼鍏闈韌韍韎韏韐韑韒韓韔韕韖韗韘韙韚韜韝韞韟韠韡韢韣韤韥颹"
    --keyword "倰凌堎婈崚庱掕棱淩睖碐祾稜綾绫菱裬踜輘錂陵鯪鲮"
    --keyword "嚓擦檫聺鑔镲"
    --keyword "俆凃叙唋峹嵞庩徐悆悇捈敍敘斜梌涂狳畬畭硢稌筡艅荼蜍賖途酴除雓餘馀駼鮽鵌"
    --keyword "倲凍埬娻崠崬㨂棟氭涷腖菄蝀諌錬陳鯟鶇"
    --keyword "剳匒嗒塔搭榙溚瘩𥉌褡鎝鞳"
    --keyword "佋刟劭卲叧叨妱岧岹巶弨怊招昭柖欩沼炤牊玿眧祒笤紹绍苕蛁袑詔诏貂超軺轺迢邵鉊鞀韶駋髫鮉䳂鼦齠龆"
    --keyword "住妵宔往拄柱殶注炷玊疰砫紸罜蛀註跓軴迬鉒飳駐驻麈黈"
    --keyword "偉喡圍媁幃徫愇暐椲湋煒瑋禕稦緯葦衛褘諱違郼鍏闈韌韍韎韏韐韑韒韓韔韕韖韗韘韙韚韜韝韞韟韠韡韢韣韤韥颹"
    --keyword "佻咷垗姚宨庣恌挑晀晁朓桃洮烑狣珧𤶃眺祧窕筄絩罀聎脁覜誂趒跳䠷逃銚铫雿鞉頫餆駣鮡鴵鼗"
    --keyword "祁耶邒邓邔邖邗邘邙邚邛邜邝邞邟邠邡邢邤邥邦邧邨邩邪邬邭邮邯邰邱邲邳邴邵邶邷邸邹邺邻邼邽邾邿郀郁郂郃郄郅郆郇郈郉郊郋郍郏郐郑郓郔郕郖郗郘郙郚郛郜郝郞郟郠郡郢郣郤郥郦郧部郩郪郫郬郭郮郯郱郲郳郴郵郸郹郼都郾郿鄀鄁鄂鄃鄄鄅鄆鄇鄈鄋鄌鄍鄎鄏鄐鄑鄒鄓鄔鄖鄗鄘鄙鄚鄛鄜鄝鄞鄟鄠鄡鄢鄣鄤鄥鄦鄧鄩鄪鄫鄬鄭鄮鄯鄰鄱鄲鄳鄴鄵鄶鄷鄸鄹鄺鄻鄼鄽鄾鄿酀酂酁酃酄酅酆酇酈阞队阠阡阢阣阤阥阦阧阨阩阪阫阬阭阮阯阰阱防阳阴阵阶阷阸阹阺阻阼阽阾阿陀陁陂陃附际陆陇陈陉陊陋陌降陎陏限陑陒陓陔陕陖陗陘陙陛陜陝陞陟陠陡院陣除陦陧陨险陚陪陫陬陭陮陯陰陱陲陳陴陵陶陷陸険陻陼陽陾陿隀隁隃隄隅隇隈隊隌隍階随隐隑隒隓隔隕隖隗隘隙﨩隚際障隝隞隟隠隡隢隣隤隥隦隧隨隩險隫隬隭隮隯隰隱隴隵"
    --keyword "丗丯佮冄农冾刄办匁包匌匼哈坐垥夹姶峆峇帢幽弇弐恰戋拾拿搻敆樖欱洽烚珨甴电畞畣盒硆祫秴答粭給给翕翖耠荅蛤袷詥譱跲郃鉿铪閤隺鞈韐頜颌餄饸鮯鴿鸽龙龕龛"

cd C:\Max\Documents\kurewa-gothic\orig
python \max\sh\generate_glyphs.py --font ZenKurenaido-Regular.ttf ^
    --font_size 384 ^
    --canvas_size 384 ^
    --y_offset=-111 ^
    --disable_auto_fit ^
    --clear ^
    --keyword "丗丯佮冄农冾刄办匁包匌匼哈坐垥夹姶峆峇帢幽弇弐恰戋拾拿搻敆樖欱洽烚珨甴电畞畣盒硆祫秴答粭給给翕翖耠荅蛤袷詥譱跲郃鉿铪閤隺鞈韐頜颌餄饸鮯鴿鸽龙龕龛"


@...................................................
@ mix all
@...................................................

set target=C:\Max\Documents\zi2zi-pytorch\experiments\infer\0_48019_tc
xcopy /y C:\Max\Documents\kurewa-gothic\orig\png-maybe\*.png %target%
xcopy /y C:\Max\Documents\kurewa-gothic\orig\png-good\*.png %target%


@...................................................
@ paired image to croped image
@...................................................
set target=C:\Max\Documents\zi2zi-pytorch\experiments\infer\0_48019_tc
rd /q/s %target%_crop
python \max\sh\crop_images.py --input=%target% --output=%target%_crop

@...................................................
@ smooth, overwrite _crop image.
@...................................................
set target=C:\Max\Documents\zi2zi-pytorch\experiments\infer\0_48019_tc
python \max\sh\smooth_pattern.py --input=%target%_crop --output=%target%_crop

@...................................................
@ pbm to svg, from _crop to _svg
@...................................................
set target=C:\Max\Documents\zi2zi-pytorch\experiments\infer\0_48019_tc
rd /q/s %target%_svg
python \max\sh\bmp_to_svg.py --input %target%_crop --output %target%_svg


@...................................................
@ svg simplify
@...................................................
set target=C:\Max\Documents\zi2zi-pytorch\experiments\infer\0_48019_tc
rd /q/s %target%sp_svg
python c:\max\sh\svg_simplify.py --input %target%_svg --output %target%sp_svg

@...................................................
@ import svg
@...................................................
set target=C:\Max\Documents\zi2zi-pytorch\experiments\infer\0_48019_tc
cd C:\Max\Documents\kurewa-gothic\orig
fontforge c:\max\sh\import_svg.py --input empty_384.ttf --output imported_384_tc.ttf --svg_path %target%sp_svg

@...................................................
@ get not duplicated set.
@...................................................
cd C:\Max\Documents\kurewa-gothic\orig
fontforge \max\sh\font_delete_font.py --input imported_384_tc.ttf --remove KurewaGothicCjkTc-Regular.ttf --output diff_tc.ttf

@ 取得 duplicated
fontforge \max\sh\font_delete_font.py --input imported_384_tc.ttf --remove diff_tc.ttf --output duplicated.ttf

@ 取得 diff char list. 
fontforge \max\sh\get_ttf_chars.py duplicated.ttf

@ 回到 fontforge 開啟 Window - New Metricks Window 進行 duplicated.txt 文字清單比對
@ ...

@...................................................
@ get not duplicated set.
@...................................................
@ open diff_tc.ttf, resize to 1000x1000.


# for Windows, with &#91;Jp]
cd C:\Max\Documents\kurewa-gothic\orig\
fontforge \max\sh\expand_stroke.py --input KurewaGothicCjkJp-Regular.ttf --width 26 --expand_direction light --stroke_cap nib --stroke_join nib --output KurewaGothicCjkJp-ExtraLight.sfdir --fontname "KurewaGothicCjkJp-ExtraLight" --fullname "KurewaGothicCjkJp ExtraLight" --weight "Extra-Light" --macstyle 0 
fontforge \max\sh\expand_stroke.py --input KurewaGothicCjkJp-Regular.ttf --width 14 --expand_direction light --stroke_cap nib --stroke_join nib --output KurewaGothicCjkJp-Light.sfdir --fontname "KurewaGothicCjkJp-Light" --fullname "KurewaGothicCjkJp Light" --weight "Light" --macstyle 0 
fontforge \max\sh\expand_stroke.py --input KurewaGothicCjkJp-Regular.ttf --width 20 --expand_direction bold --stroke_cap nib --stroke_join nib --output KurewaGothicCjkJp-SemiBold.sfdir --fontname "KurewaGothicCjkJp-SemiBold" --fullname "KurewaGothicCjkJp SemiBold" --weight "SemiBold" --macstyle 0 
fontforge \max\sh\expand_stroke.py --input KurewaGothicCjkJp-Regular.ttf --width 30 --expand_direction bold --stroke_cap nib --stroke_join nib --output KurewaGothicCjkJp-Bold.sfdir --fontname "KurewaGothicCjkJp-Bold" --fullname "KurewaGothicCjkJp Bold" --weight "Bold" --macstyle 1

# for Windows, with &#91;Tc]
cd C:\Max\Documents\kurewa-gothic\orig\
fontforge \max\sh\expand_stroke.py --input KurewaGothicCjkJp-Regular.ttf --width 26 --expand_direction light --stroke_cap nib --stroke_join nib --output KurewaGothicCjkJp-ExtraLight.sfdir --fontname "KurewaGothicCjkJp-ExtraLight" --fullname "KurewaGothicCjkJp ExtraLight" --weight "Extra-Light" --macstyle 0 
fontforge \max\sh\expand_stroke.py --input KurewaGothicCjkJp-Regular.ttf --width 14 --expand_direction light --stroke_cap nib --stroke_join nib --output KurewaGothicCjkJp-Light.sfdir --fontname "KurewaGothicCjkJp-Light" --fullname "KurewaGothicCjkJp Light" --weight "Light" --macstyle 0 
fontforge \max\sh\expand_stroke.py --input KurewaGothicCjkJp-Regular.ttf --width 20 --expand_direction bold --stroke_cap nib --stroke_join nib --output KurewaGothicCjkJp-SemiBold.sfdir --fontname "KurewaGothicCjkJp-SemiBold" --fullname "KurewaGothicCjkJp SemiBold" --weight "SemiBold" --macstyle 0 
fontforge \max\sh\expand_stroke.py --input KurewaGothicCjkJp-Regular.ttf --width 30 --expand_direction bold --stroke_cap nib --stroke_join nib --output KurewaGothicCjkJp-Bold.sfdir --fontname "KurewaGothicCjkJp-Bold" --fullname "KurewaGothicCjkJp Bold" --weight "Bold" --macstyle 1


# for Windows, with &#91;Jp]
cd C:\Max\Documents\kurewa-gothic\orig\
python /Max/sh/replace_string.py KurewaGothicCjkJp-ExtraLight.sfdir\font.props "Regular" "ExtraLight"
python /Max/sh/replace_string.py KurewaGothicCjkJp-Light.sfdir\font.props "Regular" "Light"
python /Max/sh/replace_string.py KurewaGothicCjkJp-SemiBold.sfdir\font.props "Regular" "SemiBold"
python /Max/sh/replace_string.py KurewaGothicCjkJp-Bold.sfdir\font.props "Regular" "Bold"

python /Max/sh/replace_string.py KurewaGothicCjkJp-ExtraLight.sfdir\font.props "TTFWeight: 400" "TTFWeight: 300"
python /Max/sh/replace_string.py KurewaGothicCjkJp-Light.sfdir\font.props "TTFWeight: 400" "TTFWeight: 300"
python /Max/sh/replace_string.py KurewaGothicCjkJp-SemiBold.sfdir\font.props "TTFWeight: 400" "TTFWeight: 600"
python /Max/sh/replace_string.py KurewaGothicCjkJp-Bold.sfdir\font.props "TTFWeight: 400" "TTFWeight: 700"

# for Windows, with &#91;Tc]
cd C:\Max\Documents\kurewa-gothic\orig\
python /Max/sh/replace_string.py KurewaGothicCjkTc-ExtraLight.sfdir\font.props "Regular" "ExtraLight"
python /Max/sh/replace_string.py KurewaGothicCjkTc-Light.sfdir\font.props "Regular" "Light"
python /Max/sh/replace_string.py KurewaGothicCjkTc-SemiBold.sfdir\font.props "Regular" "SemiBold"
python /Max/sh/replace_string.py KurewaGothicCjkTc-Bold.sfdir\font.props "Regular" "Bold"

python /Max/sh/replace_string.py KurewaGothicCjkTc-ExtraLight.sfdir\font.props "TTFWeight: 400" "TTFWeight: 300"
python /Max/sh/replace_string.py KurewaGothicCjkTc-Light.sfdir\font.props "TTFWeight: 400" "TTFWeight: 300"
python /Max/sh/replace_string.py KurewaGothicCjkTc-SemiBold.sfdir\font.props "TTFWeight: 400" "TTFWeight: 600"
python /Max/sh/replace_string.py KurewaGothicCjkTc-Bold.sfdir\font.props "TTFWeight: 400" "TTFWeight: 700"

# Build
# for Windows, with &#91;Jp]
cd C:\Max\Documents\kurewa-gothic\orig\
fontforge /Max/sh/generate.py -i KurewaGothicCjkJp-ExtraLight.sfdir
fontforge /Max/sh/generate.py -i KurewaGothicCjkJp-Light.sfdir
fontforge /Max/sh/generate.py -i KurewaGothicCjkJp-SemiBold.sfdir
fontforge /Max/sh/generate.py -i KurewaGothicCjkJp-Bold.sfdir

# for Windows, with &#91;Tc]
cd C:\Max\Documents\kurewa-gothic\orig\
fontforge /Max/sh/generate.py -i KurewaGothicCjkTc-ExtraLight.sfdir
fontforge /Max/sh/generate.py -i KurewaGothicCjkTc-Light.sfdir
fontforge /Max/sh/generate.py -i KurewaGothicCjkTc-SemiBold.sfdir
fontforge /Max/sh/generate.py -i KurewaGothicCjkTc-Bold.sfdir


# Webfont
# for Windows, with &#91;Jp]
cd C:\Max\Documents\kurewa-gothic\orig\
rd /q/s "webfont\CJK JP"
mkdir "webfont\CJK JP"
fontforge \max\sh\generate.py --input KurewaGothicCjkJp-Regular.ttf       --output ".\webfont\CJK JP\KurewaGothicCjkJp-Regular.woff"
fontforge \max\sh\generate.py --input KurewaGothicCjkJp-Regular.ttf       --output ".\webfont\CJK JP\KurewaGothicCjkJp-Regular.woff2"
fontforge \max\sh\generate.py --input KurewaGothicCjkJp-ExtraLight.ttf    --output ".\webfont\CJK JP\KurewaGothicCjkJp-ExtraLight.woff"
fontforge \max\sh\generate.py --input KurewaGothicCjkJp-ExtraLight.ttf    --output ".\webfont\CJK JP\KurewaGothicCjkJp-ExtraLight.woff2"
fontforge \max\sh\generate.py --input KurewaGothicCjkJp-Light.ttf         --output ".\webfont\CJK JP\KurewaGothicCjkJp-Light.woff"
fontforge \max\sh\generate.py --input KurewaGothicCjkJp-Light.ttf         --output ".\webfont\CJK JP\KurewaGothicCjkJp-Light.woff2"
fontforge \max\sh\generate.py --input KurewaGothicCjkJp-SemiBold.ttf      --output ".\webfont\CJK JP\KurewaGothicCjkJp-SemiBold.woff"
fontforge \max\sh\generate.py --input KurewaGothicCjkJp-SemiBold.ttf      --output ".\webfont\CJK JP\KurewaGothicCjkJp-SemiBold.woff2"
fontforge \max\sh\generate.py --input KurewaGothicCjkJp-Bold.ttf          --output ".\webfont\CJK JP\KurewaGothicCjkJp-Bold.woff"
fontforge \max\sh\generate.py --input KurewaGothicCjkJp-Bold.ttf          --output ".\webfont\CJK JP\KurewaGothicCjkJp-Bold.woff2"

# for Windows, with &#91;Tc]
cd C:\Max\Documents\kurewa-gothic\orig\
rd /q/s "webfont\CJK TC"
mkdir "webfont\CJK TC"
fontforge \max\sh\generate.py --input KurewaGothicCjkTc-Regular.ttf       --output ".\webfont\CJK TC\KurewaGothicCjkTc-Regular.woff"
fontforge \max\sh\generate.py --input KurewaGothicCjkTc-Regular.ttf       --output ".\webfont\CJK TC\KurewaGothicCjkTc-Regular.woff2"
fontforge \max\sh\generate.py --input KurewaGothicCjkTc-ExtraLight.ttf    --output ".\webfont\CJK TC\KurewaGothicCjkTc-ExtraLight.woff"
fontforge \max\sh\generate.py --input KurewaGothicCjkTc-ExtraLight.ttf    --output ".\webfont\CJK TC\KurewaGothicCjkTc-ExtraLight.woff2"
fontforge \max\sh\generate.py --input KurewaGothicCjkTc-Light.ttf         --output ".\webfont\CJK TC\KurewaGothicCjkTc-Light.woff"
fontforge \max\sh\generate.py --input KurewaGothicCjkTc-Light.ttf         --output ".\webfont\CJK TC\KurewaGothicCjkTc-Light.woff2"
fontforge \max\sh\generate.py --input KurewaGothicCjkTc-SemiBold.ttf      --output ".\webfont\CJK TC\KurewaGothicCjkTc-SemiBold.woff"
fontforge \max\sh\generate.py --input KurewaGothicCjkTc-SemiBold.ttf      --output ".\webfont\CJK TC\KurewaGothicCjkTc-SemiBold.woff2"
fontforge \max\sh\generate.py --input KurewaGothicCjkTc-Bold.ttf          --output ".\webfont\CJK TC\KurewaGothicCjkTc-Bold.woff"
fontforge \max\sh\generate.py --input KurewaGothicCjkTc-Bold.ttf          --output ".\webfont\CJK TC\KurewaGothicCjkTc-Bold.woff2"

</code></pre>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://max-everyday.com/2025/12/antigravity-kurewa-tutorial/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>別再說你不會畫畫，透過 AI 的視覺化工具，把複雜概念變簡單</title>
		<link>https://max-everyday.com/2025/12/gemini-ai-canva-figma/</link>
					<comments>https://max-everyday.com/2025/12/gemini-ai-canva-figma/#respond</comments>
		
		<dc:creator><![CDATA[Max]]></dc:creator>
		<pubDate>Sun, 28 Dec 2025 00:04:12 +0000</pubDate>
				<category><![CDATA[電腦相關應用]]></category>
		<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://max-everyday.com/?p=22635</guid>

					<description><![CDATA[畫面不只是裝飾，更是一種幫助思考的工具。 我們都有想分享的事情，但遇到複雜內容時，該怎麼說清楚？要讓聽眾或學生容易理解，最簡單的方式就是視覺化。 畫圖不是藝術創作，而是每 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="572" src="https://max-everyday.com/wp-content/uploads/2025/12/gemini-canva-1920-1024x572.jpg?v=1766879981" alt="" class="wp-image-22637" srcset="https://max-everyday.com/wp-content/uploads/2025/12/gemini-canva-1920-1024x572.jpg?v=1766879981 1024w, https://max-everyday.com/wp-content/uploads/2025/12/gemini-canva-1920-500x279.jpg?v=1766879981 500w, https://max-everyday.com/wp-content/uploads/2025/12/gemini-canva-1920-615x343.jpg?v=1766879981 615w, https://max-everyday.com/wp-content/uploads/2025/12/gemini-canva-1920.jpg?v=1766879981 1376w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">畫面不只是裝飾，更是一種幫助思考的工具。</p>



<p class="wp-block-paragraph">我們都有想分享的事情，但遇到複雜內容時，該怎麼說清楚？要讓聽眾或學生容易理解，最簡單的方式就是視覺化。</p>



<p class="wp-block-paragraph">畫圖不是藝術創作，而是每個人都能學會的思考技能。重點不在於畫面美不美，而在於接收資訊的人能不能看懂。對我來說，工具永遠排在最後一位。只要能把想法表達清楚，那個工具就是正確的選擇。</p>



<p class="wp-block-paragraph">最近我嘗試用 Gemini 的 Canva 模式畫流程圖。我原本想畫一個閉環，預計讓步驟 5 回到步驟 2。結果 Gemini 陷入鬼打牆，不斷宣稱已經修改完成，畫面卻始終不對。最後我換了個方式，改請它畫步驟 7 回到步驟 4，沒想到呈現出來的結果，正好就是我預期的步驟 5 到步驟 2。面對 AI 工具，有時候繞路走反而才是捷徑。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="479" src="https://max-everyday.com/wp-content/uploads/2025/12/2025-12-28_06-49_k2-1024x479.jpg?v=1766879640" alt="" class="wp-image-22636" srcset="https://max-everyday.com/wp-content/uploads/2025/12/2025-12-28_06-49_k2-1024x479.jpg?v=1766879640 1024w, https://max-everyday.com/wp-content/uploads/2025/12/2025-12-28_06-49_k2-500x234.jpg?v=1766879640 500w, https://max-everyday.com/wp-content/uploads/2025/12/2025-12-28_06-49_k2-1536x718.jpg?v=1766879640 1536w, https://max-everyday.com/wp-content/uploads/2025/12/2025-12-28_06-49_k2-615x288.jpg?v=1766879640 615w, https://max-everyday.com/wp-content/uploads/2025/12/2025-12-28_06-49_k2.jpg?v=1766879640 1811w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">把腦內草圖變現實： 你不需要繪畫基礎，只需要用文字描述你的邏輯。視覺化拆解成三個階段。</p>



<ul class="wp-block-list">
<li>Step 1：捕捉想法 <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 先別急著畫，先用文字寫下核心概念。</li>



<li>Step 2：拆解元素 <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f50d.png" alt="🔍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 找出關係、流程或對比。</li>



<li>Step 3：視覺呈現 <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3a8.png" alt="🎨" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 輸入指令，請 Gemini / chatGPT 生成簡單的圖示或示意圖。</li>
</ul>



<p class="wp-block-paragraph">關鍵心法： 不要外包「思考」，要讓 AI 當你的「思考夥伴」。問AI：「針對這個觀點，有沒有更好的視覺表達方式？」</p>



<p class="wp-block-paragraph">AI 的價值，建立在提問的品質上。我們下的提示詞較詳細，就可以取得更符合我們需求的圖片。</p>



<p class="wp-block-paragraph">不知道怎麼下高品質的提示詞，也可以先去收集別人的作品，上傳給AI 之後，請 AI 分析圖片並生成可以生成出圖片的提示詞，有了提示詞再進行調整就比較有效率。例如提示詞：</p>



<pre class="wp-block-code"><code>請幫我拆解這張圖的圖片(影片)生成語法</code></pre>



<p class="wp-block-paragraph">另一個方式是套用常見的提示詞用於風格與質感：</p>



<ul class="wp-block-list">
<li><strong>風格關鍵字：</strong> <code>Minimalist</code> (極簡)、<code>Hand-drawn</code> (手繪)、<code>Rough sketch</code> (粗糙草圖)。</li>



<li><strong>筆觸關鍵字：</strong> <code>Ink texture</code> (墨水紋理)、<code>Shaky lines</code> (顫抖的線條)、<code>Felt tip pen</code> (麥克筆感)。</li>



<li><strong>構圖關鍵字：</strong> <code>White background</code> (純白背景)、<code>Black and white</code> (黑白)、<code>No 3D render</code> (不要 3D 渲染)。</li>



<li><strong>氛圍關鍵字：</strong> <code>Conceptual</code> (概念性的)、<code>Simple</code> (簡單)。</li>
</ul>



<p class="wp-block-paragraph">避免 AI 感或科技感太重, 可以加入指令：</p>



<ul class="wp-block-list">
<li><code>Shaky hand-drawn lines</code>: 避免 AI 生成太過完美的幾何線條。</li>



<li><code>Charcoal sketch effect</code>: 增加一點碳筆或原子筆的摩擦感。</li>



<li><code>Primitive drawing style</code>: 讓畫面看起來像是隨手在筆記本上畫的，而不是設計軟體拉出來的。</li>



<li><code>White paper texture</code>: 增加一點背景的真實感。</li>
</ul>



<p class="wp-block-paragraph">在 AI 生圖（如 Midjourney, Stable Diffusion, DALL-E）中，「氛圍（Atmosphere/Mood）」是決定圖片質感的關鍵。好的氛圍詞能讓原本平淡的畫面瞬間變身為電影劇照或藝術畫作。</p>



<p class="wp-block-paragraph">以下為你整理常用的氛圍關鍵字，依據<strong>光影、情感、環境與電影感</strong>進行分類：</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">1. 光影氛圍（Lighting &amp; Atmosphere）</h2>



<p class="wp-block-paragraph">光線是營造氛圍最直接的手段，建議每次生圖至少加入一個。</p>



<ul class="wp-block-list">
<li><strong>Golden Hour</strong>: 黃金時刻（夕陽暖光，帶有懷舊或浪漫感）。</li>



<li><strong>Cinematic Lighting</strong>: 電影級光影（對比強烈、有敘事感）。</li>



<li><strong>Volumetric Lighting / God Rays</strong>: 體積光/耶穌光（光束穿過霧氣或窗戶，神聖或夢幻）。</li>



<li><strong>Soft Lighting</strong>: 柔光（溫暖、治癒、無陰影）。</li>



<li><strong>Hard Lighting</strong>: 硬光（影子清晰、戲劇衝突強）。</li>



<li><strong>Bioluminescent</strong>: 生物發光（如阿凡達場景，神祕奇幻）。</li>



<li><strong>Neon Glow</strong>: 霓虹光（賽博龐克風格，都市夜晚感）。</li>
</ul>



<h2 class="wp-block-heading">2. 情緒與色調（Emotional &amp; Color Palette）</h2>



<p class="wp-block-paragraph">這類詞彙會直接改變 AI 選用的色偏與對比度。</p>



<ul class="wp-block-list">
<li><strong>Moody</strong>: 陰鬱/情緒化（暗調、帶有故事性與神祕感）。</li>



<li><strong>Ethereal</strong>: 超凡脫俗（輕盈、夢幻、仙氣十足）。</li>



<li><strong>Nostalgic / Vintage</strong>: 懷舊（復古色調，像老照片或老電影）。</li>



<li><strong>Melancholy</strong>: 憂鬱（冷色調、孤寂感）。</li>



<li><strong>Vibrant</strong>: 鮮艷生動（色彩飽和度高，充滿朝氣）。</li>



<li><strong>Muted Colors</strong>: 柔和/低飽和色調（高級感、冷靜、極簡）。</li>
</ul>



<h2 class="wp-block-heading">3. 環境與質感（Environmental Texture）</h2>



<p class="wp-block-paragraph">用來增加畫面的細節層次感。</p>



<ul class="wp-block-list">
<li><strong>Misty / Foggy</strong>: 霧氣繚繞（增加深度，神祕或壓抑感）。</li>



<li><strong>Dust Motes</strong>: 漂浮的微塵（在陽光下非常顯精緻度）。</li>



<li><strong>Rain-soaked / Wet</strong>: 雨後潮濕（街道反光，適合街拍感）。</li>



<li><strong>Eerie</strong>: 怪誕不安（適合驚悚或克蘇魯風格）。</li>



<li><strong>Cyberpunk / Steampunk</strong>: 特定的風格氛圍。</li>
</ul>



<h2 class="wp-block-heading">4. 電影與攝影風格（Cinematic &amp; Camera）</h2>



<p class="wp-block-paragraph">如果你想要圖片看起來像「拍」出來的，這些關鍵字必備。</p>



<ul class="wp-block-list">
<li><strong>Film Grain</strong>: 電影膠片質感。</li>



<li><strong>Depth of Field / Bokeh</strong>: 景深/背景虛化（突出主體，增加專業感）。</li>



<li><strong>Wide Shot</strong>: 廣角（壯闊感）。</li>



<li><strong>Close-up</strong>: 特寫（親密感或細節震撼）。</li>



<li><strong>Cyberpunk Aesthetic</strong>: 賽博龐克美學。</li>



<li><strong>Studio Ghibli style</strong>: 吉卜力式溫暖氛圍。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 實戰範例：</h3>



<ul class="wp-block-list">
<li><strong>普通描述</strong>：<code>A girl in a library</code> (一個在圖書館的女孩)</li>



<li><strong>加入氛圍</strong>：<code>A girl in a library, Golden Hour, Volumetric lighting, Dust motes, Cinematic, Muted colors</code><br>這會讓原本普通的人像，變成一張充滿午後陽光、塵埃飛舞、色調高級的電影海報。</li>
</ul>



<p class="wp-block-paragraph">如果你還沒有具體想法，也可以跟我說你想要的感覺。例如：</p>



<ul class="wp-block-list">
<li>想要孤單、冷清的感覺。</li>



<li>想要溫暖、療癒的插畫風。</li>



<li>想要很酷、很帥的科技感。</li>
</ul>



<p class="wp-block-paragraph">只要給我一個方向，我就能幫你寫出對應的提示詞。</p>



<p class="wp-block-paragraph"></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">YouTube: <a href="https://youtu.be/fAyuHGUviSM">https://youtu.be/fAyuHGUviSM</a></p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<div class="gutenbee-responsive-embed"><iframe loading="lazy" title="別再說你不會畫畫，透過 AI 的視覺化工具，把複雜概念變簡單" width="885" height="498" src="https://www.youtube.com/embed/fAyuHGUviSM?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>
</div></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://max-everyday.com/2025/12/gemini-ai-canva-figma/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
