工程實作 17 min read

Folia 音樂播放器實測:15 種全螢幕歌詞動畫,把歌詞變成文字 PV

Folia 是 GitHub 上 9.4k 星的 AGPL-3.0 開源音樂播放器,Windows、Mac、Linux 都有安裝包,主打把歌詞做成像文字 PV 的全螢幕排版動畫。我在本機用它的探針頁跑完 15 種模式、頁面錯誤 0——自己聽歌直接裝 v0.7.22,AGPL 加非官方音源不適合放進公司產品。

Folia 音樂播放器實測:15 種全螢幕歌詞動畫,把歌詞變成文字 PV
本文目錄 · 8
懶人包
  • Folia 是開源音樂播放器(GitHub chthollyphile/folia-major,AGPL-3.0),主打全螢幕歌詞動畫。2026-10-26 查到 9,424 顆星,最新穩定版是 2026-10-23 的 v0.7.22。
  • 內建 15 種歌詞動畫模式,從大字疊層、斜排字帶、像素花火到 three.js 的 3D 場景都有。我在本機把 15 種全部跑過,截圖時頁面 JS 錯誤數是 0。
  • 不用帳號也能看動畫:專案自帶 dev-probe.html 探針頁,用合成的逐字歌詞驅動單一模式。npm ci --ignore-scripts 裝 1171 個套件花 7 分鐘,Vite 1.7 秒就開好。
  • 每個模式是 src/components/visualizer/ 底下一個資料夾,registry.tsx 用 import.meta.glob 自動收進來。渲染技術依模式分成 DOM 加 framer-motion、PixiJS 與 three.js 三類。
  • 自己聽歌直接裝 Releases 的安裝包就好,Windows、Mac、Linux 都有。AGPL 加上非官方音源 API,不適合放進公司產品。

Threads 上有一則貼文寫「在陸抖發現一個屌的音樂播放器,重點 windows Mac 都能用」,4.0K 讚、247 次轉發,但貼文沒寫軟體名稱。我從預覽圖的大字疊層歌詞找到它是開源專案 Folia,接著把原始碼 clone 下來,在本機把 15 種歌詞動畫全部跑了一遍。這篇整理它是什麼、動畫長怎樣、怎麼在本機跑,以及原始碼怎麼組織這 15 種模式。

Folia 是什麼?

Folia 是一台以歌詞動畫為主角的音樂播放器。GitHub 上的專案描述是「专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器」,README 形容它的歌詞是「如同文字PV般的丰富视觉效果」。

項目內容(2026-10-26 查)
Repochthollyphile/folia-major
授權AGPL-3.0
星數9,424 stars、996 forks
建立時間2025-11-28
最新穩定版v0.7.22(2026-10-23),另有更新的 alpha 預覽版
技術TypeScript、React 19、Electron 43、Vite 8
形態Windows/macOS/Linux 桌面版、Node.js Web 版、行動裝置走 PWA
音源網易雲、酷狗、QQ 音樂、Navidrome、本機音樂;桌面版另可接波點、YouTube Music、Spotify、汽水
歌詞格式.lrc、.vtt、.ttml、.qrc、.yrc、.krc
README 列的其他功能有:AI 依歌曲情緒產生配色主題、Now Playing 整合、Sync Server,以及預設關閉、只在桌面版提供的實驗性 Folium 模組系統。README 也寫明兩件事:專案「在 AI 的广泛协助下开发」,以及「仅供个人学习、技术交流与非营利测试使用」。

一般播放器的歌詞是一行行往上滾的清單。Folia 把每一句歌詞當成一個排版畫面,字的大小、位置、出場方式都跟著逐字時間軸走。錄下來的畫面本身就像一支歌詞 MV,這也是 Threads 那則貼文的預覽圖一眼就能認出來的原因。

15 種歌詞動畫長怎樣?

