Repository navigation
v0.6.1
Egatari Studio v0.6.1
Egatari 1.0 Working Draft wd-2026-10-28 に従います。
v0.6.1 は、v0.6.0 を実際に使って見つかったことを直した版です。先生が気づく変更から先に書きます。
先生にとって変わること
1. スマートフォンで教材が画面に収まります
- 縦に持ったスマートフォン(幅 390 px ほど)で、スライドの左右が切れなくなりました。スライドが画面の幅に合わせて縮みます。
- ツールバーが画面からはみ出さず、入りきらないボタンは 2 行目に回ります。
- タッチの端末では、最初の案内が「画面をタップすると、ツールバーが出ます」になります。
- 再生器 Egatari Player は 1.0.1 になりました。前の版で作ったファイルは、そのファイルのプレーヤーのまま再生されます。
2. 印刷から戻っても、パーツに入れたものが消えません
印刷のあと教材に戻ると、パーツに入れた値(m-predict の数、タイマーの延長など)が消えていました。直しました。スライドの一覧と品質チェックも同じです。
3. 画面の言葉を見直しました
- 最初の画面:「.ega.html ファイルをここにドラッグ&ドロップ」。サンプルの説明は「Egatari で作ったサンプルの教材です。開いて再生したり、直したりできます。」です。
- 「フォルダで作業する…」と「自分のテーマ…」は、ボタンとはっきり分かる形にし、それぞれに 1 行の説明を付けました。
- 個人情報の説明:「ファイルは、開いたファイルと選んだフォルダだけを読み書きし、どこにもアップロードしません。」AI 音声の 2 つの使い方(この PC で作る・クラウドで作る)で何をダウンロード・アップロードするかも書きました。
- 作業フォルダから書き出したファイルを開くと、警告ではなくお知らせとして「このファイルは、作業フォルダ(スライドと台本のファイルを入れたフォルダ)から書き出したものです。…」と出ます。配布しているサンプルには、このお知らせは出ません。
- 用語をそろえました:教材を開く機器は「端末」、教材を受け取る人は「参加者」(授業)または「学習者」。
4. 参照音声は教材に入りません
AI 音声がまねる「参照音声」の録音は、Egatari ファイルに保存・エクスポートされません。作業フォルダの中にあると、品質チェックが知らせます。
5. Egatari Viewer(viewer.egatari.org)
iPhone・iPad などで、受け取った Egatari ファイルを開いて再生するページです。
- 一度開けば、ネットワークがなくても動きます。新しい版は、次に開いたときから使われます(再生中に入れ替わることはありません)。
- パソコンでは、矢印・Space・PageUp/PageDown・Home/End で、どこを押したあとでも教材が進みます。
- ライブ(授業中の質問・投票)に参加できます。
6. そのほか
- 編集中にプレビューを読み込み直した直後、スライドの一覧と「スライド ▾」の操作が一瞬 1 枚目に向いていた不具合を直しました。
- 品質チェックのパネルで、組み立ての警告も数に入り、スライドの番号と題で出るようになりました。
- 音楽の指示:鍵盤(
m-keyboard)の範囲は「使う鍵を全部含め、1 オクターブ以上(例 C4-C5)。両端は白鍵、3 オクターブまで」。
技術的なこと
- 形式:Egatari 1.0(Working Draft wd-2026-10-28)。v0.6.0 と同じ。
- プレーヤー:Egatari Player 1.0.1(patch。
kit/player.lock.json)。 - 書き出しの印:
exportedFromが合っていても、組んだ教材と原稿が食い違う写しは「書き出したあと直した」とする(exportedState(…, {sourceMatches})、npm run portable -- compare)。サンプルは印なしで組む(build --portableは今までどおり印を書く)。 - チャットの AI への指示:指示の版が変わる(音楽の束の
m-keyboard)。 - リポジトリ:
tools/sync-spec.mjsはテストが読むものだけを写す(vendor/egatari-spec54 MB → 14 MB)。既定の参照音声はtts/voices/だけ。README の取得はgit clone --depth 1。 - Colab:ノートブックは v0.6.1 を取得する(
COLAB.ref)。 - 配布物:サンプルの Egatari ファイルと、編集アプリの凍結した写し
editor-site-v0.6.1.tar.gz。写しは/v0.6.1/で配られ、下の sha256 で照らされる。 - 全部の変更は CHANGELOG.md(下に同じ節を載せる)。
Egatari Studio v0.6.1
Follows Egatari 1.0 Working Draft wd-2026-10-28.
v0.6.1 fixes what we found using v0.6.0 in practice. Changes teachers will notice come first.
What changes for teachers
1. Lessons fit a phone screen
- On a phone held upright (about 390 px wide) the slide is no longer cut off at both sides; it scales to the screen width.
- The toolbar stays on the screen and wraps onto a second row.
- On touch devices the first hint reads "Tap the screen to show the toolbar".
- The bundled player is now Egatari Player 1.0.1. Files from earlier versions keep their own player.
2. Returning from print keeps what was entered in parts
After printing, values entered in parts (the counts in m-predict, a timer's extension) were reset. Fixed; the slide overview and the quality check behave the same way.
3. Clearer wording
- Start screen: "Drag a .ega.html file here". The Samples line reads "Sample lessons made with Egatari. Open one to play it or edit it."
- "Work in a folder…" and "My themes…" are now ordinary buttons, each with a one-line hint.
- Privacy: "Only the file you open and the folder you choose are read and written; nothing is uploaded." It also says what the two AI voice routes (on this computer, in the cloud) download or upload.
- A file exported from a working folder now shows an information line, not a warning: "This file was exported from a working folder (the folder that holds the slide and script files). …". The distributed samples no longer show it.
- Terms: the computer or tablet a lesson is opened on is a "device"; the people who receive it are "participants" (in class) or "learners".
4. Reference voices stay out of lessons
The reference recording that an AI voice imitates is never saved or exported into an Egatari file. The quality check reports one inside the working folder.
5. Egatari Viewer (viewer.egatari.org)
A page for opening and playing a received Egatari file on iPhone, iPad and other devices.
- Once opened, it works offline. A new version is used from the next launch, never while a lesson plays.
- On a computer, the arrow keys, Space, PageUp/PageDown and Home/End move the lesson wherever you clicked last.
- Participants can join Live (questions and polls in class).
6. Also
- In the editor, right after the preview reloads, the slide list and the Slide ▾ commands no longer point at slide 1 for a moment.
- The Quality check panel counts build warnings and shows them with the slide number and title.
- Music instructions: the
m-keyboardrange is "Include every key you use, at least one octave (e.g. C4-C5). Both ends on white keys, up to 3 octaves."
Technical notes
- Format: Egatari 1.0 (Working Draft wd-2026-10-28), as in v0.6.0.
- Player: Egatari Player 1.0.1 (patch;
kit/player.lock.json). - Exported-from mark: a copy whose compiled lesson no longer matches its source counts as edited even when
exportedFrommatches (exportedState(…, {sourceMatches}),npm run portable -- compare). Samples are built without the mark;build --portablestill writes it. - Instructions for the chat AI: the pack version changes (
m-keyboardin the music set). - Repository:
tools/sync-spec.mjscopies only what the tests read (vendor/egatari-spec54 MB → 14 MB); the default reference voices live only intts/voices/; the README clones withgit clone --depth 1. - Colab: the notebook fetches v0.6.1 (
COLAB.ref). - Assets: the example Egatari files, and
editor-site-v0.6.1.tar.gz, a frozen copy of the editor served at/v0.6.1/and checked against the sha256 below. - The full list is in CHANGELOG.md (the same section follows).
CHANGELOG [0.6.1]
Added
- Egatari Viewer (formerly Egatari Play;
play/,tools/build-play.mjs→_play/, at viewer.egatari.org): a web app page that opens an Egatari file on the device and plays it, for iPhone and iPad (no local HTML from the Files app), Androidcontent://trouble and chat previews that fail. The lesson runs in asandbox="allow-scripts"srcdoc frame behind Studio's trusted preview prefix; recent files stay on the device (OPFS, IndexedDB fallback) and can be deleted; Androidshare_target; a versioned service worker that caches only the page's own files. Not deployed yet (docs/viewer.md) - Egatari Viewer acts for the lesson in Live (format spec live §2A): the page shows Join in its own chrome and holds the WebSocket, learns the step from the lesson's position events and relays nothing into the lesson; endpoints the page does not allow get the join link. Links the lesson asks to open go through
kit/core/link-policy.mjsin the page's own box - Egatari Viewer stage 0: works offline once opened (the app shell is precached by its service worker; lessons are still read on the device only); a new version takes over on the next launch only, never while a lesson plays (no update button); the manifest names it "Egatari Viewer", "Ega Viewer" on the Home Screen, with the え icon. Config and docs move to viewer.egatari.org (
play/wrangler*.toml, Workeregatari-viewer; docs/viewer.md, docs/viewer-sharing.md on getting a file onto an iPhone or iPad and opening it in the Viewer) - Egatari Viewer on iPhone and iPad shows a one-line add-to-home-screen tip with iOS's own labels (Safari, or Chrome's 「表示を増やす」 and 「Web アプリとして開く」) in a browser tab, until dismissed; on Android, when the browser offers it, an Install button that calls
prompt(); nothing from the Home Screen or on a PC tools/studio-icons.mjsbuilds Egatari Studio's own tab and app icon 「す」 (assets/logo/studio/: the ico files, a light/darkfavicon.svg, the touch icon and the manifest icons) from the owner's SVGs inassets/logo/studio/src/;tools/test-viewer-webkit.mjschecks the Viewer in Playwright's WebKit at iPad sizes (a step ofnpm test; skipped where WebKit is not installed)
Changed
- LLM pack, music series: the
<m-keyboard>rangeguidance now reads "Include every key you use, at least one octave (e.g. C4-C5). Both ends on white keys, up to 3 octaves." (the Japanese pack and the part list row say the same). The pack version changes. tools/sync-spec.mjscopies only what the tests read (an allow-list), sovendor/egatari-specshrinks from 54 MB to 14 MB; the unread pre-1.0 document fixtures are no longer copied.- The default reference voices
alice.wavandbob.wavnow exist only intts/voices/; the identical copies inlab/voices/are removed. The Colab notebook reads them fromtts/voices/, andnpm run build:appcopies them into the site'slab/voices/for the in-browser voice. - README: the quick start clones with
git clone --depth 1. - Egatari Studio's favicon, touch icon and manifest icons are 「す」; its manifest
short_nameis "Egatari Studio". The え mark stays on the header, Egatari Viewer and exported.ega.htmlfiles - Egatari Viewer's messages end with what to do next (not an Egatari file, too large, read and parse errors, Live errors); joining a Live while offline says so at once; wording follows the terms (再生専用, 参加コード, 待機室, ステップ)
- Wording (glossary 2026-10-28,
docs/terms.json): the computer or tablet a lesson is opened on is called 端末 / device, not 機械 / machine, and the person who opens a lesson is 参加者 (participant) or 学習者 (learner), not 見る人 / viewer. In the Live panel the time note reads 「時刻はこの端末の時間帯で入れます」 ("Times are in this device's time zone"); an attachment warning names 「この端末のパス」 ("device-specific path"); without the Mincho font a build says the lesson 「開く端末の明朝で表示されます」. The docs follow (パソコン where a real PC is meant, such as a TTS server on another computer).lint:termschecks the new words; 機械学習 and the 4M (人・機械・方法・材料) of the m-fishbone example stay. - A file exported from a working folder now says what it is, in plain words: "This file was exported from a working folder (the folder that holds the slide and script files). Editing it here does not change the files in that folder. If you don't have the folder, you can edit and save this file as usual." It is shown as an ordinary information line, not a warning, and the button keeps its menu name, "Export working folder…". After an edit the line adds "This file has been edited since it was exported." (ja: 「作業フォルダから書き出したファイル」).
docs/terms.jsonfollows the glossary (2026-10-29, 103 terms): drag-and-drop, exported-file, no-upload. - Start screen: the drop area reads "Drag a .ega.html file here" (ja: 「.ega.html ファイルをここにドラッグ&ドロップ」). The Samples line no longer describes a second check ("Sample lessons made with Egatari. Open one to play it or edit it."). "Work in a folder…" and "My themes…" are ordinary outlined buttons, each on its own row with a one-line hint. The privacy line is shorter and says "nothing is uploaded", and names the two AI-voice routes by their button labels (on this computer: downloads the voice program and model; Google Colab: you upload the script yourself). The sample card says "contains its own code (asks before opening)".
- Script panel: the step of the conclusion line is called "conclusion line" instead of the internal key
concl(in "Next step (…)", the panel header and the notice about editing another step). - Saving an Egatari file without rebuilding the slides now reports "saved (2.0 MB)" with the size, instead of a long explanation.
Fixed
- A copy exported from a working folder whose compiled lesson no longer matches its source (for example after the hashes in the file were changed by hand) now says "This file has been edited since it was exported.", even when the exported-from mark still equals the index's
sourceSha256.npm run portable -- comparelikewise reports such a copy as edited. Opening a file whose index was changed by hand without updating itsdata-sha256shows the "cannot open" dialog (the index is corrupt) as before; the editor waits only for its OK and does not freeze. A new browser test opens hand-edited and malformed marks (missing member, wrong type, 8 MB value, mismatched copies) and checks the page keeps answering. - Player on a phone held upright (about 390 px wide): the toolbar no longer runs off the screen; it wraps onto two rows. Mobile browsers no longer widen the page to the unscaled slide (to about 660 px), so the slide scales to the screen width instead of being cut off at both sides. Files from earlier versions keep their own player.
- On a touch device (
(hover: none)), the one-time toolbar hint now reads "Tap the screen to show the toolbar"; with a mouse it is unchanged. - Egatari Player 1.0.1 (the bundled player that files carry,
playerin the index anddeck-meta): on a phone the slide fits the screen width (the browser no longer widens the page to the 1280 px stage and cuts the slide's sides), the toolbar fits the screen and wraps to a second row, and the hint says "Tap the screen to show the toolbar" on touch devices; returning from print no longer resets parts the viewer had touched (e.g. m-predict counts). - Returning from printing no longer clears what the viewer entered in a part (the counts in
m-predict, a timer's extension). Printing, and the slide overview and the quality check in the editor, draw other positions only to come back; that return was counted as entering the slide, so parts were reset. Such renders now leavectx.enteredfalse and keep the viewer's input. Tools that draw other positions and come back wrap theirDECK.seekcalls in the newDECK.aside(fn). - Quality check panel: build warnings now count in the summary and the toolbar badge (「エラー 0 · 警告 0」 no longer sits above a list of build warnings). A build warning about a slide shows the slide number and title instead of internal names (
## s-…, narration.md line numbers) and goes to that slide when clicked, like the checker's findings. - Steps whose audio needs updating are listed once, as a Quality check finding on their slide (step number only), not again as a build warning with the internal step key.
- In the editor, reloading the preview no longer counts slide 1 as the current slide for a moment before the preview returns to where you were. Until then, the slide list followed slide 1 and the Slide ▾ commands would act on it.
- New… ④: on the paid plan, the social studies tile names what its instructions carry, "Maps of Japan and the world" (the world map is a paid-plan part). On the free plan it still reads "Map of Japan". Only the tile's text changes; the instructions are the same.
- Egatari Viewer on touch screens: the player takes touch itself (wake tap,
REVEAL_GUARD, the bar shown on open, a handle), so the page's lesson shim no longer relays taps or completes clicks - Egatari Viewer on a computer: the arrow keys, Space, PageUp/PageDown and Home/End move the lesson wherever the focus is. Before, they did nothing right after opening a file in Chrome (the frame lost the focus when the lesson loaded) and, in Safari and Chrome, after a click on the Viewer's own bar or buttons or with the focus in the Live pane, until the viewer clicked inside the lesson. The page now focuses the frame once the lesson has loaded and hands the navigation keys pressed in the page to the lesson (its lesson shim presses them as the player's buttons do; no player change)
- The Samples (
dist/examples/and the release assets) no longer carry the exported-from-a-folder mark, so a downloaded sample opens without that notice.build --portableon a working folder is unchanged and still writes the mark.
Security
- Export to an Egatari file (
--portable,npm run portable -- pack, the editor's Save and Export) never packs a reference voice (the recording an AI voice imitates) named invoice.json(Egatari §5recipe, owner decision 2026-10-28): a step's audio or an attachment that is one (by location or by content) is left out with a finding that names the rule, and export is refused (reference-voice) when the slides use one. Names resolve throughIRODORI_REF_DIRwhen that folder is inside the working folder. - Quality check:
refVoicereports a reference voice inside the working folder (error when the slides use it, warning as a step's audio or inattachments/, information elsewhere); the editor's quality check warns too. - Egatari Viewer refuses to run in a frame (
frame-ancestors 'none',X-Frame-Options: DENYin_headers, and a script check). Self-hosters need a host that sends headers (docs/viewer.md "Self-hosting") - Egatari Viewer follows format spec 3e4b4a6: the lesson asks for links with the §9.4 event
{egatari: "openLink", href, text}(only on the viewer's activation, text up to 200 characters; the page applies §11 and opens nothing without a tap in its own box), and a host agreed to before gets a plain 「開く」 with its name (§11 (f)). A 「共有の端末」 (Shared device) switch keeps no recent files and deletes the kept ones - Egatari Viewer follows format spec c002455: an
openLinkwithdownload: trueis refused with the host and 「この教材からはファイルを保存できません」. The Live pane is shown from the start beside or below the lesson, never over it, and nothing resizes or covers the lesson's frame while it plays (the update notice waits), so a tap meant for the page is never handed to the sandboxed frame - Egatari Viewer's Live layout: a lesson with Live starts on a Join screen (or 「参加しないで見る」, which makes no request) before its frame is placed, and the layout is chosen once from the activities and the screen (a bar, a pane below or beside the stage, or the side slack in phone landscape; on 16:9 phones an indicator over the frame's top edge, or a 28 px strip, behind one constant), laid out again only on rotation.
tools/play-tap-measure.mjscounts taps lost to the lesson's frame - Egatari Viewer: each poll choice's whole row is the tap target (44 px tall where it fits, at least 24 × 24 px in the strip); the overlay is the default on 16:9 phones in landscape; the UI says ホスト and ライブ instead of 先生 and 部屋 (host, Live instead of teacher, room)
editor-site-v0.6.1.tar.gz sha256: d5833391729ec8e7c24a2a94151f921b73f700442115ff31b89a386ff1fea2fa