
Flow Learning System
io.github.ghlee0786由 GitHub 帳號 ghlee0786 發布v0.1.0更新於 Oct 24, 2026
Build motion-graphics lessons with sentence-synced TTS for any subject: one sentence, one scene.
概覽
以動作圖像與語音旁白製作教材的 MCP 伺服器,讓助理撰寫、驗證並建置逐句同步的 HTML 課程。
- 可以做什麼
- 取得課程撰寫指南,並建立課程、讀取與儲存課程、檢視課程狀態與驗證課程內容。以 Blender 場景腳本渲染 3D 插圖並取得標記點的座標,列出課程素材與其標記點。預覽語音朗讀句子、登錄英文詞彙的韓文讀音,並合成課程語音與時間表。執行範例程式並比對畫面主控台輸出,最後建置成單檔 HTML 教材。
- 適用情境
- 當你想把某個主題的課程做成帶旁白的動態圖像教材,並希望由 AI 撰寫課程 JSON、驗證內容、產生語音與建置單檔 HTML 時使用。適合數學、科學、語言、生物與程式教學等需要圖形、公式或程式碼同步動畫的內容。
- 執行需求
- 需在本機以 Python 3.10 以上執行,並以 pip 安裝套件。語音合成需 Supertonic(首次執行會從 Hugging Face 下載模型),存成 mp3 需 ffmpeg。3D 插圖需 Blender 3.6 以上,不在 PATH 時以 FLS_BLENDER 指定路徑;驗證 C# 範例需 Mono 或 .NET SDK。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Flow Learning System,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
Flow Learning System
A learning system built on motion graphics and TTS. It works for any subject: math, science, English, biology, programming, and more. Write a lesson as JSON data and each sentence becomes one scene. The result is a single-file HTML textbook in which graphs, equations, sentence parts, 3D illustrations, and code move on screen the moment the voice starts reading the sentence they belong to. An AI uses MCP tools to write the textbook, check it, run its example code to verify the output, render 3D illustrations with Blender, record the narration, and build it. The bundled TTS (Supertonic) currently voices Korean and English, and the sample courses are in Korean.
[Programming: C# arrays]
Programming · Lesson 7 (Arrays) of a 17-lesson C# syntax course — current-line highlighting, array cells filling in, an execution trace table, collapsible contents and script panels
Core idea: one sentence = one scene
[Syncing narration and scenes]
- Each
sayin a lesson is one scene. A scene bundles the script sentence, a large key phrase, and the visuals for that moment (graph, equation, sentence parts, image, code, variables…). - Narration is synthesized sentence by sentence and concatenated, and the start time of each sentence is recorded in
timing.json. - The player reads the audio's current playback position every frame and picks the scene from it. Changing the playback speed or jumping to the middle never puts the picture and the voice out of sync.
Example courses
Adding 3D illustrations with Blender
The render_3d tool runs an AI-written Blender scene script headlessly and renders it with Cycles.
When the script marks a 3D position with spot("name", (x, y, z)), the tool computes where that point lands in the perspective-projected image and saves it alongside the render.
Lessons then refer to those names for labels, zoom centers, and arrows.
Because the arrow tips are points computed in 3D, they line up exactly with the rendered incline. Scene scripts are kept in assets/src/, so they can be re-rendered at any time.
Screen layout
The top bar holds only lesson navigation, play, scene navigation, and playback speed (0.75×–2×). On phones, the contents and script panels become drawers that open over the stage.
Motion rules
When the scene changes, on-screen elements are matched by name (key) and animated. No animation needs to be specified separately: changing the data is enough to produce motion.
Anatomy of a lesson
[Mapping JSON ops to the screen]
The sample courses are narrated in Korean; {en|…} segments switch to an English voice.
The ops before a say build up the screen state, and the say captures that moment, together with its sentence, as a scene.
The 22 ops, 24 widgets, and sentence markup ({m|equation}, {en|English}, [[written form|spoken form]]) are documented in the authoring guide (in Korean). The MCP authoring_guide tool returns the same content.
Workflow
What the checks catch:
- Validation: unknown ops or widgets, hotspots that don't exist in the image, scenes that try to highlight lines not in the code, English words the TTS can't read
- Code verification: actually compiles and runs each example and compares it character by character with the on-screen console output (C#: Mono or .NET SDK; Python)
- Reading preview:
17개→ 열일곱 개 (native Korean counting),19.6→ 십구 점 육 (Sino-Korean "nineteen point six"),8분의 1→ 팔분의 일 ("one eighth"),{en|…}→ English voice
Installation
Registering the MCP server
There is no need to keep the MCP server running. Register it once with your client, and the AI launches it on its own whenever it uses a tool (stdio).
Claude Code
Claude Desktop (claude_desktop_config.json)
On Windows, if python points to a different environment, use the full path to python.exe in the virtual environment where you installed the package.
Tools (13)
Command line
A built textbook consists only of index.html plus the audio/ and assets/ folders, so it works without a server. It can be uploaded as-is to static hosting such as GitHub Pages.
Audio files are not included in the repository. Generate them with fls audio <course>.
Folder structure
License
MIT. The Supertonic Python package used for speech synthesis is MIT-licensed and its model is under the OpenRAIL license; neither is included in this repository (the model is downloaded on first run).
來源:README.md,提交 5b7488d
工具
0版本歷史
1- v0.1.0最新Oct 24, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分