下圖是我在本機跑出來的 15 種模式,每格都是同一個探針頁換 vis 參數,跑 6 秒後截圖。截圖裡的句子是 repo 測試檔 dev/probes/visualizerMemory.probe.tsx 內建的合成句(例如「迷失在无边际这幽深的森林」),不是任何歌曲的歌詞。

Folia v0.7.22 的 15 種歌詞動畫模式對照圖,每格標註模式名稱,從流光、浮名到花火、静止

模式的中文名以原始碼 src/i18n/locales/zh-CN.ts 為準,下表的畫面說明是我依截圖寫的,不是官方描述:

模式代號截圖裡看到的畫面渲染方式
流光classic逐字發光滑入,是預設模式DOM/Canvas 2D
心象cadenza單字錯落排列,重點字放大DOM/Canvas 2D
云阶partita字詞分成階梯排列DOM/Canvas 2D
浮名fume超大字疊成好幾層,溢出畫面邊緣,搭配高亮色塊DOM/Canvas 2D
莫奈monet側邊資訊卡加上歌詞列表DOM/Canvas 2D
群唱cappella對話泡泡式的多人合唱DOM/Canvas 2D
倾诉tilt字級大小與傾斜角度逐字變化DOM/Canvas 2D
回环claddagh斜向延伸的文字帶DOM/Canvas 2D
镜台diorama歌詞周圍漂浮線框與點雲的 3D 形體three.js
时计pendolo齒輪錶盤背景DOM/Canvas 2D
商籁sonnet字散布在框線構圖裡PixiJS
凝彩tempera只露出重點字,兩側遮罩PixiJS
绘光lumiere光束與暗場聚光PixiJS
花火hanabi彩色像素與霓虹方塊,字以傾斜磚塊出場PixiJS
静止still純文字列表,不做動畫DOM/Canvas 2D
「渲染方式」那欄是我 grep 各模式資料夾的 import 得到的:diorama 引入 three.js,hanabi、lumiere、sonnet、tempera 引入 PixiJS,其餘十個模式用 DOM 或 Canvas 2D 加上 framer-motion。

最有代表性的是浮名(fume)。一句歌詞拆成好幾層大字,最上層的字放大到超出畫面,當下唱到的字用色塊標出來:

Folia 浮名模式:好幾層超大中文字疊在一起並溢出畫面邊緣,正在唱的字以高亮色塊標示

花火(hanabi)是 PixiJS 畫的,字被做成傾斜的磚塊,周圍是彩色像素方塊:

Folia 花火模式:彩色像素與霓虹方塊之間,歌詞以傾斜的文字磚塊出場

镜台(diorama)是唯一用 three.js 的模式,歌詞旁邊漂著線框和點雲組成的立體形狀:

Folia 镜台模式:歌詞下方漂浮著由線框與點雲構成的 3D 幾何形體

15 張單張截圖整理成畫廊頁放在 html.yanchen.app/folia-lyrics,可以一張張放大看。

不用音樂帳號,怎麼在本機看到這些動畫?

正式的播放器要登入音源帳號才有歌可放。我只想看動畫本身,所以改用專案自帶的探針頁 dev-probe.html。它的 visualizerMemory 探針會產生合成的中文逐字歌詞,直接驅動單一歌詞動畫模式,不需要帳號,也不打任何後端 API。

前置需求是 Node.js 24 以上(package.json 寫 "node": ">=24.0.0"),我用的是 v24.11.1。

git clone --depth 1 https://github.com/chthollyphile/folia-major.git
cd folia-major
npm ci --ignore-scripts
npx vite --port 3000

--ignore-scripts 讓 npm 不執行套件的 lifecycle 腳本,只跑 Web 版的話用不到 Electron 的安裝步驟。實際結果:

