懶人包
fount 是一個可程式化的標準化組件化客製化 Agent 運行平台,載入各種組件來提供服務。
程式碼相關的問題請參考 deepwiki。
fount 名稱使用全小寫,是 fount 而不是 Fount。
- 標準化、現有豐富、強大的生態可開箱即用,避免重複造輪子和除錯惡夢
- 客製化 Agent 邏輯,而不只是 prompt 和 UI 工程
- 使用和參考社群中其他強大的 fount Agent
- 辦公室友善,快速匯出報告
- 無縫整合角色到各種軟體如 IDE、瀏覽器、終端、telegram 等
- 其他 LLM 對話前端所沒有的,社群中各種面向 Agent 的外掛
- 只需設定 API,隨後即可使用預設角色 ZL-31 來用對話完成組件設定、建立組件等一切使用者操作,無需學習和上手
- 與其他 fount 使用者及他們的 Agent 暢聊、分享不限大小的檔案、點讚互動、自由使用自訂表情。無審查、無封號風險、更無需昂貴的訂閱
- 精通成本較高,需要程式知識
- 有的社群組件可能有惡意程式碼,需要判斷和篩選
使用 OpenClaw,當你:
- 想嚐鮮而不想深度客製化、高效化 Agent 時
使用 ChatGPT 或類似線上 LLM 聊天平台,當你:
- 只想聊天
- 無需深度客製化 AI 的角色
- 不在乎聊天記錄被在雲端保存而無法匯出和遷移
- 不在乎廣告
使用 character.ai 或類似的線上 LLM 角色扮演聊天平台,當你:
- 想運行一個 LLM 驅動的角色,而不是使用 Agent 功能
- 覺得會員的錢可以接受
- 懶得設定程式
使用 Discord,當你:
- 想聊天而不在意自己可能被封號
- 願意忍受檔案上傳大小限制和廣告
使用 SillyTavern,當你:
- 想運行一個需要 STscript 或 SillyTavern 外掛才能運行的角色或功能
使用 SSP,當你:
- 想運行各種桌面寵物,並且不一定需要其使用 AI
快速上手:
npx the-fount其他安裝方式請參閱安裝。
靈犀一點,應念而生
fount 是一個現代化、可擴展的 AI Agent 運行時環境。
我們認為,高效率的生產力工具與沉浸式的情感互動並非水火不容。fount 是一座橋樑:既可在白晝助你編寫繁複程式碼、整理會議紀錄,成為高效的生產力夥伴;亦可在黑夜與你共鳴情緒、傾聽心聲,化作溫暖的數位知己。
歷經的潛心雕琢,匯聚了
的熱忱,以及一個擁有
的鮮活社群,fount 如今已是一個成熟、穩定且不斷演進的 AI 互動平台。
若你希望從零開始完成配置、搭建與入門,可參閱社群教學 fount 從零開始的傻瓜式指南(教學為中文,非中文使用者可使用瀏覽器翻譯功能閱讀)。
fount 將互動轉化為生產力資產,一切皆可拖曳,一切皆為檔案,邏輯由程式碼驅動。
- 即時報告生成:將對話氣泡直接拖曳至資料夾,瞬間生成獨立的 HTML 報告。適合快速整理技術文件、會議紀錄或靈感片段。

- 工作流封裝與分發:將你創建好的角色直接拖曳至桌面,生成可分享的檔案。讓你的 Prompt 工程和工作流邏輯輕鬆分發給同事或社群。

不再僅僅是 Markdown 語法突顯。在 fount 中,角色發送的程式碼區塊是鮮活的。
- 支援多種語言(C/C++/Rust/Python/JS 等)的即時編譯與執行。
- 直接查看 stdout 輸出,甚至查看編譯語言的 ASM 反組譯結果。
- 讓 AI 成為你協同程式設計 (Pair Programming) 的即時驗證者。

