AI 輔助物理化學教學 · 案例 HF-PCHEM-001
從一段 Prompt 到 90 秒熱力學動畫
AI 製作、另一個 AI 審查、老師逐條拍板:一支教學影片的完整紀錄
影片比較兩種絕熱膨脹:可逆膨脹的氣體推動活塞、溫度下降;自由膨脹的氣體衝進真空、溫度不變。畫面上的每顆分子、每個數字都由程式逐格算出,沒有手繪素材,也沒有用剪輯軟體。
影片在講什麼
兩邊都沒有熱進出,只有對外做功的那邊降溫
設定:1 mol 氬(單原子理想氣體),初溫 300 K,兩邊都膨脹到兩倍體積。正負號慣例 ΔU = q + w,w 是外界對氣體做的功。
A 可逆絕熱膨脹
Reversible adiabatic expansion
無摩擦的活塞慢慢後退,每一步外壓都等於氣體壓力;氣體推著外界做功,內能減少。
- q
- 0
- w
- −1.38 kJ
- ΔU
- −1.38 kJ
- T
- 300 K → 189 K
B 自由膨脹
Free expansion into vacuum
抽掉隔板,氣體衝進真空,沒有對抗任何外壓,所以不做功;理想氣體的內能只跟溫度有關。
- q
- 0
- w
- 0
- ΔU
- 0
- T
- 300 K → 300 K(理想氣體)
Adiabatic does not mean isothermal:絕熱只保證 q = 0,溫度變不變要看 w。
九個關鍵畫面
從成品 MP4 直接抽出的影格。點一下,影片會跳到那個時間點。
製作流程
老師定規格、AI 製作、另一個 AI 審查、老師拍板
寫規格
一段英文規格:科學設定、六幕分鏡、科學正確性要求、驗收標準。老師沒有寫任何程式。
製作與自我檢查
用開源影片框架 HyperFrames,把 HTML、Canvas 與 GSAP 寫成影片;輸出後從 MP4 抽影格自己檢查。
獨立審查
另一家公司的 AI 審三次:第一輪只看畫面(盲審),第二輪看程式與查核文件,改版後再做一次針對性複審。
查證與拍板
Claude 把每條審查意見回到程式重現,老師決定改哪些、保留哪些,改完重新輸出、重新驗證。
實際經過(2026-10-28,到隔天凌晨)
老師輸入的是原文,可以直接複製;AI 那一欄是摘要。中間有兩段是老師自己去跑 Codex。
- 07:57
- 08:29Claude Code第一版成品
AI 寫程式、算物理、輸出 MP4,再從成品抽 9 張影格自己檢查。同時主動揭露一個做法:2D 分子模擬降溫太快,所以每格把速度乘上一個小係數,讓動能貼著理論曲線走。
- 09:05老師
Keep it silent; the video is done as it is.
- 09:07老師
加上字幕會好一些嗎
AI 建議不加整條字幕:沒有旁白,字幕只會重複畫面上的字。它反而指出第四幕重播的 49–63 秒底部沒有字,觀眾不知道該看哪裡。
- 09:22老師
Add one English guiding line to the empty bottom zone of the scene 4 replay (49–63 s), re-render, and re-verify.
09:27 完成:加一句導讀、重新輸出、重新驗證。
- 09:30老師
這支影片的內容 可以怎樣給codex 驗收化學內容有無錯誤?
AI 建議分兩輪:第一輪只給畫面逐字稿與影格(盲審),不給製作者的查核文件,免得被帶著走;第二輪才給程式與查核文件,專門攻擊「每格縮放」這個手法與檢查程式本身。
- 09:32老師
Build the Codex review pack: the on-screen transcript script, the contact sheet, the round 1 and round 2 prompts, and the run command. Don't run Codex yet.
09:41 完成審閱包:每 0.25 秒擷取一次的畫面逐字稿、縮圖總覽、兩輪審閱 prompt、唯讀執行指令。
- 09:41–
11:18CodexCodex 兩輪審查(唯讀)老師自己執行。結論:宏觀公式與終態數值正確;自由膨脹途中的溫度標示、速度縮放的揭露、部分英文措辭需要改;查核文件把「真實氣體自由膨脹會降溫」講成通則;檢查程式有漏洞,故意把動能加倍、把功歸零,59 項照樣全過。
- 11:18老師
(貼上 Codex 兩輪報告的結論)下一步可直接把兩份報告交給製作者逐點查證。
11:28 完成查證報告:每一條都回到程式與畫面重現,標出成立、不成立、需要老師決定的項目,並附建議修法。
- 11:39老師
照 VERIFY_CODEX.md 的建議改:A 組全改;粒子動畫採隱藏 v_z 方案;取位維持並寫進 QA;規格原文四句保留。改完重新輸出並驗證。
12:09 完成第二版。過程中 AI 發現自己提的修法(碰撞方向隨機往紙面外傾斜)違反細緻平衡,被新加的能量均分檢查抓到,改用薄板中的 3D 硬球模型。
- 12:35–
16:05CodexCodex 針對性複審(讀程式,中間等額度重置)老師另開 Codex 執行。確認 97 項檢查與 15 種故意改錯都成立,又抓到四點:校正淨量雖只有約 2%,正負來回卻累計約 18% 初始動能,畫面沒有說;「畫面上碰到就一定三維相撞」不成立;球體留有約 1 px 的三維重疊,測試沒查;活塞貢獻超過 100% 不能歸因於排除體積。
- 13:37老師
目前在等 Codex 的額度重置。 我想確認的是,當你最後影片完成之後,我希望看到的是給我一個 HTML,上面可以呈現影片播放的效果,下方有 Prompt 可以複製。整個頁面……我也不知道可以用什麼方式來介紹。 總之,我最後的目的就是讓我的一些同事,或是化學界的前輩先進,可以看到我們怎麼把這些東西應用在上面,到時我就會分享這些內容。
13:52 完成這個展示頁:影片、可複製的 prompt、製作時間軸、化學查核摘要。頁面上的數字在建置時從影片程式讀出,不手打。
- 16:12老師
(貼上 Codex 複審的結論:檢查都成立,仍有四點待處理)
16:54 完成查證:四點全部成立,數字都重現;其中「畫面上碰到就三維相撞」是 AI 自己先前寫錯的。AI 加做 30 組初態與步長、活塞速度、球徑的對照,發現把球縮小反而更暖,排除體積的說法和資料不符。
- 23:56老師
照 VERIFY_CODEX_revision.md 的建議改:A 組全做,B 組在畫面加那行揭露。改完重新輸出並驗證,再重建展示頁。
隔天 00:15 完成第三版:畫面底部加一行註腳,說明 A 的分子速度有校正;改正錯誤說法與因果解釋;檢查增為 100 項、故意改錯增為 17 種,新加的兩種只有新檢查抓得到。
- 23:58老師
網頁部分你也嘗試做個codex prompt 怕有同仁只有codex 之後我也會用我的codex測試
加上 Codex 版製作 prompt:原規格一字不改放在後半,前面加一段工作守則,把三次審查抓到的坑寫成要求。尚未用 Codex 實際跑過。
07:57 交規格 → 08:29 第一版成品 → 12:09 經兩輪審查修正的第二版 → 隔天 00:15 經複審修正的第三版
Prompt
規格 Prompt:原文照登,可以直接複製
這是 07:57 交給 Claude Code 的唯一一段規格,一字未改;之後的每一句對話都在上面的時間軸裡。
HyperFrames Animation Production — HF-PCHEM-001 Project Title Why Does a Gas Cool Down Without Losing Heat? Subtitle: Reversible Adiabatic Expansion vs. Free Expansion 1. Objective Create a polished, 90-second, fully English educational animation using HyperFrames. The animation will be presented to university administrators as a demonstration of AI-assisted physical chemistry education. The goal is to visually connect: * Microscopic molecular motion * Macroscopic temperature and work * The First Law of Thermodynamics Language requirement: All visible text must be in English. This includes titles, labels, explanations, subtitles, equations, and closing messages. Do not include any Chinese text. The video must be understandable without narration. If narration is added, it must also be in English. 2. Technical Specifications * Framework: HyperFrames * Duration: Approximately 90 seconds * Resolution: 1920 × 1080 * Aspect ratio: 16:9 * Frame rate: 30 fps * Format: MP4 * Style: Modern scientific visualization * Background: Light, clean, professional * Typography: Large, highly readable English text * Animation: Smooth, deterministic, scientifically meaningful Use HTML, CSS, SVG, Canvas, GSAP, or other technologies supported by the installed HyperFrames workflow. 3. Scientific Setup Show two ideal-gas systems with identical initial conditions. System A — Reversible Adiabatic Expansion A thermally insulated cylinder contains an ideal gas. A frictionless piston moves outward quasi-statically as the gas performs work. * q = 0 * w < 0 * ΔU = w < 0 * Temperature decreases System B — Adiabatic Free Expansion An ideal gas initially occupies half of an insulated rigid container. The other half is vacuum. The partition is removed. * q = 0 * w = 0 * ΔU = 0 * Temperature remains unchanged Assume a closed system, ideal-gas behavior, and no additional forms of energy transfer. For comparison, both systems can begin at 300 K and expand to twice their initial volume. For System A, choose a constant heat-capacity ratio if numerical final temperatures are displayed. Otherwise, use a qualitative temperature decrease. Do not invent numerical temperatures without calculating them consistently. 4. Detailed Storyboard Scene 1 — 0–12 s: The Question Large opening title: "Why Does a Gas Cool Down Without Losing Heat?" Display two insulated containers side by side. Left label: "Reversible Adiabatic Expansion" Right label: "Free Expansion into Vacuum" Both initially show: "T = 300 K" "q = 0" Scene 2 — 12–30 s: Two Different Expansions Left side: * The piston moves outward slowly. * Gas molecules collide with the piston and cylinder walls. * An arrow indicates work done by the gas. * The temperature indicator gradually decreases. * The molecular speed distribution shifts toward lower speeds. Overlay: "Gas performs work on its surroundings." Right side: * The partition is removed. * Gas molecules spread into the vacuum. * The average molecular kinetic energy remains constant. * Temperature remains at 300 K. Overlay: "No work is done against external pressure." The two simulations must run simultaneously. Scene 3 — 30–50 s: Predict and Reveal Pause the animation briefly. Display: "Both processes are adiabatic. Why are their temperature changes different?" Then reveal: Left: "Temperature decreases" Right: "Temperature remains constant" Use a clear visual contrast between the two outcomes. Scene 4 — 50–70 s: The First Law Display the central equation: ΔU = q + w Then animate q = 0 for both processes. Left: "Work done by the gas" "w < 0" "ΔU < 0" Right: "Expansion against vacuum" "w = 0" "ΔU = 0" Include an internal-energy indicator that decreases on the left but remains unchanged on the right. The energy visualization must be synchronized with the molecular animation. Scene 5 — 70–83 s: Microscopic Explanation Display: "Internal energy and temperature are linked." For an ideal gas with constant heat capacity: ΔU = nCᵥΔT Then display the mean translational kinetic energy relation: ⟨Eₖ⟩ = 3/2 kᴮT Use molecular motion to show that lower temperature corresponds to lower average molecular translational kinetic energy. Avoid suggesting that every individual molecule slows down by the same amount. Scene 6 — 83–90 s: Final Takeaway Show a clean side-by-side comparison. Reversible Adiabatic Expansion q = 0 w < 0 ΔT < 0 Ideal-Gas Free Expansion q = 0 w = 0 ΔT = 0 Conclude with large text: "Adiabatic Does Not Mean Isothermal." Closing line: AI-Assisted Physical Chemistry Education 5. Visual Design Use a premium educational animation style rather than a conventional slide presentation. Visual priorities: 1. Molecular particles move smoothly and meaningfully. 2. The piston and removable partition are unmistakably different. 3. The two systems remain visually synchronized. 4. Energy, temperature, and work are represented visually. 5. Equations appear when they become relevant. 6. Text is readable on classroom projectors. 7. The animation emphasizes understanding rather than decorative effects. Suggested palette: white, light blue, navy, cyan, and warm orange. 6. Scientific Accuracy Requirements Verify that: * The sign convention ΔU = q + w is consistent throughout. * Reversible adiabatic expansion is distinguished from irreversible free expansion. * Free expansion is not shown as a continuous equilibrium path on a P–V diagram. * The constant-temperature conclusion for free expansion is explicitly associated with an ideal gas. * Molecular kinetic energy and temperature are represented statistically. * No heat transfer is depicted in either system. * Any displayed numerical temperatures are physically consistent. 7. Implementation and Deliverables First inspect the installed HyperFrames environment and official workflow documentation. Then implement and render the complete animation. Deliver: * `adiabatic_expansion_EN.mp4` * Full HyperFrames source project * `STORYBOARD_EN.md` * `SCIENCE_QA.md` * At least four screenshots of key frames * Render commands and verification results Render the actual MP4 and inspect key frames before reporting completion. Do not stop after creating a storyboard, code draft, or browser preview. 8. Acceptance Criteria The project is complete when: * The video plays from beginning to end without errors. * All visible text is in English. * Both gas systems are visually compared. * Molecular behavior and thermodynamic equations are consistent. * The video communicates the scientific explanation without requiring narration. * The final MP4 is ready for presentation to university administrators. Make reasonable creative decisions independently. Prioritize scientific accuracy, instructional clarity, and visual polish. Final instruction: Produce the finished video, not merely a proposal.
換成你的單元:第 2 節(技術規格)、第 5 節(視覺)、第 7 節(交付物)、第 8 節(驗收標準)可以照用;第 1、3、4、6 節換成你的主題與受眾。第 6 節「Scientific Accuracy Requirements」最值得花時間:把這個單元學生最常見的迷思一條條寫進去,製作的 AI 會逐條自我檢查,審查的 AI 也會照著挑。
只有 Codex?用這一版
給只用 OpenAI Codex 的同仁。後半(Part B)是上面的規格,一字不改;前面加了一段工作守則(Part A),把這支片三次審查抓到的坑寫成要求:怎麼裝 HyperFrames、數字只能從一支程式來、分子模擬若有校正必須在畫面上說明、檢查程式要配故意改錯測試、要從 MP4 本身驗證。Part A 也可以原樣加在 Claude Code 版的前面。
HyperFrames Animation Production — HF-PCHEM-001 (Codex edition)
You are working in an empty project folder. Part A tells you how to work; Part B is the specification. Follow both. Part A comes from producing and reviewing this same video once; it lists the traps we actually hit, so treat it as requirements, not suggestions.
PART A — HOW TO WORK
A1. Environment (do this first, then report what you found)
* Check Node.js (HyperFrames needs version 22 or later), FFmpeg and FFprobe.
* Install the framework locally and pin the version that produced the reference video:
npm init -y
npm install -D hyperframes@0.8.208
* Run `npx hyperframes doctor`. If it reports no Chrome, run `npx hyperframes browser` (see its --help) to install the headless browser used for rendering.
* Set DO_NOT_TRACK=1 for every hyperframes command.
* Learn the framework from its own documentation before writing code: `npx hyperframes --help`, `npx hyperframes docs` (topics: compositions, gsap, rendering, troubleshooting, data-attributes, examples) and node_modules/hyperframes/README.md. Scaffolding with `npx hyperframes init --non-interactive` is allowed.
* If a command needs network access or a permission you do not have, ask me. If a required tool is missing, stop and tell me. Do not switch to another video tool or skip the render.
A2. Architecture
* One file (for example js/physics.js) computes every physical number that appears on screen. The markup holds placeholders that are filled from it. Never type a physical number by hand into the HTML.
* Everything that moves or depends on the physics is drawn by one pure function render(t) of the root-timeline time t, called from the onUpdate of a single GSAP tween that spans the whole film. Seeking to any frame must paint that frame.
* Determinism: seeded random generator only. No Math.random, Date, performance.now, timers, requestAnimationFrame or network calls in any script.
* HyperFrames 0.8.208 traps:
- Register the root timeline (window.__timelines[...] = tl) in an inline <script> inside index.html. In an external .js file the linter does not see it and the check fails.
- System fonts need one @font-face with local() per weight (for example 'Segoe UI Bold' for 700, 'Segoe UI Black' for 800-900), otherwise bold text silently renders regular.
- When the same element gets several tweens, set immediateRender: false on them.
A3. The molecular picture must be honest
* A 2D gas of discs is not a monatomic gas: it has gamma = 2 and cools far below the 3D value, so forcing it onto the 3D curve secretly pumps energy in. Use 3D hard spheres in a thin slab seen from above (slab depth = 2 sphere diameters, the screen shows x and y), so collisions share energy among x, y and z.
* The free-expansion gas (B) gets no correction of any kind; its kinetic energy must be conserved by the dynamics alone.
* If you scale A's velocities so that the dots follow the ideal-gas temperature, keep the factor small, record both the net correction and the sum of all its ups and downs as fractions of the initial kinetic energy, and disclose it on screen in one short English line, as well as in SCIENCE_QA.md. A small factor per frame can still add up to a large intervention.
* Collisions depend on the 3D separation. Do not claim that discs which overlap on screen have collided.
* A fixed time step leaves a small residual overlap between spheres. Measure it in every recorded frame and bound it in a test.
* Do not attribute a deviation from the ideal-gas result to one mechanism (for example excluded volume) unless controls separate it from the others: time step, piston speed, number of molecules, initial state. If you have not done that, say that the cause is not established.
* Never change a random seed to make a number look better. Report what the chosen seed gives and how much other seeds vary.
* Label the speed distribution as theory ("Maxwell-Boltzmann (theory)") unless it is a histogram of the simulated molecules.
A4. Verification you must build and run
* tools/check.mjs, a content gate that exits 1 on any failure. It recomputes every on-screen number from constants written out again in the check itself (not imported from the physics file), runs the real drawing code against a stub DOM, and reads the displayed values back every 0.5 s. It also checks: English only, no hand-typed numbers in the markup, the sign rows (A: q = 0, w < 0, dU < 0; B: q = 0, w = 0, dU = 0), B's energy conservation, equipartition (in-plane share of the kinetic energy near 2/3), molecules inside the walls, the residual sphere overlap, and that the on-screen disclosure is present.
* tools/mutation_test.mjs, which copies the project, breaks one thing per copy and requires the gate to fail every time. Include at least: mean kinetic energy doubled, live work fixed at zero, A's distribution drawn at the start temperature, the correction applied to B too, collisions that ignore depth, molecules leaking through the piston, the disclosure removed. A gate that passes broken code is not a gate.
* `npx hyperframes check` (lint, runtime, layout, contrast) with 0 errors.
* Render: npx hyperframes render --quality delivery --fps 30 -o renders/adiabatic_expansion_EN.mp4
* Verify the MP4 itself: ffprobe (codec, 1920x1080, 30 fps, duration, frame count), a full decode with `ffmpeg -v error -i renders/adiabatic_expansion_EN.mp4 -f null -` (no errors), and key frames extracted from the MP4, not from the browser preview, into screenshots/.
* Look at the key frames. If your tools cannot show you images, say so in the report instead of claiming a visual check.
A5. Report
* What you verified and how (commands and results), what you could not verify, and every simplification a chemist should know about. Do not report completion before the MP4 exists and has passed the checks above.
PART B — SPECIFICATION (unchanged from the original brief)
Project Title
Why Does a Gas Cool Down Without Losing Heat?
Subtitle: Reversible Adiabatic Expansion vs. Free Expansion
1. Objective
Create a polished, 90-second, fully English educational animation using HyperFrames.
The animation will be presented to university administrators as a demonstration of AI-assisted physical chemistry education.
The goal is to visually connect:
* Microscopic molecular motion
* Macroscopic temperature and work
* The First Law of Thermodynamics
Language requirement: All visible text must be in English. This includes titles, labels, explanations, subtitles, equations, and closing messages. Do not include any Chinese text.
The video must be understandable without narration. If narration is added, it must also be in English.
2. Technical Specifications
* Framework: HyperFrames
* Duration: Approximately 90 seconds
* Resolution: 1920 × 1080
* Aspect ratio: 16:9
* Frame rate: 30 fps
* Format: MP4
* Style: Modern scientific visualization
* Background: Light, clean, professional
* Typography: Large, highly readable English text
* Animation: Smooth, deterministic, scientifically meaningful
Use HTML, CSS, SVG, Canvas, GSAP, or other technologies supported by the installed HyperFrames workflow.
3. Scientific Setup
Show two ideal-gas systems with identical initial conditions.
System A — Reversible Adiabatic Expansion
A thermally insulated cylinder contains an ideal gas. A frictionless piston moves outward quasi-statically as the gas performs work.
* q = 0
* w < 0
* ΔU = w < 0
* Temperature decreases
System B — Adiabatic Free Expansion
An ideal gas initially occupies half of an insulated rigid container. The other half is vacuum. The partition is removed.
* q = 0
* w = 0
* ΔU = 0
* Temperature remains unchanged
Assume a closed system, ideal-gas behavior, and no additional forms of energy transfer.
For comparison, both systems can begin at 300 K and expand to twice their initial volume. For System A, choose a constant heat-capacity ratio if numerical final temperatures are displayed. Otherwise, use a qualitative temperature decrease.
Do not invent numerical temperatures without calculating them consistently.
4. Detailed Storyboard
Scene 1 — 0–12 s: The Question
Large opening title:
"Why Does a Gas Cool Down Without Losing Heat?"
Display two insulated containers side by side.
Left label:
"Reversible Adiabatic Expansion"
Right label:
"Free Expansion into Vacuum"
Both initially show:
"T = 300 K"
"q = 0"
Scene 2 — 12–30 s: Two Different Expansions
Left side:
* The piston moves outward slowly.
* Gas molecules collide with the piston and cylinder walls.
* An arrow indicates work done by the gas.
* The temperature indicator gradually decreases.
* The molecular speed distribution shifts toward lower speeds.
Overlay:
"Gas performs work on its surroundings."
Right side:
* The partition is removed.
* Gas molecules spread into the vacuum.
* The average molecular kinetic energy remains constant.
* Temperature remains at 300 K.
Overlay:
"No work is done against external pressure."
The two simulations must run simultaneously.
Scene 3 — 30–50 s: Predict and Reveal
Pause the animation briefly.
Display:
"Both processes are adiabatic. Why are their temperature changes different?"
Then reveal:
Left:
"Temperature decreases"
Right:
"Temperature remains constant"
Use a clear visual contrast between the two outcomes.
Scene 4 — 50–70 s: The First Law
Display the central equation:
ΔU = q + w
Then animate q = 0 for both processes.
Left:
"Work done by the gas"
"w < 0"
"ΔU < 0"
Right:
"Expansion against vacuum"
"w = 0"
"ΔU = 0"
Include an internal-energy indicator that decreases on the left but remains unchanged on the right.
The energy visualization must be synchronized with the molecular animation.
Scene 5 — 70–83 s: Microscopic Explanation
Display:
"Internal energy and temperature are linked."
For an ideal gas with constant heat capacity:
ΔU = nCᵥΔT
Then display the mean translational kinetic energy relation:
⟨Eₖ⟩ = 3/2 kᴮT
Use molecular motion to show that lower temperature corresponds to lower average molecular translational kinetic energy.
Avoid suggesting that every individual molecule slows down by the same amount.
Scene 6 — 83–90 s: Final Takeaway
Show a clean side-by-side comparison.
Reversible Adiabatic Expansion
q = 0
w < 0
ΔT < 0
Ideal-Gas Free Expansion
q = 0
w = 0
ΔT = 0
Conclude with large text:
"Adiabatic Does Not Mean Isothermal."
Closing line:
AI-Assisted Physical Chemistry Education
5. Visual Design
Use a premium educational animation style rather than a conventional slide presentation.
Visual priorities:
1. Molecular particles move smoothly and meaningfully.
2. The piston and removable partition are unmistakably different.
3. The two systems remain visually synchronized.
4. Energy, temperature, and work are represented visually.
5. Equations appear when they become relevant.
6. Text is readable on classroom projectors.
7. The animation emphasizes understanding rather than decorative effects.
Suggested palette: white, light blue, navy, cyan, and warm orange.
6. Scientific Accuracy Requirements
Verify that:
* The sign convention ΔU = q + w is consistent throughout.
* Reversible adiabatic expansion is distinguished from irreversible free expansion.
* Free expansion is not shown as a continuous equilibrium path on a P–V diagram.
* The constant-temperature conclusion for free expansion is explicitly associated with an ideal gas.
* Molecular kinetic energy and temperature are represented statistically.
* No heat transfer is depicted in either system.
* Any displayed numerical temperatures are physically consistent.
7. Implementation and Deliverables
First inspect the installed HyperFrames environment and official workflow documentation.
Then implement and render the complete animation.
Deliver:
* `adiabatic_expansion_EN.mp4`
* Full HyperFrames source project
* `STORYBOARD_EN.md`
* `SCIENCE_QA.md`
* At least four screenshots of key frames
* Render commands and verification results
Render the actual MP4 and inspect key frames before reporting completion.
Do not stop after creating a storyboard, code draft, or browser preview.
8. Acceptance Criteria
The project is complete when:
* The video plays from beginning to end without errors.
* All visible text is in English.
* Both gas systems are visually compared.
* Molecular behavior and thermodynamic equations are consistent.
* The video communicates the scientific explanation without requiring narration.
* The final MP4 is ready for presentation to university administrators.
Make reasonable creative decisions independently. Prioritize scientific accuracy, instructional clarity, and visual polish.
Final instruction: Produce the finished video, not merely a proposal.
怎麼跑(Codex CLI):
- 開一個空資料夾,先執行
git init,方便事後看 Codex 改了什麼。 - 在那個資料夾裡執行
codex -s workspace-write -a on-request,把上面的全文貼進去。 - 它要安裝套件(需要網路)或啟動瀏覽器輸出影片時,可能會停下來問你;看過指令再同意。
電腦上要先有 Node.js 22 以上與 FFmpeg;輸出用的 Chrome 由 HyperFrames 自己下載。這一版還沒用 Codex 實際跑過一遍,指令參數是照 Codex CLI 0.153.4 的說明寫的;跑完的結果會再補在這裡。
給 Codex 的審閱 Prompt(兩輪)
這兩份由 Claude Code 依 09:32 的指示產生,要配合審閱包使用(每 0.25 秒擷取一次的畫面逐字稿、關鍵影格、縮圖總覽)。用 codex exec -s read-only 執行,審查者不能修改任何檔案。這是送審當時的原文,描述的是第一版(2D 圓盤、59 項檢查),保留作紀錄;要審現在的版本,需要另寫一份。
# 第一輪:盲審(只看影片本身) ## 你的角色 你是大學物理化學(熱力學)課程的資深考官,也是教科書審稿人。 要審的是一支 90 秒、無聲、全英文的教學動畫。觀眾是大學部學生,以及來看「AI 輔助物理化學教學」示範的校方主管。 你的任務是找出**化學或物理內容的錯誤**,以及**會讓學生學到錯誤觀念的呈現方式**。 版面美感、配色、程式寫法都不在這次範圍內。 ## 材料(全部在目前這個目錄) | 檔案 | 內容 | |---|---| | `ON_SCREEN_TEXT.md` | 影片畫面上的所有文字,含時間碼與會變動的數值。每 0.25 秒取樣一次,取自實際產生影片的頁面。Part 1 是時間軸,Part 2 是九個關鍵時間點的完整快照。標為 "State" 的行只描述動畫狀態,不是畫面文字。 | | `keyframes/` | 九張 1920×1080 的關鍵影格,從成品 MP4 抽出,對應 Part 2 的九個時間點。已附在這則訊息裡。 | | `CONTACT_SHEET_1_0-42s.jpg`、`CONTACT_SHEET_2_45-87s.jpg` | 每 3 秒一格的縮圖總覽,用來看流程。已附在這則訊息裡。 | | `frames/t_XXs.jpg` | 每 3 秒一張 960×540 的影格。縮圖太小看不清時,用你的看圖工具開這裡的檔案。 | **這一輪的規則** - 只用上面的材料。**不要開啟這個目錄以外的任何檔案。** 上一層有製作者自己的查核文件和程式碼,刻意不給你,免得你被製作者的結論帶著走。 - 不要修改、新增或刪除任何檔案。 - 如果材料裡的文字和影格互相矛盾,以影格為準,並把矛盾列為一條發現。 ## 影片宣稱的設定(畫面上讀得到) - 1 mol 單原子理想氣體(Ar),初溫 300 K。兩個系統都絕熱,最後都膨脹到原本的兩倍體積。 - **A:可逆絕熱膨脹。** 無摩擦活塞,準靜態移動。 - **B:絕熱自由膨脹。** 抽掉隔板,氣體衝進真空。 - 正負號慣例:ΔU = q + w,w 是**外界對氣體做的功**(畫面寫 "w = work done on the gas")。 ## 請做的事 ### 1. 獨立重算畫面上的每一個數字 包括:最終溫度、ΔT、w、ΔU、U 的起點與終點、⟨E_k⟩、P–V 圖的端點與等溫線位置、速率分布圖橫軸範圍是否合理。 寫出你用的公式和常數,自己算一遍。不要只說「看起來對」。 ### 2. 逐項檢查(每一項都要給結論,就算結論是「正確」) - a. 正負號慣例前後是否一致。例如 "Work done by the gas" 和 "w < 0" 同時出現,是否自洽。 - b. 可逆絕熱和不可逆自由膨脹的區分,是否正確、是否足夠(p_ext、準靜態、路徑)。 - c. 自由膨脹在 P–V 圖上的畫法:有沒有被畫成平衡路徑。 - d. 「溫度不變」有沒有明確限定在理想氣體;真實氣體會怎樣。 - e. 自由膨脹進行中,畫面一直顯示 T = 300 K,這樣恰當嗎?(非平衡狀態下溫度的定義) - f. 動能與溫度的關係是否用統計方式呈現(分布、平均值);有沒有暗示每個分子都等量變慢。 - g. 有沒有畫出或暗示熱傳(q ≠ 0)。 - h. U 用絕對值呈現(3.74 kJ,以 0 K 為零點),會不會誤導。 - i. 速率分布圖(Maxwell–Boltzmann、Ar、v_rms 標記)和 ⟨E_k⟩ = 3/2 k_B T 是否對應正確。 - j. 敘事邏輯:第三幕 "Pause and predict" 之後的揭曉、第四幕重播、第五幕的說明,順序與因果有沒有講反。 - k. 英文措辭:每一句畫面英文在物理上是否精確,會不會造成常見迷思。至少檢查這幾句: - "Adiabatic Does Not Mean Isothermal." - "Gas performs work on its surroundings." - "No work is done against external pressure." - "Only the gas that does work loses internal energy." - "Speeds still vary widely; only the average is lower." - "Why Does a Gas Cool Down Without Losing Heat?" - l. 圖像本身:從影格看活塞、隔板、容器、箭頭、能量條、P–V 圖,有沒有和文字或物理互相矛盾。 - m. 你認為該查、但上面沒列到的項目。 ### 3. 不確定就說不確定 不確定的地方標「不確定」,並說明需要什麼資訊才能判定。不要猜。 ## 嚴重度 | 等級 | 意思 | |---|---| | ERROR | 物理或化學上錯了,必須改。 | | MISLEADING | 字面上不算錯,但很可能讓學生學到錯誤觀念。 | | IMPRECISE | 不夠精確,或用詞可以更好;改了比較好。 | | OK-SIMPLIFICATION | 刻意的簡化,對這個受眾可以接受。請說明為什麼可以接受。 | ## 回覆格式 說明用繁體中文;畫面原文與建議的英文改寫保留英文。 1. **結論**(三句以內):有沒有必須修改的錯誤。 2. **發現清單**,依嚴重度排序,用表格: `編號 | 嚴重度 | 時間碼 | 畫面原文 | 問題說明 | 建議改法(英文畫面文字) | 把握度(高/中/低)` 3. **獨立重算**:每個數字一行,`公式 → 你的結果 → 畫面數值 → 是否一致`。 4. **逐項檢查 a–m 的結論**,每項一兩句。 5. **無法從材料判斷的事**。
# 第二輪:對質(看製作者的查核文件與程式碼) ## 你的角色 和第一輪相同:大學物理化學考官兼教科書審稿人。 第一輪你只看了影片本身。這一輪改看製作者的科學查核文件和產生畫面數字的程式,任務有兩個: 一是**確認第一輪的每一條發現是否成立**,二是**攻擊製作者的查核本身**。 目前目錄是專案根目錄。 ## 材料 | 檔案 | 內容 | |---|---| | `review/CODEX_REVIEW_round1.md` | 你第一輪的審閱結果 | | `review/ON_SCREEN_TEXT.md`、`review/keyframes/` | 第一輪用過的畫面文字與影格,需要時回頭對照 | | `SCIENCE_QA.md` | 製作者的科學查核:模型假設、數字推導、需求對照、分子動畫的簡化手法、限制、驗證紀錄 | | `STORYBOARD_EN.md` | 分鏡 | | `js/physics.js` | 科學核心,畫面上所有物理數字都由這裡算出 | | `js/sim.js` | 2D 硬球分子模擬(固定種子),載入時一次算完 | | `js/schedule.js` | 時間軸與模擬時鐘 | | `js/draw.js` | 每一格的繪圖與數值顯示(含四捨五入方式) | | `js/timeline.js`、`index.html` | 文字、版面、出場時間 | | `tools/check.mjs` | 製作者的內容閘門,宣稱 59 項全過 | `node_modules/`、`js/vendor/` 是第三方套件,不必看。 **這一輪的規則** - 不要修改、新增或刪除任何檔案。 - 可以執行 `node tools/check.mjs`(只讀檔、不寫檔),也可以自己寫一次性的 `node -e` 計算來驗證數字,但不要把任何東西存檔。 - **不要因為製作者「有寫說明」就撤回第一輪的發現。** 觀眾看不到 SCIENCE_QA.md,畫面上的問題只能靠畫面解決。只有當文件或程式提供了物理論證或數據,證明你第一輪判斷錯了,才撤回或降級,並寫明根據。 ## 請做的事 ### 1. 第一輪每一條發現的最終判定 逐條判定「維持/降級/升級/撤回」,附根據(檔名:行號,或物理論證)。 ### 2. 攻擊 SCIENCE_QA.md §4 的視覺手法 製作者用 2D 硬球模擬,再每一格把 A 系統所有分子的速度乘上同一個係數,讓總動能貼著 3D 單原子理想氣體的 T(V) = 300 (V₁/V)^(2/3)。請判斷: - 物理上站不站得住?這個係數在 A 是把能量**加回去**,會不會讓「能量從哪裡來」變得說不通? - 揭露得夠不夠?只寫在 SCIENCE_QA 而畫面不提,對這個受眾是否可以接受? - 對學生會不會造成錯誤觀念? - 有沒有更誠實、成本也不高的替代做法? ### 3. 查核 SCIENCE_QA.md 其他宣稱 至少檢查以下幾點: - 「3D Maxwell 氣體的平面投影速率服從 2D(Rayleigh)分布」是否正確。 - 自由膨脹進行中顯示 T = 300 K 的理由(以平均分子動能定義的動力學溫度)是否站得住。 - 真實氬氣自由膨脹的 van der Waals 估計:ΔT = (a/C_V,m)(1/V₂ − 1/V₁) ≈ −0.22 K。公式、a 值、數量級都要檢查。 - U 以 0 K 為零點(U = 3/2 nRT)的說法與用法。 ### 4. 審 tools/check.mjs - 59 項檢查,是否都真的檢查到它宣稱的事? - 有沒有「永遠會過」的假檢查?例如用同一個函式算兩次再互相比較,或比較的對象本身就來自被測物。 - 還缺哪些該檢查的項目? ### 5. 審 js/physics.js 與數字顯示路徑 - 公式與物理常數是否正確。 - 畫面上每個數字是否都從 physics.js 算出;js/draw.js 的四捨五入或顯示方式,有沒有讓畫面數字之間互相矛盾。 ## 嚴重度(同第一輪) | 等級 | 意思 | |---|---| | ERROR | 物理或化學上錯了,必須改。 | | MISLEADING | 字面上不算錯,但很可能讓學生學到錯誤觀念。 | | IMPRECISE | 不夠精確,或用詞可以更好;改了比較好。 | | OK-SIMPLIFICATION | 刻意的簡化,對這個受眾可以接受(說明理由)。 | ## 回覆格式 說明用繁體中文;畫面原文、程式片段、建議的英文改寫保留原文。 1. **結論**(三句以內):影片和查核文件各有沒有必須修改的錯誤。 2. **第一輪各條的最終判定**,表格: `第一輪編號 | 原嚴重度 | 判定(維持/降級/升級/撤回) | 新嚴重度 | 根據` 3. **新發現**,依嚴重度排序,表格: `編號 | 嚴重度 | 位置(檔案:行號 或 時間碼) | 問題說明 | 建議改法 | 把握度(高/中/低)` 4. **§4 視覺手法的評估**:結論與建議。 5. **check.mjs 的評估**:假檢查清單、缺漏的檢查。 6. **無法判斷的事**,以及需要什麼才能判斷。
化學內容查核
數字追得到算式,檢查程式本身也被檢查
畫面上的數字都是算出來的
| 物理量 | 怎麼算 | A 可逆絕熱 | B 自由膨脹 |
|---|---|---|---|
| 終溫 T2 | T2 = T1(V1/V2)γ−1,γ = 5/3 | 189 K | 300 K |
| 功 w | A:w = ΔU = nCV,mΔT;B:pext = 0 | −1.38 kJ | 0 |
| 內能 U | U = nCV,mT,CV,m = 3/2 R(以 0 K 為零點) | 3.74 kJ → 2.36 kJ | 不變 |
| 平均平動能 | ⟨Ek⟩ = 3/2 kBT | 6.21 × 10−21 J → 3.91 × 10−21 J | 不變 |
| 方均根速率 | vrms = (3kBT/m)1/2,Ar | 433 m/s → 344 m/s | 不變 |
這些數字在程式裡只算一次(js/physics.js),畫面一律從那裡引用,原始碼裡不准手打物理數字。檢查程式用另外寫的常數再算一遍,並實際執行繪圖程式,每 0.5 秒讀回畫面上的數字比對。本頁的數字也是建置時從同一支程式讀出來的。
審查抓到什麼、怎麼改
| 問題 | 誰抓到 | 處置 |
|---|---|---|
| 自由膨脹進行中,溫度計一直顯示 300 K。氣體還在往真空衝,不是平衡態,溫度其實沒有定義。 | Codex 第一輪 | 抽板後 4 秒內,ΔT 欄位改標 “not yet in equilibrium”;標籤長度由模擬量到的整體流動時間把關,太短檢查就失敗。 |
| 分子動畫每格把速度拉回理論曲線,累計補回約 22–26% 的初始動能,畫面上卻只呈現氣體對外做功。 | Codex 第二輪 | 改成薄板中的 3D 硬球:這條軌跡降溫的 104–105% 來自分子撞上後退的活塞,校正淨量降到約 2%。複審指出累計量仍大,見下方第一列。 |
| 第二版的校正每格不超過 0.22%、淨量約 2%,但正負來回累計約 18% 初始動能,作用像分子動力學的溫控器,畫面卻沒有說。 | Codex 複審 | 畫面底部加一行英文註腳:A 的分子速度被輕輕調整、跟著理想氣體溫度走,B 完全沒有校正。檢查程式確認它從活塞開動就在畫面上。 |
| Claude 寫在程式註解與查核文件裡的「畫面上碰到,就一定在三維中相撞」不成立:圓盤邊緣重疊時,三維距離可能大於直徑。 | Codex 複審 | 三處改正。原查證報告保留原文,另加更正,留下當時判斷錯的紀錄。 |
| 固定時間步長留下最多約 1 px 的球體三維重疊,檢查程式沒有查。 | Codex 複審 | 加一項三維重疊上限檢查,並配一個故意改錯(拿掉推開球體那一步):只有新檢查抓得到,證明原本確實漏查。 |
| 查核文件把「活塞貢獻超過 100%」歸因於硬球的排除體積。 | Codex 複審;Claude 加做對照 | Claude 用 30 組初態,加上時間步長、活塞速度、球徑的對照重算:把球縮小反而更暖,和排除體積的說法相反。改成保守寫法:原因至少有四個、方向互相抵銷,尚未分離。 |
| “Speeds still vary widely; only the average is lower.” 暗示分布形狀不變。 | Codex 第一輪 | 改成 “the distribution shifts lower.” |
| 查核文件把「真實氣體自由膨脹會降溫」寫成通則。 | Codex 第二輪 | 改寫:溫度變化的正負號取決於氣體與狀態,高於反轉溫度時反而升溫。 |
| 檢查程式有漏洞:故意把動能加倍、把即時的功歸零,59 項照樣全過。 | Codex 第二輪 | 重寫成 100 項,並加上故意改錯測試:17 種改法全部被抓到。 |
| Claude 自己提的第一個修法(碰撞方向隨機往紙面外傾斜)違反細緻平衡:活塞還沒動,平面動能佔比就從 2/3 掉到約 0.53。 | Claude 新加的能量均分檢查 | 放棄這個修法,改用上面第二列的 3D 模型。AI 的修法也會錯,要靠檢查抓出來。 |
| 幾句規格指定的英文建議改寫,例如標題的 “Without Losing Heat” 可能讓人把熱當成氣體儲存的東西。 | Codex 兩輪 | Claude 查證後建議保留,老師決定維持原文:第四幕會明確給出 q = 0,答案本身就會澄清。審查意見逐條查證,不照單全收。 |
細節:SCIENCE_QA.md(英文科學查核,含能量帳與驗證紀錄)。
仍然保留的簡化(畫面上看不出來,這裡講清楚)
- 分子只有 48 顆,在兩個直徑厚的薄板裡做 3D 硬球碰撞,畫面只顯示上視的 x、y,所以畫面上圓盤重疊不一定是碰撞。B 完全不校正,動能只靠碰撞就守恆。
- A 每格把動能往理想氣體曲線拉回 10% 的偏差:每格不超過 0.22%,淨量約 2%,但正負來回累計約 18% 初始動能。所以 A 的分子是示意,不是純絕熱的軌跡;畫面底部有一行註腳說明。
- 不校正時,這條軌跡的終溫是 188 K 與 191 K,換 30 組初態平均是 183 K 與 186 K(理想值 189 K)。偏離的原因尚未分離。固定時間步長另留下最多約 1 px(直徑的 7%)的球體重疊,檢查程式設了上限。
- 自由膨脹途中氣體不在平衡態。溫度計照規格維持 300 K,靠抽板後 4 秒的 “not yet in equilibrium” 標示提醒。
- 速率分布曲線是理論的 Maxwell–Boltzmann 分布(標題寫明 theory),不是 48 顆分子的統計直方圖。
- 第四幕途中的 w 由兩個顯示到 0.01 kJ 的內能相減,和獨立取位最多差 0.01 kJ。
重點不是哪個 AI 比較準,而是每一個說法都有程式可以重現、有人可以查。
自己試試
想自己做,這四件事最有用
把迷思寫進規格
規格裡的「科學正確性要求」寫得越具體,AI 越知道要檢查什麼,審查的 AI 也有依據可以挑。
數字不要手打
物理數字集中在一支程式算,畫面只引用;檢查程式用獨立的常數重算比對,不一致就不出片。
找另一個 AI 盲審
先只給畫面、不給製作者的解釋,免得被帶著走;回來的意見逐條查證,該保留的就保留。
檢查程式也要被檢查
故意把程式改壞,確認檢查會失敗。這支片第一版的 59 項檢查,在動能加倍時照樣全過。
用到的工具
- 製作:Claude Code(Claude Opus 5.5)
- 影片框架:HyperFrames 0.8.208(開源,Apache-2.0),HTML、Canvas、GSAP
- 審查:OpenAI Codex CLI(gpt-6-astra),前兩輪用唯讀模式
- 輸出與驗證:FFmpeg,一般桌機輸出 90 秒 1080p 約 4 分鐘
下載
- 影片 MP4(網頁版,10.3 MB)
- STORYBOARD_EN.md:英文分鏡
- SCIENCE_QA.md:英文科學查核
- 規格 prompt(Claude Code 版)、規格 prompt(Codex 版)