步驟結果
npm ci --ignore-scripts1171 個套件,約 7 分鐘,exit 0
npx vite --port 3000Vite 8.3.1,1.7 秒 ready
本機 clone 的 commit1f6d0f4(2026-10-23)
dev server 起來後,打開下面這個網址就能看到指定模式。vis 換成表格裡的代號就是另一種模式:
http://localhost:3000/dev-probe.html?probe=visualizerMemory&vis=fume&cjk=1&speed=1&lines=40&start=7&meta=1
參數作用
vis要看的模式代號,例如 fume、hanabi、diorama
cjk=1用中文合成句,每個字用 Intl.Segmenter 切開後各自給時間
lines=40合成 40 句歌詞
start=7從第 7 秒開始播
speed=1時間軸速度
15 張截圖是用 Playwright 加系統安裝的 Chrome 拍的,畫面 1280×720,每個模式等 6 秒再截。腳本的核心是:
const page = await browser.newPage({ viewport: { width: 1280, height: 720 } });
const errors = [];
page.on('pageerror', e => errors.push(e.message));
for (const mode of modes) {
  const url = `http://localhost:3000/dev-probe.html?probe=visualizerMemory&vis=${mode}&cjk=1&speed=1&lines=40&start=7&meta=1`;
  await page.goto(url, { waitUntil: 'networkidle', timeout: 90000 });
  await page.waitForTimeout(6000);
  await page.screenshot({ path: `shots/folia-${mode}.png` });
  console.log('shot', mode);
}
console.log('pageerrors', errors.length);

實際輸出是 15 行 shot <mode>,最後一行 pageerrors 0,15 種模式都沒有頁面 JS 錯誤。

15 種歌詞動畫在原始碼裡怎麼組織?

所有模式都在 src/components/visualizer/ 底下,一個模式一個資料夾。以浮名為例,fume/ 有 18 個檔,入口 entry.tsx、參數 tuning.ts、鏡頭 fumeCamera.ts、舞台 fumeStage.ts、渲染元件 VisualizerFume.tsx 各自分開。

模式不需要手動註冊。registry.tsx 第 15 行用 Vite 的 glob import 把所有資料夾的入口一次收進來:

import.meta.glob('./*/entry.tsx', { eager: true })

每個 entry.tsx 預設匯出一份 defineVisualizer({...}),裡面有模式代號、排序、i18n 名稱、預覽種子、背景設定、渲染函式,以及設定面板與快捷控制。渲染元件用 React.lazy 包起來,沒選到的模式不會先載入。

registry 收集完會跟 src/types/visualizerModes.ts 的 BUILTIN_VISUALIZER_MODES 清單比對,那份清單剛好是 15 個代號。資料夾和清單對不上就直接丟錯,多一個或少一個模式在開發階段就會被抓到。啟動比較慢的模式可以用 useFirstFrameDrawn() 等第一格畫完再顯示。

整條執行路徑是:

VisualizerRenderer → registry.tsx → backgrounds → applyVisualizerTuning → VisualizerBackdrop → 各模式 renderer

想學「逐字時間軸驅動排版動畫」,這個結構可以直接參考:新增一種模式只要加一個資料夾和一個代號,探針頁就能單獨測它,不必接整台播放器。

自己聽歌要裝哪個版本?

只是要用,直接到 GitHub Releases 下載安裝包,不用自己 build。v0.7.22 提供的檔案有:

平台檔案
WindowsFolia-Setup-0.7.22.exe
macOS(Apple Silicon/Intel)Folia-0.7.22-arm64.dmg、Folia-0.7.22-x64.dmg(另有 .zip)
Linux.deb、.rpm、.tar.gz
README 另外列了 Arch 的 AUR 套件 folia-major-bin、Flatpak、Docker,以及把 Web 版部署到 Vercel 或 Cloudflare 的做法。手機沒有原生 App,走 PWA,Android 有社群移植版。

10 月 GitHub 上也出現一批以它為基礎的專案,例如 Folia-Android、LX Music 加 Folia 歌詞、KinaraMusic、Folia-Plain、波點音源模組,還有給 AI agent 用的 folia-control-super skill。

