
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 分