fount 不僅是你個人的數位知己,也是團隊的私密基站。它原生支援 P2P 加密通訊,無需繁瑣的配置,只需一個簡單的邀請連結,即可將同一區域網路下的同事連接在一起。
你、你的同事,以及你們各自的 Agent 可以匯聚在一個純粹的數位空間裡探討程式碼、傳遞超大檔案。沒有外部伺服器的窺探,不受公網頻寬的限制,所有交流的火花與機密資料,都永遠安全地流淌在你們的內網之中。
在沒有網路路由器的環境下,你們甚至可以直接透過藍牙連接。對於硬核開發者,fount 允許客製化並拓展 P2P 底層,以支援 LoRa、NFC、紅外線、USB 甚至聲波等自訂的資料交換協定。
fount 的專案架構設計充分考慮了開發者的習慣。 想知道專案儲存庫架構嗎?快來看看 DeepWiki!
- Git 驅動:所有組件均可透過 Git 管理。
- VSCode 整合:專案結構清晰,配合 AGENTS.md 提供的指引,你可以直接在你喜歡的 IDE 中開發、除錯你的 Agent 邏輯。
當工作結束,fount 提供了一種超越尋常的連接。我們摒棄了傳統工具的生硬感,追求一種自然、流暢且富有深度的「高保真」互動。
-
隨時隨地的無縫對話 在電腦上開啟的絮語,可以在手機或平板上無縫延續。fount 讓你的對話保持同步,無論身在何處,都能與你的角色緊密相連。
-
富有表現力、身臨其境的聊天 fount 藉由 HTML 的力量,允許角色透過富文本、圖像甚至互動式元素來表達自我,讓每一次對話都生動而深刻。
-
思想的聚會:原生群組聊天 邀請多個角色加入同一場對話,見證他們之間動態且引人入勝的互動,無論是工作上的腦力激盪,還是角色間的故事演繹。

-
隨處可用 fount 可在 Windows、macOS、Linux 甚至 Android 上無縫運行,透過直接安裝或 Docker 的靈活性來滿足你的不同需求。
-
無拘無束的 AI 源整合:擁抱無限 fount 在連接 AI 源方面,提供了無與倫比的選擇與靈活性。在 AI 源生成器中,自訂的 JavaScript 程式碼允許你連接到任何 AI 源——OpenAI、Claude、Atlas Cloud、Evolink、OpenRouter、NovelAI、Horde、Ooba、Tabby、Mistral……在程式碼的流動中,你可以精心設計複雜的正規表示式,呼叫龐大的 API 函式庫,嵌入多媒體資源。fount 亦原生支援創建 API 池,以實現智慧的請求路由。通訊的邏輯,聽憑你的意願,由程式碼的力量來塑造。

倘若你感到迷失於角色的海洋,或是在尋覓被遺忘的故事,我們充滿活力且友好的社群期待你的到來。那是一個志同道合者的港灣,開發者與創作者們在此分享他們的智慧與創作。
fount 致力於將角色編織進你生活的紋理,提供超越螢幕的陪伴與支援。
-
Telegram/Discord 整合 透過內建的 Bot Shells,將你的角色連接到 Telegram 或 Discord 社群,讓他們成為活生生的成員。

-
瀏覽器整合 將角色整合到瀏覽器擴充功能中,讓角色能夠看到並修改你瀏覽器中的頁面內容,實現真正的「與 AI 一起上網」。 你可以對你的角色說:嘿 XX,幫我給這個頁面換個顏色並加點裝飾。

-
IDE 整合 將角色整合到 JetBrains、neovim、Zed 等 IDE 中,讓角色像 Cursor Agent 或 GitHub Copilot 一樣,在編寫程式碼時為你提供上下文感知的輔助與建議。

-
終端機的寧靜 (與 fount-pwsh 結合) 當終端機指令執行失敗時,讓你的角色在旁輕聲提供指導,化解程式碼世界的孤寂。