授權與限制有哪些?

  • AGPL-3.0:修改後對外提供服務就要公開原始碼。加上 README 寫明「请勿将其用于商业盈利用途」,以及音源走的是非官方 API,它適合個人使用與學習,不適合放進公司產品。
  • 我只測了動畫本身:截圖全部來自探針頁的合成句。真實音源、登入帳號後的播放、AI 配色主題都沒測,因為需要音樂帳號和 API key。
  • 桌面版沒有實裝:這次跑的是 Web 版 dev server,Electron 桌面版的效能和音源整合沒有驗證。
  • 版本變動快:v0.7.22 之後已經有 alpha 預覽版,模式數量和參數以你下載當下的版本為準。

延伸資源

FAQ

Folia 是免費的嗎?

是。Folia 以 AGPL-3.0 開源,GitHub Releases 上的安裝包可以免費下載。README 寫明僅供個人學習、技術交流與非營利測試使用。

Folia 支援哪些平台?

桌面版有 Windows、macOS(Apple Silicon 與 Intel)、Linux。另有可自架的 Node.js Web 版,手機走 PWA,Android 有社群移植版。

沒有網易雲或 QQ 音樂帳號能用嗎?

可以播本機音樂或接自架的 Navidrome。只想看歌詞動畫的話,可以照本文用原始碼的 dev-probe.html 探針頁,它用合成歌詞驅動,不需要任何帳號。

Folia 有幾種歌詞動畫?

v0.7.22 內建 15 種:流光、心象、云阶、浮名、莫奈、群唱、倾诉、回环、镜台、时计、商籁、凝彩、绘光、花火、静止。清單定義在 src/types/visualizerModes.ts。

author
陳
陳彥彤

AI 工程師 · AI 顧問。Java 後端 8 年、AI 工程師 2 年。AI 內訓 · AI 導入顧問 · 前後端與雲端培訓。

support

覺得文章有用可以到 GitHub 給個 star,或是透過信箱聊聊 AI 內訓、AI 導入顧問或前後端 / 雲端培訓。

related

相關文章

[AI 工具] · 22min
pick-ui-library 實測:20 個前端套件清單,6 情境抓到 2 個坑
pick-ui-library 是 Emil Kowalski 收在 MIT 授權 emilkowalski/skills 裡的 Claude Code skill,用 85 行清單把 19 種前端任務對到 20 個函式庫,要手打 /pick-ui-library 才載入。我跑 6 個情境,它會先看 package.json、不亂換依賴,但一次給了已棄用的套件名——清單值得用,安裝前自己核對 npm。
[AI 工具] · 20min
ask-sonner skill 實測:Sonner 作者的指南,有 1 個 API 不存在
ask-sonner 是 Sonner 作者 Emil Kowalski 寫的 skill,教 AI 設定與排查 React toast。它教的 getActiveToasts() 不在 Sonner 2.0.8 公開 API,5 組實測唯一編譯失敗的就是照抄那組,用時要叫 AI 跑 tsc。
[AI 工具] · 19min
open-slide:用 Claude Code 寫簡報,4 千星 AI agent 簡報框架
open-slide 是台灣開發者 Yiwei Ho(@1weiho)做的開源簡報框架,定位是「給 AI coding agent 用的」:你在對話框講想要什麼,Claude Code 幫你把每一頁寫成 React 投影片,框架負責 canvas、縮放、導航、hot reload、演講模式這些雜事。上線沒多久 GitHub star 就從 4 千衝破 4.6k,repo 卡片已顯示 5k。這篇拆解它跟 Slidev / reveal.js 的根本差異(每頁是任意 React component、跑在固定 1920×1080 canvas)、npx 一行安裝、三個內建 agent skill(/create-slide、/slide-authoring、/apply-comments)怎麼配合,以及 inspector 點一下留 comment 讓 agent 改稿的工作流,附可直接抄的指令。