Record, edit and publish software tutorials from an ETAF text workbench on top of the video-project skill
app
  • Emacs Lisp 82.2%
  • Python 17.3%
  • Makefile 0.5%
Find a file
Kinneyzhang 92b308060f
Some checks failed
Repository structure / structure (push) Has been cancelled
feat(etaf-video-studio): declare direct dependencies only
`Package-Requires` mixed direct and transitive providers: seven entries declared
`ebox` without one reference to it, `etaf-screensaver` declared `etaf-ui` and
never loaded it, and six packages called a provider's API without declaring it
(the games reach `etaf` through `etaf-gamekit`, the video player persists
through `etaf-db`, the playground renders through `ebox`). The rule is the one
package.el needs: declare what the sources actually `require` or call, let the
archive resolve the closure, and let `scripts/check-api.py` fail `make check`
for a declaration no source uses and for a provider used but not declared.

Repo: etaf-video-studio
Validation: make -C etaf-video-studio structure-check passed on the working copy before
  sealing; scripts/check-commit-message.py accepted this message.
2026-10-22 21:14:26 +08:00
.githooks feat: build the video studio workbench over the video-project CLI 2026-10-14 00:05:20 +08:00
.github/workflows chore(scripts): sync shared workspace tooling 2026-10-19 12:49:33 +08:00
benchmarks feat(studio): guide the complete video editing workflow 2026-10-14 20:09:42 +08:00
docs refactor(video-studio): run the studio as an ETAF application 2026-10-20 08:43:00 +08:00
lisp refactor(video-studio): run the studio as an ETAF application 2026-10-20 08:43:00 +08:00
scripts chore(scripts): sync shared workspace tooling 2026-10-22 13:16:11 +08:00
tests refactor(video-studio): run the studio as an ETAF application 2026-10-20 08:43:00 +08:00
.editorconfig feat: build the video studio workbench over the video-project CLI 2026-10-14 00:05:20 +08:00
.gitignore feat: build the video studio workbench over the video-project CLI 2026-10-14 00:05:20 +08:00
CHANGELOG.md refactor(video-studio): run the studio as an ETAF application 2026-10-20 08:43:00 +08:00
etaf-video-studio.el feat(etaf-video-studio): declare direct dependencies only 2026-10-22 21:14:26 +08:00
LICENSE feat: build the video studio workbench over the video-project CLI 2026-10-14 00:05:20 +08:00
Makefile feat: build the video studio workbench over the video-project CLI 2026-10-14 00:05:20 +08:00
README.md chore(video-studio): follow the flat workspace layout 2026-10-19 12:49:00 +08:00

etaf-video-studio

Record, edit and publish software tutorials from one ETAF workbench: a guided project start, a persistent action bar, a seekable native video preview, ordered clip pages, explicit edit forms, background previews/exports, macOS screen recording and a two-step publish flow. It is the text-application face of the video-project skill and shares its projects with the CLI — no second source of truth.

Requirements

  • Emacs 29.1 or newer.
  • The pi-skill CLI with the video-project and video-edit skills, the job-run skill, and ffmpeg with libass for burned-in captions. pi-skill video-project check verifies the media side.
  • macOS with the macos-screencast CLI for recording; other platforms can import, edit, export and publish.
  • Provider checkouts: etaf, etaf-ui, ebox and ecss, either beside this repository (../etaf and so on) or two directories up (../etaf) as in the workspace checkout.

Install and run

Add this repository root and the four provider roots to load-path, then:

(require 'etaf-video-studio)
M-x etaf-video-studio-open

The studio opens ~/Movies/Video Projects (or PI_SKILL_VIDEO_PROJECT_DIRECTORY); set etaf-video-studio-root to pin a different library, or call (etaf-video-studio-open "project-id" "/path/to/library").

Make your first video

  1. Enter a project title on the welcome card and choose 新建.
  2. Choose 导入素材, or 录屏 and a window. Recording is silent unless you explicitly select audio; stopping imports the saved video.
  3. Select a clip. Use the seek bar and play/pause, then edit its in/out seconds or split it; speed and volume apply as soon as you choose them. The 字幕 tab adds timed text. Changes save automatically; 撤销 restores the previous edit without touching sources.
  4. Choose 预览成片 to render the edited cut, then 导出视频. The 任务 and 导出 tabs show completion and 在文件夹中显示成片.
  5. Publishing is optional: preview the destination and text, then explicitly confirm. A public link is accessible to anyone who has it.

All tools remain in the same tabs on small windows. The minimum usable viewport is 80 columns by 28 rows; lists have previous/next page controls. This is a single-sequence tutorial editor, not a multi-track compositor; captions are entered manually, not transcribed automatically.

Keys: N new project, a import, SPC play/pause, v preview, e export, r record pane, R start or stop recording, p publish, c captions, t tasks, i/o mark in/out, s split, x remove, u/U undo/redo, T theme, g refresh, ? help, q close. Closing the studio never stops a background task.

Documentation

  • docs/manual.md — workflows, keys, failure handling and a programmatic example.
  • docs/architecture.md — module responsibilities, data flow and invariants.
  • The root entry's Commentary is the authoritative public interface list; pi-skill video-project help documents the shared CLI.

Development

make check        # structure, byte compile, public acceptance, API boundary
make test         # only the public acceptance scenarios
make api-check    # root Commentary against the loaded definitions
make clean

Interface changes must keep the root Commentary, the manual and tests/acceptance.json in step. GUI behavior changes need a real graphical pass; scripts/etaf-video-studio-gui-scenarios.el drives the controls with the shared window verifier against a generated clip and a temporary library.