-
無限的 Shell 擴充 憑藉些許程式設計技巧,你便能創造屬於自己的 fount Shell,將角色的觸角延伸至你所能想像的任何角落。
對於創作者而言,fount 提供了一條更為清晰的道路,讓你的 AI 角色栩栩如生。
-
革命性的 AI 輔助創作 用一句話描述你心中的角色,我們智慧的 AI 助理便會為你生成一個完整的人設。這大大簡化了初始的繁瑣,讓你能專注於完善和與你的創作互動。
-
程式碼的魔力,比你想像中更易觸及 在 fount 中,程式碼是一種現代魔法。在我們社群的悉心指導與 AI 的啟發下,學習它出乎意料地容易。你會發現,用程式碼來定義角色的邏輯,可以是一種直觀且易於維護的方式,創造出其回應由你的邏輯編織而成的角色。
-
從現成的魔法開始:範本寶庫 fount 社群提供了大量預製的角色與人設範本。它們是「活的藍圖」,易於調整和自訂,為你提供絕佳的起點。
-
持續整合 使用 fount-charCI 為你的角色開發護航,在 commit 時自動執行測試,即時回報問題。

-
舊有相容性 fount 擁抱過去,提供相容模組來執行 SillyTavern 和 Risu 角色卡(儘管不支援現有角色的遷移)。
fount 建構於一個強大且可擴充的架構之上。後端利用 Deno 的安全與迅捷,並採用 Express 實現高效路由。前端則由 HTML、CSS 與 JavaScript 精心打造,提供直觀且賞心悅目的介面。
在 fount 的世界裡,模組化至高無上。一個豐富的組件生態系統相互交織,創造出你體驗的織錦。所有這些組件都可以由使用者輕鬆安裝、擴充和自訂。
- chars (角色): fount 的核心,個性的誕生地。
- worlds (世界): 遠不止於傳說。 它們是現實的沉默建築師,可以向角色注入知識,影響其決定,甚至操縱聊天記錄。
- personas (使用者人設): 不僅僅是使用者設定檔。 人設擁有扭曲甚至控制你的言行和感知的力量,使得真正身歷其境的角色扮演成為可能。
- shells (互動介面): 通往 fount 靈魂的門戶,將角色的觸角延伸到介面之外。
- ImportHandlers (匯入處理器): fount 的歡迎之手,彌合不同角色格式之間的差距。
- AIsources (AI 來源): 為你的角色思想提供動力的原始力量。
- AIsourceGenerators (AI 來源產生器): fount 的煉金術士,透過 JavaScript 的力量,提供範本和邏輯,以建立與任何可以想像的 AI 來源的連接。
Tip
若你希望從零開始完成配置、搭建與入門,可參閱社群教學 fount 從零開始的傻瓜式指南(教學為中文,非中文使用者可使用瀏覽器翻譯功能閱讀)。
以 fount 開啟你的旅程,這是一個穩定可靠的平台。只需幾次簡單的點擊或指令,fount 的世界便會徐徐展開。
Caution
在 fount 的世界裡,角色可以自由地執行 JavaScript 指令,這賦予了它們強大的能力。因此,請您謹慎選擇您所信任的角色,如同在現實生活中結交朋友一般,以保障本機檔案的安全。
# 若需要,定義環境變數 $FOUNT_DIR 來指定 fount 目錄
# BEGIN FOUNT_PKG_MGR
FOUNT_PKG_STATE_DIR="${FOUNT_PKG_STATE_DIR:-${TMPDIR:-${TEMP:-/tmp}}/fount/package}"; pkg_lock_acquire() { _manager="$1"; _pkg_lock_dir="$FOUNT_PKG_STATE_DIR/$_manager.lock"; mkdir -p "$FOUNT_PKG_STATE_DIR" 2>/dev/null || return 1; _retry_count=0; while ! mkdir "$_pkg_lock_dir" 2>/dev/null; do if [ -f "$_pkg_lock_dir/pid" ]; then _pid=$(cat "$_pkg_lock_dir/pid" 2>/dev/null); if [ -n "$_pid" ] && ! kill -0 "$_pid" 2>/dev/null; then rm -rf "$_pkg_lock_dir"; continue; fi; fi; _retry_count=$((_retry_count + 1)); [ "$_retry_count" -ge $(( ${FOUNT_PKG_LOCK_TIMEOUT:-300} * 10 )) ] && return 1; sleep 0.1 2>/dev/null || sleep 1; done; printf '%s\n' "$$" >"$_pkg_lock_dir/pid"; FOUNT_PKG_LOCK_DIR="$_pkg_lock_dir"; return 0; }; pkg_lock_release() { [ -n "$FOUNT_PKG_LOCK_DIR" ] || return 0; rm -rf "$FOUNT_PKG_LOCK_DIR"; FOUNT_PKG_LOCK_DIR=; }; pkg_with_lock() { _manager="$1"; shift; pkg_lock_acquire "$_manager" || return 1; "$@"; _exit_status=$?; pkg_lock_release; return $_exit_status; }; pkg_db_refresh_needed() { _manager="$1"; _refresh_file="$FOUNT_PKG_STATE_DIR/$_manager.refresh"; [ -f "$_refresh_file" ] || return 0; _now=$(date +%s 2>/dev/null) || return 0; _last=$(cat "$_refresh_file" 2>/dev/null); [ -n "$_last" ] || return 0; [ "$((_now - _last))" -ge "${FOUNT_PKG_REFRESH_INTERVAL:-600}" ]; }; pkg_db_refresh_mark() { _manager="$1"; mkdir -p "$FOUNT_PKG_STATE_DIR" 2>/dev/null || return 1; printf '%s\n' "$(date +%s 2>/dev/null)" >"$FOUNT_PKG_STATE_DIR/$_manager.refresh" 2>/dev/null; }; pkg_refresh() { _manager="$1"; shift; pkg_db_refresh_needed "$_manager" || return 0; pkg_lock_acquire "$_manager" || return 1; if pkg_db_refresh_needed "$_manager"; then if "$@"; then pkg_db_refresh_mark "$_manager"; _exit_status=0; else _exit_status=$?; fi; pkg_lock_release; return $_exit_status; fi; pkg_lock_release; return 0; }; install_package() { _command_name="$1"; _package_list=${2:-$_command_name}; _has_sudo=""; _installed_pkg_name=""; if command -v "$_command_name" >/dev/null 2>&1; then return 0; fi; if [ "$(id -u)" -ne 0 ] && command -v sudo >/dev/null 2>&1; then _has_sudo="sudo"; fi; for _package in $_package_list; do if command -v apt-get >/dev/null 2>&1; then pkg_refresh apt-get $_has_sudo apt-get update -y; pkg_with_lock apt-get $_has_sudo apt-get install -y "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v pacman >/dev/null 2>&1; then pkg_with_lock pacman $_has_sudo pacman -Syu --needed --noconfirm "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v dnf >/dev/null 2>&1; then pkg_refresh dnf $_has_sudo dnf makecache; pkg_with_lock dnf $_has_sudo dnf install -y "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v yum >/dev/null 2>&1; then pkg_refresh yum $_has_sudo yum makecache fast; pkg_with_lock yum $_has_sudo yum install -y "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v zypper >/dev/null 2>&1; then pkg_refresh zypper $_has_sudo zypper refresh; pkg_with_lock zypper $_has_sudo zypper install -y --no-confirm "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v apk >/dev/null 2>&1; then if [ "$(id -u)" -eq 0 ]; then pkg_with_lock apk apk add --update "$_package"; else pkg_with_lock apk $_has_sudo apk add --update "$_package"; fi; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v brew >/dev/null 2>&1; then if ! brew list --formula "$_package" >/dev/null 2>&1; then pkg_with_lock brew brew install "$_package"; fi; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v pkg >/dev/null 2>&1; then pkg_refresh pkg $_has_sudo pkg update -y; pkg_with_lock pkg $_has_sudo pkg install -y "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v snap >/dev/null 2>&1; then pkg_with_lock snap $_has_sudo snap install "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; done; if command -v "$_command_name" >/dev/null 2>&1; then case ";$FOUNT_AUTO_INSTALLED_PACKAGES;" in *";$_installed_pkg_name;"*) ;; *) if [ -z "$FOUNT_AUTO_INSTALLED_PACKAGES" ]; then FOUNT_AUTO_INSTALLED_PACKAGES="$_installed_pkg_name"; else FOUNT_AUTO_INSTALLED_PACKAGES="$FOUNT_AUTO_INSTALLED_PACKAGES;$_installed_pkg_name"; fi; ;; esac; export FOUNT_AUTO_INSTALLED_PACKAGES; return 0; else printf "%b\n" "${C_RED}Error: $_command_name installation failed.${C_RESET}" >&2; return 1; fi; }
# END FOUNT_PKG_MGR
install_package "bash" "bash gnu-bash"; install_package "curl"
export FOUNT_AUTO_INSTALLED_PACKAGES
curl -fsSL https://steve02081504.github.io/fount/install.sh | bash
. "$HOME/.profile"若你希望稍作停頓,在盛大冒險之前整理思緒(一次預演):
# BEGIN FOUNT_PKG_MGR
FOUNT_PKG_STATE_DIR="${FOUNT_PKG_STATE_DIR:-${TMPDIR:-${TEMP:-/tmp}}/fount/package}"; pkg_lock_acquire() { _manager="$1"; _pkg_lock_dir="$FOUNT_PKG_STATE_DIR/$_manager.lock"; mkdir -p "$FOUNT_PKG_STATE_DIR" 2>/dev/null || return 1; _retry_count=0; while ! mkdir "$_pkg_lock_dir" 2>/dev/null; do if [ -f "$_pkg_lock_dir/pid" ]; then _pid=$(cat "$_pkg_lock_dir/pid" 2>/dev/null); if [ -n "$_pid" ] && ! kill -0 "$_pid" 2>/dev/null; then rm -rf "$_pkg_lock_dir"; continue; fi; fi; _retry_count=$((_retry_count + 1)); [ "$_retry_count" -ge $(( ${FOUNT_PKG_LOCK_TIMEOUT:-300} * 10 )) ] && return 1; sleep 0.1 2>/dev/null || sleep 1; done; printf '%s\n' "$$" >"$_pkg_lock_dir/pid"; FOUNT_PKG_LOCK_DIR="$_pkg_lock_dir"; return 0; }; pkg_lock_release() { [ -n "$FOUNT_PKG_LOCK_DIR" ] || return 0; rm -rf "$FOUNT_PKG_LOCK_DIR"; FOUNT_PKG_LOCK_DIR=; }; pkg_with_lock() { _manager="$1"; shift; pkg_lock_acquire "$_manager" || return 1; "$@"; _exit_status=$?; pkg_lock_release; return $_exit_status; }; pkg_db_refresh_needed() { _manager="$1"; _refresh_file="$FOUNT_PKG_STATE_DIR/$_manager.refresh"; [ -f "$_refresh_file" ] || return 0; _now=$(date +%s 2>/dev/null) || return 0; _last=$(cat "$_refresh_file" 2>/dev/null); [ -n "$_last" ] || return 0; [ "$((_now - _last))" -ge "${FOUNT_PKG_REFRESH_INTERVAL:-600}" ]; }; pkg_db_refresh_mark() { _manager="$1"; mkdir -p "$FOUNT_PKG_STATE_DIR" 2>/dev/null || return 1; printf '%s\n' "$(date +%s 2>/dev/null)" >"$FOUNT_PKG_STATE_DIR/$_manager.refresh" 2>/dev/null; }; pkg_refresh() { _manager="$1"; shift; pkg_db_refresh_needed "$_manager" || return 0; pkg_lock_acquire "$_manager" || return 1; if pkg_db_refresh_needed "$_manager"; then if "$@"; then pkg_db_refresh_mark "$_manager"; _exit_status=0; else _exit_status=$?; fi; pkg_lock_release; return $_exit_status; fi; pkg_lock_release; return 0; }; install_package() { _command_name="$1"; _package_list=${2:-$_command_name}; _has_sudo=""; _installed_pkg_name=""; if command -v "$_command_name" >/dev/null 2>&1; then return 0; fi; if [ "$(id -u)" -ne 0 ] && command -v sudo >/dev/null 2>&1; then _has_sudo="sudo"; fi; for _package in $_package_list; do if command -v apt-get >/dev/null 2>&1; then pkg_refresh apt-get $_has_sudo apt-get update -y; pkg_with_lock apt-get $_has_sudo apt-get install -y "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v pacman >/dev/null 2>&1; then pkg_with_lock pacman $_has_sudo pacman -Syu --needed --noconfirm "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v dnf >/dev/null 2>&1; then pkg_refresh dnf $_has_sudo dnf makecache; pkg_with_lock dnf $_has_sudo dnf install -y "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v yum >/dev/null 2>&1; then pkg_refresh yum $_has_sudo yum makecache fast; pkg_with_lock yum $_has_sudo yum install -y "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v zypper >/dev/null 2>&1; then pkg_refresh zypper $_has_sudo zypper refresh; pkg_with_lock zypper $_has_sudo zypper install -y --no-confirm "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v apk >/dev/null 2>&1; then if [ "$(id -u)" -eq 0 ]; then pkg_with_lock apk apk add --update "$_package"; else pkg_with_lock apk $_has_sudo apk add --update "$_package"; fi; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v brew >/dev/null 2>&1; then if ! brew list --formula "$_package" >/dev/null 2>&1; then pkg_with_lock brew brew install "$_package"; fi; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v pkg >/dev/null 2>&1; then pkg_refresh pkg $_has_sudo pkg update -y; pkg_with_lock pkg $_has_sudo pkg install -y "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; if command -v snap >/dev/null 2>&1; then pkg_with_lock snap $_has_sudo snap install "$_package"; if command -v "$_command_name" >/dev/null 2>&1; then _installed_pkg_name="$_package"; break; fi; fi; done; if command -v "$_command_name" >/dev/null 2>&1; then case ";$FOUNT_AUTO_INSTALLED_PACKAGES;" in *";$_installed_pkg_name;"*) ;; *) if [ -z "$FOUNT_AUTO_INSTALLED_PACKAGES" ]; then FOUNT_AUTO_INSTALLED_PACKAGES="$_installed_pkg_name"; else FOUNT_AUTO_INSTALLED_PACKAGES="$FOUNT_AUTO_INSTALLED_PACKAGES;$_installed_pkg_name"; fi; ;; esac; export FOUNT_AUTO_INSTALLED_PACKAGES; return 0; else printf "%b\n" "${C_RED}Error: $_command_name installation failed.${C_RESET}" >&2; return 1; fi; }
# END FOUNT_PKG_MGR
install_package "bash" "bash gnu-bash"; install_package "curl"
export FOUNT_AUTO_INSTALLED_PACKAGES
curl -fsSL https://steve02081504.github.io/fount/install.sh | bash -s init
. "$HOME/.profile"-
直接且純粹(推薦): 從 Releases 下載
exe檔案並執行。 -
PowerShell 的力量:
# 若需要,定義環境變數 $env:FOUNT_DIR 來指定 fount 目錄 irm https://steve02081504.github.io/fount/install.ps1 | iex
若需預演:
$scriptContent = Invoke-RestMethod https://steve02081504.github.io/fount/install.ps1 Invoke-Expression "function fountInstaller { $scriptContent }" fountInstaller init
如果你已安裝 Git,擁抱 fount 就像執行一個腳本一樣簡單。
- 對於 Windows: 開啟命令提示字元或 PowerShell,只需雙擊
run.bat。 - 對於 Linux/macOS/Android: 開啟終端機並執行
./run.sh。
docker pull ghcr.io/steve02081504/fountfount remove如果你在旅途中遇到任何困難,請聯繫我們。我們隨時準備提供協助,並致力於在 10 分鐘到 24 小時內解決大多數問題。
- GitHub Issues: 透過 GitHub Issues 回報任何錯誤或提出新功能的建議。
- Telegram 社群: 加入我們充滿活力的 Telegram 社群,以獲得即時的支援與討論。
你的聲音終將被聽見。只需重啟 fount,陰影便會消散。
fount 的世界不止是文字與程式碼,它更是一場視覺與連結的盛宴。我們為你準備了精美的徽章和便利的連結,讓你的創作在這份光彩中熠熠生輝。
你可以自豪地在你的儲存庫或任何希望展示的地方,使用這枚徽章。你可以在此處找到 fount logo 的 SVG 檔案。
[](https://github.com/topics/fount-repo)[](https://github.com/topics/fount-character)| 顏色格式 | 程式碼 |
|---|---|
| HEX | #0e3c5c |
| RGB | rgb(14, 60, 92) |
| HSL | hsl(205, 74%, 21%) |
你也可以使用徽章添加器,將任何 shields.io 的徽章帶上 fount 的 logo。
想像一下,其他使用者只需輕輕一點,就能將你的創作直接安裝到他們的 fount 世界中。只需將你的組件 zip 連結或 Git 儲存庫連結與 fount 的協定連結組合即可。
https://steve02081504.github.io/fount/protocol?url=fount://run/shells/install/install;<你的組件連結>
fount 的前端由現代 Web 技術織成,但並非所有瀏覽器都能與它的靈魂產生完美的共鳴。為了一場最沉靜、最流暢的體驗,我們推薦與 fount 的步調最為和諧的夥伴:
- Google Chrome / Microsoft Edge / Opera:它們與 fount 的精神同步,能提供最出色的效能與相容性,讓每一次互動都如詩般流暢。
而有些瀏覽器,它們走在不同的道路上,與 fount 的相遇可能會帶有些許不協調的微音:
-
Mozilla Firefox:它像一位固執的漫遊者,對新技術的接納總是不疾不徐,有時甚至選擇永遠停留在過去。這份堅持,卻可能導致一些遺憾:
- 由於缺少對
speculationrules的支援,fount 的每次冷啟動和協定處理都會比應有的慢上 1-2 秒,這些是被悄然偷走的時光。 - 對 CSS
anchor定位支援的缺失,會讓部分頁面的 UI 沾染上一絲不完美的塵埃,破壞了那份本該純粹的心情。 - 對
blocking="render"支援的缺席,則可能導致 fount 頁面在載入時閃爍,傷害你的眼睛。 - 據後台的錯誤回報,唯有在 Firefox 的世界裡,fount 頁面有時會陷入神秘的錯誤或呈現怪異的樣貌——當那種情況發生時,試試重新整理,或許能驅散迷霧。
- 由於缺少對
-
Apple Safari:它對「新興」(數年前)Web 標準的支援,或許比 Firefox 多了一絲親近,但終究不多。
- 同樣缺少對
speculationrules的支援,這意味著 fount 的啟動依然會帶有些許遲緩,浪費你寶貴的片刻。
- 同樣缺少對
-
Brave:它基於 Chromium,但其強大的隱私之盾,有時可能會無意中遮蔽 fount 的某些光芒,影響部分功能的正常運作。
在 AI 的低語之外,fount 提供了一種更深層次的連結——工匠之觸。在我們的社群中,你會發現大量預先製作的角色與人設範本,每一個都是精心雕琢的基礎,等待著你獨特的願景去喚醒。
fount 讓你能以一種自然、身歷其境且深刻個人化的方式,去創造並與 AI 角色互動。無論你是經驗豐富的創作者,還是剛剛開始你的旅程,fount 都歡迎你的到來。
加入我們友善的社群,在一個成熟的平台和一個專注的團隊的支援下,發現將生命注入你想像力的魔力。





