diff --git a/.github/workflows/tools.yml b/.github/workflows/tools.yml
index 05c2f96..38f78f3 100644
--- a/.github/workflows/tools.yml
+++ b/.github/workflows/tools.yml
@@ -7,9 +7,9 @@ on:
- "DemoLab/**"
- "Localization/**"
- "docs/**"
- - "README*.md"
- - "NOTICE*.md"
- - "THIRD_PARTY_NOTICES*.md"
+ - "README.md"
+ - "NOTICE.md"
+ - "THIRD_PARTY_NOTICES.md"
- "web/**"
- ".github/workflows/tools.yml"
workflow_dispatch:
diff --git a/DemoLab/README.md b/DemoLab/README.md
index 9643640..7edc45a 100644
--- a/DemoLab/README.md
+++ b/DemoLab/README.md
@@ -1,5 +1,5 @@
-[English](README.md) · [한국어](ko/README.md) · [日本語](ja/README.md) · [简体中文](zh-Hans/README.md) · [繁體中文](zh-Hant/README.md)
+[English](README.md) · [한국어](docs/ko/README.md) · [日本語](docs/ja/README.md) · [简体中文](docs/zh-Hans/README.md) · [繁體中文](docs/zh-Hant/README.md)
# Tatami Demo Lab
@@ -123,6 +123,8 @@ the image, with a chapter label at the upper left and actual keystrokes at the
upper right. Translucent backgrounds keep text readable over light and dark apps.
The colors come from the website palette; changing presentation needs no new capture.
+Poster frames use `posterSeconds` or `posterCaptionIndex` from `publication.json`. Choose a frame after the feature has taken effect. Poster URLs use the image hash so replacing a still does not require re-encoding its video.
+
Caption edits may reuse an original only when every recorded action, typed input,
assertion and delay is unchanged. The exporter verifies the frozen scene hash and
compares those actions before replacing narration on the original timeline.
diff --git a/DemoLab/docs/SCENES.md b/DemoLab/docs/SCENES.md
index db2a7d2..cfef2b5 100644
--- a/DemoLab/docs/SCENES.md
+++ b/DemoLab/docs/SCENES.md
@@ -55,8 +55,8 @@ a reason to correct preparation, not to trim away the unexpected window later.
| `virtualDisplay` | `connected` | Connect or disconnect the real guest virtual display helper. |
| `configure` | `field`, `value` | Atomically edit an allowed live setting in the lab TOML. |
| `clipboard` | `text` | Provide local example text, preserving and restoring all clipboard item types. |
-| `closeSettings` | — | Close the native settings window after authoring. |
-| `prepareSettings` | — | Size and position the native Tatami settings window before its controls are used. |
+| `closeSettings` | No fields | Close the native settings window after authoring. |
+| `prepareSettings` | No fields | Size and position the native Tatami settings window before its controls are used. |
| `appWindows` | `app`, `count` | Set native window count, primarily for preparation. |
There is no `appState` command. Views cannot be jumped to a pre-rendered success
diff --git a/DemoLab/ja/README.md b/DemoLab/docs/ja/README.md
similarity index 92%
rename from DemoLab/ja/README.md
rename to DemoLab/docs/ja/README.md
index 2879e96..8169807 100644
--- a/DemoLab/ja/README.md
+++ b/DemoLab/docs/ja/README.md
@@ -1,5 +1,5 @@
-[English](../README.md) · [한국어](../ko/README.md) · [日本語](README.md) · [简体中文](../zh-Hans/README.md) · [繁體中文](../zh-Hant/README.md)
+[English](../../README.md) · [한국어](../ko/README.md) · [日本語](README.md) · [简体中文](../zh-Hans/README.md) · [繁體中文](../zh-Hant/README.md)
@@ -10,11 +10,11 @@
## 公開用動画の規則
-[`publication.json`](../publication.json) が一覧と編集上限です。各場面を Web の区分に結び、時間とサイズを制限します。
+[`publication.json`](../../publication.json) が一覧と編集上限です。各場面を Web の区分に結び、時間とサイズを制限します。
紹介動画はデザイン、執筆、レビュー、借りる操作、自動化から、実際の画面構成変更まで進みます。各動画集では作業、プロファイルと画面、配置とフォーカス、借りる操作、表示方法、CLI・フック、ガイドを扱います。一覧は `publication.json` から生成します。
-主動画は**作業を変えても元の場所に戻れる**ことを示します。機能別は別の活動を扱い、同じ動画を繰り返しません。[範囲と検証の境界](../docs/ja/COVERAGE.md)を参照してください。
+主動画は**作業を変えても元の場所に戻れる**ことを示します。機能別は別の活動を扱い、同じ動画を繰り返しません。[範囲と検証の境界](COVERAGE.md)を参照してください。
## 録画 → 書き出し → 確認 → ローカル反映
@@ -85,6 +85,8 @@ GUEST_DIR=DemoLab/recordings/publish "$TOOL" vm-fetch-recordings DemoLab/recordi
元の MOV には、撮影したデスクトップ全体が含まれます。書き出しは 1920×1200、2 画面の場合は 1920×600 です。説明字幕は映像の下部、章名は左上、実際のキー入力は右上に重ねます。半透明の背景により、明るいアプリでも暗いアプリでも読みやすくなります。色はウェブサイトの配色を使うため、表示の変更に再撮影は必要ありません。
+サムネイルの時点は、`publication.json` の `posterSeconds` または `posterCaptionIndex` で指定します。機能が実際に反映された後のフレームを選んでください。サムネイルの URL には画像のハッシュを使うため、画像だけを差し替える場合に動画を再エンコードする必要はありません。
+
字幕の編集で元映像を再利用できるのは、撮影した操作、入力内容、検証条件、待機時間がすべて同じ場合だけです。書き出しツールは撮影時に固定したシーンのハッシュと操作を検証し、元のタイムライン上の説明文を差し替えます。検証資料には、編集前後のシーンとタイムラインを両方含めます。
各テイクには次のファイルがあります。
@@ -99,7 +101,7 @@ GUEST_DIR=DemoLab/recordings/publish "$TOOL" vm-fetch-recordings DemoLab/recordi
書き出しには再生ギャラリー、ポスター、検証用フレーム、元映像と出力のハッシュ、すべての付随ファイルが含まれます。自動検証だけでは実際の動作確認を代替できません。特に共有ウインドウのミラーリングとフォーカス先は目視確認が必要です。ウェブプレイヤーは標準コントロールと `preload="none"` を使い、手動で再生し、同時に再生する動画は一つです。各動画集にはサムネイル一覧、件数、前後のボタンがあります。各動画から関連する設定キーにも移動できます。矢印キー、Home/End、個別動画へのリンクは、一覧を別途展開せずに使えます。
-2 画面ではゲストに実際の仮想画面を接続し、別々に録画して最初の時刻で揃えます。[確認済み構成](../docs/ja/MULTI-DISPLAY.md)を参照してください。
+2 画面ではゲストに実際の仮想画面を接続し、別々に録画して最初の時刻で揃えます。[確認済み構成](MULTI-DISPLAY.md)を参照してください。
## 一つの場面を調整する
@@ -132,10 +134,10 @@ DEMOLAB_LOCALIZATION_DIR="$PWD/DemoLab/.build/DemoLab/Localization" \
swift test --package-path DemoLab
```
-- [場面の語彙](../docs/ja/SCENES.md)
-- [VM の準備](../docs/ja/VM-TART.md)
-- [権限](../docs/ja/PERMISSIONS.md)
-- [実際の複数画面録画](../docs/ja/MULTI-DISPLAY.md)
+- [場面の語彙](SCENES.md)
+- [VM の準備](VM-TART.md)
+- [権限](PERMISSIONS.md)
+- [実際の複数画面録画](MULTI-DISPLAY.md)
## 5 言語での制作
diff --git a/DemoLab/docs/ja/SCENES.md b/DemoLab/docs/ja/SCENES.md
index 53362f9..9d6b6d0 100644
--- a/DemoLab/docs/ja/SCENES.md
+++ b/DemoLab/docs/ja/SCENES.md
@@ -48,8 +48,8 @@
|`virtualDisplay`|`connected`|ゲストの実際の仮想画面ヘルパーを接続・切断します。|
|`configure`|`field`, `value`|ラボの TOML で許可された設定を原子的に変更します。|
|`clipboard`|`text`|クリップボードの全形式を保存・復元し、例文を渡します。|
-|`closeSettings`|—|編集後に設定ウインドウを閉じます。|
-|`prepareSettings`|—|コントロールを操作する前に、Tatami のネイティブ設定ウインドウのサイズと位置を整えます。|
+|`closeSettings`|フィールドなし|編集後に設定ウインドウを閉じます。|
+|`prepareSettings`|フィールドなし|コントロールを操作する前に、Tatami のネイティブ設定ウインドウのサイズと位置を整えます。|
|`appWindows`|`app`, `count`|主に準備時に、実際のウインドウ数を設定します。|
`appState` はありません。用意した成功画面へ飛ばず、通常の操作と `StoryRepository` で文章、レビュー、チェック、タスク、会話を同じ場所に保存します。`seed` でだけ初期化し、作業の切り替えでは戻しません。会話はネット接続のないローカル例です。
@@ -88,4 +88,4 @@
`take` の既定値は `--overlay off` で、テキストは編集可能な ASS と JSON のサイドカーファイルに記録します。書き出した映像では、画面下部に字幕、左上にチャプター、右上に実際のキー入力を重ねます。半透明の背景で読みやすくしていますが、アプリの内容に重なるため、重要なコントロールはその領域を避けて配置してください。`scene` はライブのリハーサルパネルを使い、最終映像とは表示方法が異なります。
-配置と時間・容量上限は [publication.json](../../publication.json)、録画・出力・確認のコマンドは [README.md](../../ja/README.md) を参照してください。
+配置と時間・容量上限は [publication.json](../../publication.json)、録画・出力・確認のコマンドは [README.md](README.md) を参照してください。
diff --git a/DemoLab/ko/README.md b/DemoLab/docs/ko/README.md
similarity index 93%
rename from DemoLab/ko/README.md
rename to DemoLab/docs/ko/README.md
index 41f2782..c91da93 100644
--- a/DemoLab/ko/README.md
+++ b/DemoLab/docs/ko/README.md
@@ -1,5 +1,5 @@
-[English](../README.md) · [한국어](README.md) · [日本語](../ja/README.md) · [简体中文](../zh-Hans/README.md) · [繁體中文](../zh-Hant/README.md)
+[English](../../README.md) · [한국어](README.md) · [日本語](../ja/README.md) · [简体中文](../zh-Hans/README.md) · [繁體中文](../zh-Hant/README.md)
@@ -10,11 +10,11 @@
## 공개용 영상 규칙
-[`publication.json`](../publication.json)에 영상 목록과 편집 예산을 정해요. 각 장면을 웹 섹션에 연결하고 길이와 파일 크기를 제한해요.
+[`publication.json`](../../publication.json)에 영상 목록과 편집 예산을 정해요. 각 장면을 웹 섹션에 연결하고 길이와 파일 크기를 제한해요.
종합 영상은 디자인 → 글쓰기 → 검토 → 빌려오기 → 자동화에 이어 실제 화면 구성 변경으로 끝나요. 기능별 모음은 작업 공간, 프로필·화면, 타일링·포커스, 빌려오기, 창 표시, CLI·훅, 가이드 설정을 다뤄요. 목록은 `publication.json`에서 만들므로 별도로 중복 관리하지 않아요.
-종합 영상은 **작업을 바꿔도 하던 자리를 유지한다**는 약속을 보여줘요. 기능별 영상은 다른 활동을 보여주며 종합 영상을 반복하지 않아요. 전체 범위는 [기능과 검증 범위](../docs/ko/COVERAGE.md)에서 확인해요.
+종합 영상은 **작업을 바꿔도 하던 자리를 유지한다**는 약속을 보여줘요. 기능별 영상은 다른 활동을 보여주며 종합 영상을 반복하지 않아요. 전체 범위는 [기능과 검증 범위](COVERAGE.md)에서 확인해요.
## 촬영 → 내보내기 → 검수 → 로컬 반영
@@ -85,6 +85,8 @@ GUEST_DIR=DemoLab/recordings/publish "$TOOL" vm-fetch-recordings DemoLab/recordi
원본 MOV에는 촬영한 데스크톱 전체가 담겨요. 내보낼 때는 1920×1200을 유지하고, 두 화면 영상은 1920×600으로 만들어요. 자막은 영상 아래쪽에, 장면 이름은 왼쪽 위에, 실제 키 입력은 오른쪽 위에 겹쳐 표시해요. 반투명 배경으로 밝거나 어두운 앱 위에서도 읽기 쉽게 했어요. 색상은 웹사이트 팔레트를 사용하므로 표현을 바꿀 때 다시 촬영할 필요는 없어요.
+썸네일 시점은 `publication.json`의 `posterSeconds` 또는 `posterCaptionIndex`로 정해요. 기능이 실제로 적용된 뒤의 장면을 선택해요. 썸네일 URL에는 이미지 해시를 사용하므로 이미지만 교체할 때 영상을 다시 인코딩할 필요가 없어요.
+
자막만 고칠 때는 촬영한 동작, 입력 내용, 검증 조건, 대기 시간이 모두 같아야 원본을 재사용할 수 있어요. 내보내기 도구는 촬영 당시 고정한 장면 파일의 해시와 동작을 검증한 뒤 원래 타임라인의 자막을 교체해요. 증거 자료에는 원본과 수정본의 장면 파일 및 타임라인을 모두 포함해요.
각 테이크에는 다음 파일이 있어요.
@@ -99,7 +101,7 @@ GUEST_DIR=DemoLab/recordings/publish "$TOOL" vm-fetch-recordings DemoLab/recordi
내보내기 묶음에는 재생 갤러리, 포스터, 추출한 검증 프레임, 원본·결과물 해시와 모든 부가 파일이 들어 있어요. 자동 검증이 실제 동작 확인을 대신하지는 않아요. 특히 공용 창 미러링과 포커스 대상은 화면으로 확인해야 해요. 웹 플레이어는 기본 컨트롤과 `preload="none"`를 사용하며, 직접 재생하고 한 번에 영상 하나만 재생돼요. 각 모음에는 썸네일 목록, 개수, 이전·다음 버튼이 있어요. 영상마다 관련 설정 키로 가는 링크도 제공해요. 방향키, Home/End, 개별 영상 링크는 별도 펼치기 없이 사용할 수 있어요.
-두 화면 촬영은 게스트에 실제 가상 디스플레이를 연결하고 각각 녹화한 뒤 첫 프레임 시각으로 맞춰요. [확인한 VM 구성](../docs/ko/MULTI-DISPLAY.md)을 참고하세요.
+두 화면 촬영은 게스트에 실제 가상 디스플레이를 연결하고 각각 녹화한 뒤 첫 프레임 시각으로 맞춰요. [확인한 VM 구성](MULTI-DISPLAY.md)을 참고하세요.
## 장면 하나 수정하기
@@ -132,10 +134,10 @@ DEMOLAB_LOCALIZATION_DIR="$PWD/DemoLab/.build/DemoLab/Localization" \
swift test --package-path DemoLab
```
-- [장면 문법](../docs/ko/SCENES.md)
-- [VM 설정](../docs/ko/VM-TART.md)
-- [권한](../docs/ko/PERMISSIONS.md)
-- [실제 두 화면 촬영](../docs/ko/MULTI-DISPLAY.md)
+- [장면 문법](SCENES.md)
+- [VM 설정](VM-TART.md)
+- [권한](PERMISSIONS.md)
+- [실제 두 화면 촬영](MULTI-DISPLAY.md)
## 다섯 언어 영상 제작
diff --git a/DemoLab/docs/ko/SCENES.md b/DemoLab/docs/ko/SCENES.md
index 2b8f913..4f9242e 100644
--- a/DemoLab/docs/ko/SCENES.md
+++ b/DemoLab/docs/ko/SCENES.md
@@ -48,8 +48,8 @@
|`virtualDisplay`|`connected`|게스트의 실제 가상 화면 도구를 연결하거나 해제해요.|
|`configure`|`field`, `value`|실험용 TOML의 허용한 설정을 원자적으로 바꿔요.|
|`clipboard`|`text`|클립보드의 모든 데이터 형식을 백업·복원하며 예시 텍스트를 제공해요.|
-|`closeSettings`|—|편집 뒤 네이티브 설정 창을 닫아요.|
-|`prepareSettings`|—|컨트롤을 조작하기 전에 Tatami 설정 창의 크기와 위치를 맞춰요.|
+|`closeSettings`|필드 없음|편집 뒤 네이티브 설정 창을 닫아요.|
+|`prepareSettings`|필드 없음|컨트롤을 조작하기 전에 Tatami 설정 창의 크기와 위치를 맞춰요.|
|`appWindows`|`app`, `count`|주로 준비 단계에서 실제 창 수를 정해요.|
`appState` 명령은 없어요. 미리 만든 성공 화면으로 이동하지 않고 일반 컨트롤과 `StoryRepository`로 저장한 작업을 공유해요. 문구·검토·검사·할 일·메시지는 같은 제어 폴더에 저장해요. `seed`만 이야기를 초기화하고 공간 전환은 초기화하지 않아요. 대화는 네트워크 없는 로컬 데모예요.
@@ -88,4 +88,4 @@
`take`의 기본값은 `--overlay off`이며, 텍스트는 편집 가능한 ASS와 JSON 부가 파일에 기록해요. 내보낸 영상은 화면 아래쪽에 자막을, 왼쪽 위에 챕터를, 오른쪽 위에 실제 키 입력을 겹쳐 보여줘요. 반투명 배경으로 가독성을 높이지만 앱 내용을 가릴 수 있으므로 중요한 컨트롤은 해당 영역을 피해서 배치해요. `scene`는 실시간 리허설 패널을 사용하며, 최종 영상의 표시 방식과는 달라요.
-배치 위치와 시간·용량 예산은 [publication.json](../../publication.json), 촬영·출력·검수 명령은 [README.md](../../ko/README.md)를 참고하세요.
+배치 위치와 시간·용량 예산은 [publication.json](../../publication.json), 촬영·출력·검수 명령은 [README.md](README.md)를 참고하세요.
diff --git a/DemoLab/zh-Hans/README.md b/DemoLab/docs/zh-Hans/README.md
similarity index 93%
rename from DemoLab/zh-Hans/README.md
rename to DemoLab/docs/zh-Hans/README.md
index d30332f..92142bb 100644
--- a/DemoLab/zh-Hans/README.md
+++ b/DemoLab/docs/zh-Hans/README.md
@@ -1,5 +1,5 @@
-[English](../README.md) · [한국어](../ko/README.md) · [日本語](../ja/README.md) · [简体中文](README.md) · [繁體中文](../zh-Hant/README.md)
+[English](../../README.md) · [한국어](../ko/README.md) · [日本語](../ja/README.md) · [简体中文](README.md) · [繁體中文](../zh-Hant/README.md)
@@ -10,11 +10,11 @@
## 发布约定
-[`publication.json`](../publication.json) 定义视频清单和编辑预算,映射网站区块并限制时长和文件大小。
+[`publication.json`](../../publication.json) 定义视频清单和编辑预算,映射网站区块并限制时长和文件大小。
主视频依次展示设计、写作、评审、借用、自动化,最后实际改变显示器拓扑。专题涵盖工作区、配置方案与显示器、平铺与焦点、借用、窗口模式、CLI/钩子和引导设置。清单由 `publication.json` 生成,无需维护重复列表。
-主视频传达**切换任务,保留工作位置**。专题展示不同活动,不重复主视频。完整范围见[覆盖与证据边界](../docs/zh-Hans/COVERAGE.md)。
+主视频传达**切换任务,保留工作位置**。专题展示不同活动,不重复主视频。完整范围见[覆盖与证据边界](COVERAGE.md)。
## 录制 → 导出 → 检查 → 本地安装
@@ -85,6 +85,8 @@ GUEST_DIR=DemoLab/recordings/publish "$TOOL" vm-fetch-recordings DemoLab/recordi
原始 MOV 包含完整的桌面画面。导出保留 1920×1200 分辨率,双屏视频为 1920×600。说明字幕叠加在画面下方,章节名称位于左上角,实际按键位于右上角。半透明背景确保文字在深浅色应用上都清晰可读。颜色来自网站配色,调整呈现方式无需重新录制。
+缩略图时间由 `publication.json` 中的 `posterSeconds` 或 `posterCaptionIndex` 指定。请选择功能实际生效后的画面。缩略图 URL 使用图片哈希,因此仅替换图片时无需重新编码视频。
+
仅修改字幕时,只有录制的操作、输入内容、断言和等待时间均未改变,才可复用原始视频。导出工具会验证录制时冻结的场景哈希并比较操作,然后替换原时间线上的说明文字。证据资料同时保留原始和编辑后的场景及时间线。
每次录制包含:
@@ -99,7 +101,7 @@ GUEST_DIR=DemoLab/recordings/publish "$TOOL" vm-fetch-recordings DemoLab/recordi
导出包包含播放图库、海报、抽样验证帧、原始与输出文件的哈希及所有附属文件。自动验收不能替代观看实际操作,尤其是共享窗口镜像和焦点目标仍需目视确认。网页播放器使用原生控件和 `preload="none"`,由用户主动播放,且一次只播放一个视频。每个视频集提供缩略图列表、数量和前后按钮。每个视频还链接到相关配置键。方向键、Home/End 和单独视频链接无需展开额外面板即可使用。
-双屏录制连接实际的虚拟显示器,分别捕获并按首帧时间对齐。见[已验证 VM 配置](../docs/zh-Hans/MULTI-DISPLAY.md)。
+双屏录制连接实际的虚拟显示器,分别捕获并按首帧时间对齐。见[已验证 VM 配置](MULTI-DISPLAY.md)。
## 调整单个场景
@@ -132,10 +134,10 @@ DEMOLAB_LOCALIZATION_DIR="$PWD/DemoLab/.build/DemoLab/Localization" \
swift test --package-path DemoLab
```
-- [场景语法](../docs/zh-Hans/SCENES.md)
-- [VM 设置](../docs/zh-Hans/VM-TART.md)
-- [权限](../docs/zh-Hans/PERMISSIONS.md)
-- [实际多显示器录制](../docs/zh-Hans/MULTI-DISPLAY.md)
+- [场景语法](SCENES.md)
+- [VM 设置](VM-TART.md)
+- [权限](PERMISSIONS.md)
+- [实际多显示器录制](MULTI-DISPLAY.md)
## 五语言制作
diff --git a/DemoLab/docs/zh-Hans/SCENES.md b/DemoLab/docs/zh-Hans/SCENES.md
index 2bf3adc..e26aac1 100644
--- a/DemoLab/docs/zh-Hans/SCENES.md
+++ b/DemoLab/docs/zh-Hans/SCENES.md
@@ -48,8 +48,8 @@
|`virtualDisplay`|`connected`|连接或断开实际虚拟显示器工具。|
|`configure`|`field`, `value`|原子修改实验 TOML 中允许的实时设置。|
|`clipboard`|`text`|提供本地示例文本,同时保留并恢复所有剪贴板类型。|
-|`closeSettings`|—|编辑后关闭原生设置窗口。|
-|`prepareSettings`|—|操作控件前,调整 Tatami 原生设置窗口的大小和位置。|
+|`closeSettings`|无字段|编辑后关闭原生设置窗口。|
+|`prepareSettings`|无字段|操作控件前,调整 Tatami 原生设置窗口的大小和位置。|
|`appWindows`|`app`, `count`|设置原生窗口数量,主要用于准备。|
没有 `appState` 命令,视图不能跳到预制成功状态。它们使用普通控件,通过 `StoryRepository` 共享保存的文案、评审、检查、任务和消息。`seed` 重置故事,切换工作区不会。聊天是无网络传输的本地演示。
@@ -88,4 +88,4 @@
`take` 默认为 `--overlay off`,文字保存在可编辑的 ASS 和 JSON 附属文件中。导出的视频会在画面下方叠加字幕、左上角显示章节、右上角显示实际按键。半透明背景提高了可读性,但仍可能遮挡应用内容,因此重要控件应避开这些区域。`scene` 使用实时排练面板,其呈现方式与最终视频不同。
-位置和时间、容量预算见 [publication.json](../../publication.json);录制、导出和检查命令见 [README.md](../../zh-Hans/README.md)。
+位置和时间、容量预算见 [publication.json](../../publication.json);录制、导出和检查命令见 [README.md](README.md)。
diff --git a/DemoLab/zh-Hant/README.md b/DemoLab/docs/zh-Hant/README.md
similarity index 93%
rename from DemoLab/zh-Hant/README.md
rename to DemoLab/docs/zh-Hant/README.md
index 7a17f5e..1dcffd1 100644
--- a/DemoLab/zh-Hant/README.md
+++ b/DemoLab/docs/zh-Hant/README.md
@@ -1,5 +1,5 @@
-[English](../README.md) · [한국어](../ko/README.md) · [日本語](../ja/README.md) · [简体中文](../zh-Hans/README.md) · [繁體中文](README.md)
+[English](../../README.md) · [한국어](../ko/README.md) · [日本語](../ja/README.md) · [简体中文](../zh-Hans/README.md) · [繁體中文](README.md)
@@ -10,11 +10,11 @@
## 發布約定
-[`publication.json`](../publication.json) 定義影片清單與編輯預算,對應網站區塊並限制時間和檔案大小。
+[`publication.json`](../../publication.json) 定義影片清單與編輯預算,對應網站區塊並限制時間和檔案大小。
主影片依序展示設計、撰寫、審閱、借用、自動化,最後實際改變顯示器拓樸。專題涵蓋工作空間、設定組合與顯示器、並排與焦點、借用、視窗模式、CLI/Hook 和引導設定。清單由 `publication.json` 產生,不必維護重複清單。
-主影片傳達**切換工作,保留工作位置**。專題展示不同活動,不重複主影片。完整範圍見[涵蓋與證據界線](../docs/zh-Hant/COVERAGE.md)。
+主影片傳達**切換工作,保留工作位置**。專題展示不同活動,不重複主影片。完整範圍見[涵蓋與證據界線](COVERAGE.md)。
## 錄製 → 輸出 → 檢查 → 本機安裝
@@ -85,6 +85,8 @@ GUEST_DIR=DemoLab/recordings/publish "$TOOL" vm-fetch-recordings DemoLab/recordi
原始 MOV 包含完整的桌面畫面。匯出保留 1920×1200 解析度,雙螢幕影片為 1920×600。說明字幕疊加在畫面下方,章節名稱位於左上角,實際按鍵位於右上角。半透明背景確保文字在深淺色 App 上都清楚可讀。顏色來自網站配色,調整呈現方式不必重新錄製。
+縮圖時間由 `publication.json` 中的 `posterSeconds` 或 `posterCaptionIndex` 指定。請選擇功能實際生效後的畫面。縮圖 URL 使用圖片雜湊,因此只替換圖片時不需要重新編碼影片。
+
只修改字幕時,必須確保錄製的操作、輸入內容、驗證條件及等待時間皆未變更,才能重用原始影片。匯出工具會驗證錄製時固定的場景雜湊並比較操作,再替換原時間軸上的說明文字。驗證資料同時保留原始及編輯後的場景與時間軸。
每次錄製包含:
@@ -99,7 +101,7 @@ GUEST_DIR=DemoLab/recordings/publish "$TOOL" vm-fetch-recordings DemoLab/recordi
匯出套件包含播放圖庫、海報、抽樣驗證畫格、原始與輸出檔案的雜湊,以及所有附屬檔案。自動驗收不能取代觀看實際操作,尤其是共用視窗鏡像及焦點目標仍須目視確認。網頁播放器使用原生控制項和 `preload="none"`,由使用者主動播放,且一次只播放一部影片。每個影片集提供縮圖清單、數量及前後按鈕。每部影片也連結至相關設定鍵。方向鍵、Home/End 及個別影片連結,不必展開額外面板即可使用。
-雙螢幕錄製連接實際的虛擬顯示器,分別擷取並依首影格時間對齊。見[已驗證 VM 設定](../docs/zh-Hant/MULTI-DISPLAY.md)。
+雙螢幕錄製連接實際的虛擬顯示器,分別擷取並依首影格時間對齊。見[已驗證 VM 設定](MULTI-DISPLAY.md)。
## 調整單一場景
@@ -132,10 +134,10 @@ DEMOLAB_LOCALIZATION_DIR="$PWD/DemoLab/.build/DemoLab/Localization" \
swift test --package-path DemoLab
```
-- [場景語法](../docs/zh-Hant/SCENES.md)
-- [VM 設定](../docs/zh-Hant/VM-TART.md)
-- [權限](../docs/zh-Hant/PERMISSIONS.md)
-- [實際多顯示器錄製](../docs/zh-Hant/MULTI-DISPLAY.md)
+- [場景語法](SCENES.md)
+- [VM 設定](VM-TART.md)
+- [權限](PERMISSIONS.md)
+- [實際多顯示器錄製](MULTI-DISPLAY.md)
## 五語言製作
diff --git a/DemoLab/docs/zh-Hant/SCENES.md b/DemoLab/docs/zh-Hant/SCENES.md
index 9aaf5e2..5fdb05b 100644
--- a/DemoLab/docs/zh-Hant/SCENES.md
+++ b/DemoLab/docs/zh-Hant/SCENES.md
@@ -48,8 +48,8 @@
|`virtualDisplay`|`connected`|連接或中斷實際虛擬顯示器工具。|
|`configure`|`field`, `value`|不可分割地修改實驗 TOML 中允許的即時設定。|
|`clipboard`|`text`|提供本機範例文字,同時保留並還原所有剪貼簿類型。|
-|`closeSettings`|—|編輯後關閉原生設定視窗。|
-|`prepareSettings`|—|操作控制項前,調整 Tatami 原生設定視窗的大小與位置。|
+|`closeSettings`|無欄位|編輯後關閉原生設定視窗。|
+|`prepareSettings`|無欄位|操作控制項前,調整 Tatami 原生設定視窗的大小與位置。|
|`appWindows`|`app`, `count`|設定原生視窗數量,主要用於準備。|
沒有 `appState` 指令,視圖不能跳到預製成功狀態。它們使用一般控制項,透過 `StoryRepository` 共用儲存的文案、審閱、檢查、待辦與訊息。`seed` 重設故事,切換工作空間不會。聊天是沒有網路傳輸的本機示範。
@@ -88,4 +88,4 @@
`take` 預設為 `--overlay off`,文字會儲存在可編輯的 ASS 與 JSON 附屬檔案中。匯出的影片會在畫面下方疊加字幕、左上角顯示章節、右上角顯示實際按鍵。半透明背景提高了可讀性,但仍可能遮住 App 內容,因此重要控制項應避開這些區域。`scene` 使用即時排練面板,呈現方式與最終影片不同。
-位置與時間、容量預算見 [publication.json](../../publication.json);錄製、輸出與檢查指令見 [README.md](../../zh-Hant/README.md)。
+位置與時間、容量預算見 [publication.json](../../publication.json);錄製、輸出與檢查指令見 [README.md](README.md)。
diff --git a/DemoLab/publication.json b/DemoLab/publication.json
index 20a43c2..1d5d304 100644
--- a/DemoLab/publication.json
+++ b/DemoLab/publication.json
@@ -273,7 +273,8 @@
"key": "settings.switching.borrowDefaultEdge",
"anchor": "settingsswitching"
}
- ]
+ ],
+ "posterSeconds": 5
},
{
"scene": "scratchpad",
diff --git a/Localization/Docs.json b/Localization/Docs.json
index 90222d5..f7b8906 100644
--- a/Localization/Docs.json
+++ b/Localization/Docs.json
@@ -34,13 +34,6 @@
"zh-Hans": "[]({1})",
"zh-Hant": "[]({1})"
},
- "f3500adbf7d3a1b8": {
- "en": "**[Watch the complete workflow]({0})** — design, write, review, borrow a follow-up, automate a focus session, and adapt to a second display. Real Tatami window management; demo apps and sample content. The displayed shortcuts are this demo's configured bindings.",
- "ko": "**[전체 작업 흐름 보기]({0})**. 디자인, 글쓰기, 검토, 다음 할 일 빌려오기, 집중 환경 자동화, 두 번째 화면 연결까지 이어져요. 실제 Tatami로 창을 관리하며 앱과 내용은 데모용이에요. 표시한 단축키는 이 데모에서 설정한 키예요.",
- "ja": "**[一連の作業を見る]({0})**。デザイン、執筆、レビュー、次の作業を借りる操作、集中環境の自動化、2 台目の画面への対応まで紹介します。実際の Tatami を使い、アプリと内容はデモ用です。表示するキーはこのデモの設定です。",
- "zh-Hans": "**[观看完整工作流程]({0})**:设计、写作、评审、借用待办事项、自动准备专注环境,再连接第二个显示器。窗口由实际的 Tatami 管理,应用和内容为演示素材。快捷键采用本次演示的配置。",
- "zh-Hant": "**[觀看完整工作流程]({0})**:設計、撰寫、審閱、借用待辦事項、自動準備專注環境,再連接第二部顯示器。視窗由實際的 Tatami 管理,App 和內容為示範素材。快速鍵採用本次示範的設定。"
- },
"5088d504cc27e8ca": {
"en": "Settings and Guided Setup screenshots",
"ko": "설정과 시작 안내 스크린샷",
@@ -90,13 +83,6 @@
"zh-Hans": "主要功能",
"zh-Hant": "主要功能"
},
- "272f97cb2b06613c": {
- "en": "[]({1})",
- "ko": "[]({1})",
- "ja": "[]({1})",
- "zh-Hans": "[]({1})",
- "zh-Hant": "[]({1})"
- },
"f06c5df8b334f0ad": {
"en": "**Virtual workspaces:** Group apps with per-workspace assignments.",
"ko": "**가상 작업 공간:** 작업 공간마다 필요한 앱을 배정해서 모아요.",
@@ -132,13 +118,6 @@
"zh-Hans": "**可选切换行为:** 启用循环、跳过空工作区或跟随应用焦点。",
"zh-Hant": "**可選切換行為:** 啟用循環、略過空工作空間或跟隨 App 焦點。"
},
- "804ab2a6ffa55907": {
- "en": "**[Auto-open demo]({0}):** Launch assigned apps when a workspace activates and reopen them on re-entry if their window was closed.",
- "ko": "**[자동 열기 데모]({0}):** 작업 공간에 들어가면 배정한 앱이 열려요. 창을 닫아도 다시 들어가면 열어줘요.",
- "ja": "**[自動で開くデモ]({0}):** 作業を開くと割り当てたアプリが起動し、閉じたウインドウも入り直すと開きます。",
- "zh-Hans": "**[自动打开演示]({0}):** 激活工作区时启动分配的应用,重新进入时打开之前关闭的窗口。",
- "zh-Hant": "**[自動開啟示範]({0}):** 啟用工作空間時啟動指派的 App,重新進入時開啟先前關閉的視窗。"
- },
"a2a4c7eef067a833": {
"en": "**Per-display workspaces:** Pin a workspace to a display or have dynamic workspaces open under the mouse. Each display keeps its own active and recent workspace across relaunches, while next/previous and recent navigation can independently stay local or span every display.",
"ko": "**화면별 작업 공간:** 특정 화면에 고정하거나 마우스가 있는 화면에 열 수 있어요. 각 화면은 재실행 후에도 활성·최근 작업 공간을 기억해요. 다음·이전·최근 이동의 범위는 각각 현재 화면이나 전체 화면으로 정할 수 있어요.",
@@ -174,13 +153,6 @@
"zh-Hans": "窗口平铺(BSP)",
"zh-Hant": "視窗並排(BSP)"
},
- "790aa2182df007c9": {
- "en": "[]({1})",
- "ko": "[]({1})",
- "ja": "[]({1})",
- "zh-Hans": "[]({1})",
- "zh-Hant": "[]({1})"
- },
"25c0497cea23b369": {
"en": "**Interactive window switching:** Tap the window-switch shortcut for an immediate switch, or hold its modifier for a compact app / window switcher. It stays scoped to the display under the pointer, can include Shared Apps, shows each window's current state, and lets you choose the exact target with the keyboard or pointer.",
"ko": "**창 선택:** 전환 단축키를 짧게 누르면 바로 전환하고, 보조키를 길게 누르면 앱·창 목록이 나타나요. 포인터가 있는 화면 안에서 동작하고 공용 앱도 포함할 수 있어요. 각 창의 상태를 보며 키보드나 마우스로 정확히 고를 수 있어요.",
@@ -230,13 +202,6 @@
"zh-Hans": "配置方案",
"zh-Hant": "設定組合"
},
- "049ce189ea067ef4": {
- "en": "[Watch the profile and two-display collection]({0}).",
- "ko": "[프로필과 두 화면 영상 모음 보기]({0}).",
- "ja": "[プロファイルと 2 画面の動画を見る]({0})。",
- "zh-Hans": "[观看配置方案与双屏演示]({0})。",
- "zh-Hant": "[觀看設定組合與雙螢幕示範]({0})。"
- },
"046fb607b89e0122": {
"en": "**Independent profiles:** Group workspaces and switch the whole set at once. Each profile keeps its own workspaces, app assignments, and shortcuts.",
"ko": "**독립 프로필:** 작업 공간을 묶어 전체 구성을 한 번에 바꿔요. 프로필마다 작업 공간·앱 배정·단축키를 따로 저장해요.",
@@ -279,13 +244,6 @@
"zh-Hans": "借用:组合两个工作区",
"zh-Hant": "借用:組合兩個工作空間"
},
- "1c8ba14ba65d9ee2": {
- "en": "[]({1})",
- "ko": "[]({1})",
- "ja": "[]({1})",
- "zh-Hans": "[]({1})",
- "zh-Hant": "[]({1})"
- },
"81200624043ee970": {
"en": "**Side-by-side composition:** Pull another workspace beside the current one, dock it to any screen edge, and tile both blocks independently. Windows cannot cross the boundary.",
"ko": "**나란히 사용:** 다른 작업 공간을 화면 가장자리로 빌려와요. 두 영역은 따로 타일링되며 창은 경계를 넘지 않아요.",
@@ -335,13 +293,6 @@
"zh-Hans": "置顶",
"zh-Hant": "置頂"
},
- "2ba6ee5674637a65": {
- "en": "[Watch: one shared monitor above different workspaces]({0}).",
- "ko": "[여러 작업 공간 위에서 같은 상태 창 보기]({0}).",
- "ja": "[作業が変わっても同じ状態ウインドウを見る]({0})。",
- "zh-Hans": "[观看跨工作区的共享状态窗口]({0})。",
- "zh-Hant": "[觀看跨工作空間的共用狀態視窗]({0})。"
- },
"bb02b50349a30601": {
"en": "**Per-workspace or shared:** Keep an app on top in one workspace or add it to Shared Apps to keep it on top everywhere.",
"ko": "**작업 공간별 또는 공용:** 한 공간에서만 앱을 항상 위에 두거나 공용 앱으로 추가해 어디서나 볼 수 있어요.",
@@ -377,13 +328,6 @@
"zh-Hans": "焦点与指针",
"zh-Hant": "焦點與游標"
},
- "75b3930ec022a97b": {
- "en": "[Watch focus follow the keyboard and pointer]({0}).",
- "ko": "[키보드와 포인터에 따른 포커스 이동 보기]({0}).",
- "ja": "[キーとポインタに合わせたフォーカス移動を見る]({0})。",
- "zh-Hans": "[观看焦点跟随键盘和指针]({0})。",
- "zh-Hant": "[觀看焦點跟隨鍵盤和游標]({0})。"
- },
"385afb896896c51a": {
"en": "**Two explicit focus models:** Focus-follows-mouse gives the window under the pointer keyboard focus. Mouse-follows-focus moves the pointer after Tatami changes windows, including switching to Always on Top, Shared Always on Top, or Leave As Is windows.",
"ko": "**두 가지 포커스 방식:** 마우스 따라가기는 포인터 아래 창에 키보드 포커스를 줘요. 포커스 따라가기는 Tatami가 창을 바꿀 때 포인터를 옮겨요. 항상 위·공용 항상 위·그대로 두기 창에서도 동작해요.",
@@ -412,13 +356,6 @@
"zh-Hans": "界面与配置",
"zh-Hant": "介面與設定"
},
- "809bd7992c5d8416": {
- "en": "[Watch real CLI commands, hooks and live configuration]({0}).",
- "ko": "[실제 CLI·훅·설정 바로 적용 보기]({0}).",
- "ja": "[実際の CLI、フック、設定の即時反映を見る]({0})。",
- "zh-Hans": "[观看实际 CLI、钩子和实时配置]({0})。",
- "zh-Hant": "[觀看實際 CLI、掛鉤與即時設定]({0})。"
- },
"bd123cd78d805214": {
"en": "**Five interface languages:** Use Tatami in English, Korean, Japanese, Simplified Chinese, or Traditional Chinese, following your macOS app-language preference.",
"ko": "**다섯 언어:** macOS 앱 언어 설정에 따라 영어·한국어·일본어·중국어 간체·대만 번체로 쓸 수 있어요.",
@@ -496,13 +433,6 @@
"zh-Hans": "设置向导",
"zh-Hant": "設定導覽"
},
- "78be28a73719fae3": {
- "en": "[Watch shortcut practice and proposal review]({0}).",
- "ko": "[단축키 연습과 제안 검토 보기]({0}).",
- "ja": "[ショートカットの練習と提案の確認を見る]({0})。",
- "zh-Hans": "[观看快捷键练习和建议检查]({0})。",
- "zh-Hant": "[觀看快速鍵練習與建議檢查]({0})。"
- },
"4a814980608feca1": {
"en": "**Learn by doing:** First launch walks through Workspaces, switching and gestures, BSP tiling, Borrow and scratchpads, Always on Top / Leave As Is, MFF / FFM, and app / window switching in a safe virtual display.",
"ko": "**직접 배우기:** 처음 실행하면 안전한 가상 화면에서 작업 공간, 전환·제스처, BSP 타일링, 빌려오기·임시 공간, 항상 위·그대로 두기, 포커스·포인터 따라가기, 앱·창 전환을 차례로 익혀요.",
@@ -5152,5 +5082,96 @@
"ja": "開発用の自動化は、{0} で固定された別のパッケージ群を使います。[開発ツールの依存関係の表示]({1})は原文でご確認ください。",
"zh-Hans": "开发自动化使用另一组依赖包,其版本固定在 {0} 中。请阅读原文形式的[开发工具依赖声明]({1})。",
"zh-Hant": "開發自動化使用另一組套件,其版本固定在 {0} 中。請閱讀原文形式的[開發工具相依套件聲明]({1})。"
+ },
+ "55eeaa68d1c11f4d": {
+ "en": "**[Watch the complete workflow]({0})**: design, write, review, borrow a follow-up, automate a focus session, and adapt to a second display. Real Tatami window management; demo apps and sample content. The displayed shortcuts are this demo's configured bindings.",
+ "ko": "**[전체 작업 흐름 보기]({0})**. 디자인, 글쓰기, 검토, 다음 할 일 빌려오기, 집중 환경 자동화, 두 번째 화면 연결까지 이어져요. 실제 Tatami로 창을 관리하며 앱과 내용은 데모용이에요. 표시한 단축키는 이 데모에서 설정한 키예요.",
+ "ja": "**[一連の作業を見る]({0})**。デザイン、執筆、レビュー、次の作業を借りる操作、集中環境の自動化、2 台目の画面への対応まで紹介します。実際の Tatami を使い、アプリと内容はデモ用です。表示するキーはこのデモの設定です。",
+ "zh-Hans": "**[观看完整工作流程]({0})**:设计、写作、评审、借用待办事项、自动准备专注环境,再连接第二个显示器。窗口由实际的 Tatami 管理,应用和内容为演示素材。快捷键采用本次演示的配置。",
+ "zh-Hant": "**[觀看完整工作流程]({0})**:設計、撰寫、審閱、借用待辦事項、自動準備專注環境,再連接第二部顯示器。視窗由實際的 Tatami 管理,App 和內容為示範素材。快速鍵採用本次示範的設定。"
+ },
+ "4162bdb9d01f2674": {
+ "en": "No fields",
+ "ko": "필드 없음",
+ "ja": "フィールドなし",
+ "zh-Hans": "无字段",
+ "zh-Hant": "無欄位"
+ },
+ "66020df68980e3d9": {
+ "en": "Move between tasks",
+ "ko": "작업 사이를 오가기",
+ "ja": "作業を切り替える",
+ "zh-Hans": "在任务之间切换",
+ "zh-Hant": "在工作之間切換"
+ },
+ "e2b559681c8ba5ad": {
+ "en": "Let new windows find their place",
+ "ko": "새 창이 제자리를 찾도록 하기",
+ "ja": "新しいウインドウが自然に収まる",
+ "zh-Hans": "让新窗口找到位置",
+ "zh-Hant": "讓新視窗找到位置"
+ },
+ "0ed46e81f88e5f75": {
+ "en": "Switch the complete setup",
+ "ko": "전체 구성 전환하기",
+ "ja": "作業環境ごと切り替える",
+ "zh-Hans": "切换整套配置",
+ "zh-Hant": "切換整套設定"
+ },
+ "32259433af68fde7": {
+ "en": "Bring a conversation alongside",
+ "ko": "대화를 옆으로 가져오기",
+ "ja": "会話を横に呼び出す",
+ "zh-Hans": "把对话放到旁边",
+ "zh-Hant": "把對話放到旁邊"
+ },
+ "5e82e96ee8c8a2ed": {
+ "en": "One status window across tasks",
+ "ko": "여러 작업에서 같은 상태 창 보기",
+ "ja": "作業が変わっても同じ状態ウインドウを使う",
+ "zh-Hans": "跨任务使用同一个状态窗口",
+ "zh-Hant": "跨工作使用同一個狀態視窗"
+ },
+ "495cfb550d5d1b8d": {
+ "en": "Focus follows your intent",
+ "ko": "내 의도에 따라 포커스 이동하기",
+ "ja": "意図に合わせてフォーカスを移す",
+ "zh-Hans": "让焦点跟随你的意图",
+ "zh-Hant": "讓焦點跟隨你的意圖"
+ },
+ "27faaab644291827": {
+ "en": "Build a focus session with the CLI",
+ "ko": "CLI로 집중할 환경 준비하기",
+ "ja": "CLI で集中できる環境を用意する",
+ "zh-Hans": "用 CLI 准备专注环境",
+ "zh-Hant": "用 CLI 準備專注環境"
+ },
+ "dce217589e5c6b16": {
+ "en": "Learn by doing",
+ "ko": "직접 사용하며 익히기",
+ "ja": "使いながら覚える",
+ "zh-Hans": "边用边学",
+ "zh-Hant": "邊用邊學"
+ },
+ "dbae3e9ba44b12b1": {
+ "en": "Watch video",
+ "ko": "영상 보기",
+ "ja": "動画を見る",
+ "zh-Hans": "观看视频",
+ "zh-Hant": "觀看影片"
+ },
+ "1a48b68d5c98b65b": {
+ "en": "**Auto-open:** Launch assigned apps when a workspace activates and reopen them on re-entry if their window was closed.",
+ "ko": "**자동 열기:** 작업 공간으로 전환하면 지정한 앱을 실행하고, 창을 닫았더라도 다시 들어올 때 열어요.",
+ "ja": "**自動起動:** ワークスペースを開くと割り当てたアプリを起動し、ウインドウを閉じた場合も次に開くときに再び表示します。",
+ "zh-Hans": "**自动打开:** 激活工作区时启动指定应用;如果关闭了窗口,再次进入时会重新打开。",
+ "zh-Hant": "**自動開啟:** 啟用工作空間時啟動指定的 App;如果關閉了視窗,再次進入時會重新開啟。"
+ },
+ "b71ef439a9954775": {
+ "en": "Poster frames use {0} or {1} from {2}. Choose a frame after the feature has taken effect. Poster URLs use the image hash so replacing a still does not require re-encoding its video.",
+ "ko": "썸네일 시점은 {2}의 {0} 또는 {1}로 정해요. 기능이 실제로 적용된 뒤의 장면을 선택해요. 썸네일 URL에는 이미지 해시를 사용하므로 이미지만 교체할 때 영상을 다시 인코딩할 필요가 없어요.",
+ "ja": "サムネイルの時点は、{2} の {0} または {1} で指定します。機能が実際に反映された後のフレームを選んでください。サムネイルの URL には画像のハッシュを使うため、画像だけを差し替える場合に動画を再エンコードする必要はありません。",
+ "zh-Hans": "缩略图时间由 {2} 中的 {0} 或 {1} 指定。请选择功能实际生效后的画面。缩略图 URL 使用图片哈希,因此仅替换图片时无需重新编码视频。",
+ "zh-Hant": "縮圖時間由 {2} 中的 {0} 或 {1} 指定。請選擇功能實際生效後的畫面。縮圖 URL 使用圖片雜湊,因此只替換圖片時不需要重新編碼影片。"
}
}
diff --git a/NOTICE.md b/NOTICE.md
index 35595e0..57e7b9c 100644
--- a/NOTICE.md
+++ b/NOTICE.md
@@ -1,5 +1,5 @@
-[English](NOTICE.md) · [한국어](NOTICE.ko.md) · [日本語](NOTICE.ja.md) · [简体中文](NOTICE.zh-Hans.md) · [繁體中文](NOTICE.zh-Hant.md)
+[English](NOTICE.md) · [한국어](docs/ko/NOTICE.md) · [日本語](docs/ja/NOTICE.md) · [简体中文](docs/zh-Hans/NOTICE.md) · [繁體中文](docs/zh-Hant/NOTICE.md)
# Notice
diff --git a/README.md b/README.md
index 0f01d3a..7e047cb 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
-[English](README.md) · [한국어](README.ko.md) · [日本語](README.ja.md) · [简体中文](README.zh-Hans.md) · [繁體中文](README.zh-Hant.md)
+[English](README.md) · [한국어](docs/ko/README.md) · [日本語](docs/ja/README.md) · [简体中文](docs/zh-Hans/README.md) · [繁體中文](docs/zh-Hant/README.md)
# Tatami
@@ -20,7 +20,7 @@ scripting required.
[](https://pangmo5.dev/Tatami#demo)
-**[Watch the complete workflow](https://pangmo5.dev/Tatami#demo)** — design, write,
+**[Watch the complete workflow](https://pangmo5.dev/Tatami#demo)**: design, write,
review, borrow a follow-up, automate a focus session, and adapt to a second display.
Real Tatami window management; demo apps and sample content. The displayed
shortcuts are this demo's configured bindings.
@@ -38,29 +38,30 @@ shortcuts are this demo's configured bindings.
Borrow
Captured on an earlier version. Some labels have changed since these screenshots.
- **Virtual workspaces:** Group apps with per-workspace assignments.
- **Flexible switching:** Use a hotkey, trackpad gesture, or recent-workspace action.
- **Configurable gestures:** Bind every direction of a three- or four-finger swipe to any shortcut action, including profile- and workspace-specific commands.
- **One key per workspace:** Hold the switch, assign, or borrow modifier with a **key equivalent**. The same keys also drive recent, next, and previous targets, while any action can take an explicit override.
- **Optional switching behaviors:** Enable loop-around, skip-empty, or follow-app-focus.
-- **[Auto-open demo](https://pangmo5.dev/Tatami#demo-autoopen):** Launch assigned apps when a workspace activates and reopen them on re-entry if their window was closed.
+- **Auto-open:** Launch assigned apps when a workspace activates and reopen them on re-entry if their window was closed.
- **Per-display workspaces:** Pin a workspace to a display or have dynamic workspaces open under the mouse. Each display keeps its own active and recent workspace across relaunches, while next/previous and recent navigation can independently stay local or span every display.
- **Workspace chains:** Link an ordered set of workspaces inside a profile. Switching to any member restores available companions in chain priority, honoring connected display pins and Chain Dynamic placement while focus stays with the workspace you chose.
- **Cross-display control:** Jump focus between displays or move the focused app to another workspace.
- **Shared apps:** Add apps that should join every workspace.
+
- **Automatic BSP layout:** Insert new windows beside the current insertion target or focused tile. Use the shallowest tile when neither is available.
- **Keyboard operations:** With the recommended bindings, use `ctrl + alt` with `h`, `j`, `k`, or `l` to focus, arrow keys to swap, and `=` or `-` to grow or shrink the focused tile.
@@ -71,9 +72,11 @@ Captured on an earlier version. Some labels have changed since these screenshots
- **Persistent layouts:** Keep each workspace's tree and ratios across workspace switches, relaunches, and system sleep.
- **Configurable spacing:** Set inner and outer gaps.
+
- **Independent profiles:** Group workspaces and switch the whole set at once. Each profile keeps its own workspaces, app assignments, and shortcuts.
- **Fast profile switching:** Switch by hotkey or from the menu bar. Every display re-tiles for the new profile, and Tatami returns to the right profile after relaunch.
@@ -81,9 +84,11 @@ Captured on an earlier version. Some labels have changed since these screenshots
- **Profile identity:** Give each profile an SF Symbol shown in the sidebar, menu bar, and profile-switch feedback.
- **Reuse an existing setup:** **Copy from** and **Duplicate** share one preview where you keep or skip each workspace, app, setting, and saved layout before anything changes.
+
- **Side-by-side composition:** Pull another workspace beside the current one, dock it to any screen edge, and tile both blocks independently. Windows cannot cross the boundary.
- **Live and bidirectional:** The borrowed block is the real workspace, so edits persist back to it.
@@ -92,26 +97,32 @@ Captured on an earlier version. Some labels have changed since these screenshots
- **Visible ownership:** Borrowed windows show the borrowed workspace's icon.
- **Scratchpads:** Borrow-only workspaces stay out of regular switching, never activate alone, and auto-open their apps when summoned.
+
- **Per-workspace or shared:** Keep an app on top in one workspace or add it to Shared Apps to keep it on top everywhere.
- **No SIP changes:** Tatami uses always-on-top ScreenCaptureKit mirrors, then hands you the real window when you interact with it.
- **Predictable stacking:** Multiple always-on-top windows stack by focus recency. This requires Screen Recording permission.
- **Leave As Is:** Keep an app as a workspace member for auto-open, focus, focus-follows-mouse, and window switching while preserving its current position and size. This mode needs no mirroring or Screen Recording.
+
- **Two explicit focus models:** Focus-follows-mouse gives the window under the pointer keyboard focus. Mouse-follows-focus moves the pointer after Tatami changes windows, including switching to Always on Top, Shared Always on Top, or Leave As Is windows.
- **Close-window refocus:** Return to the most recently used remaining window.
- **Cursor control:** Optionally hide the cursor during a workspace switch.
+
- **Five interface languages:** Use Tatami in English, Korean, Japanese, Simplified Chinese, or Traditional Chinese, following your macOS app-language preference.
- **Customizable menu bar:** Show the active workspace icon or name and, when relevant, the active profile icon or name.
@@ -124,9 +135,11 @@ Captured on an earlier version. Some labels have changed since these screenshots
- **Scriptable CLI:** Use domain commands such as `tatami workspace activate
- **Learn by doing:** First launch walks through Workspaces, switching and gestures, BSP tiling, Borrow and scratchpads, Always on Top / Leave As Is, MFF / FFM, and app / window switching in a safe virtual display.
- **Built from this Mac:** Start from running-app metadata and connected-display geometry, then organize apps around repeatable work rather than generic categories. No screen contents are captured.
@@ -134,6 +147,8 @@ Captured on an earlier version. Some labels have changed since these screenshots
- **One cumulative practice surface:** Real shortcuts and trackpad gestures control the preview, and every command learned earlier remains available in later lessons.
- **Draft first:** Guided Setup does not move real windows or write `config.toml` until **Apply Setup**. Reopen it any time from **Settings → General**.
+