From afe397da3f8d9a21eecc894fb1b0904599a0fc2a Mon Sep 17 00:00:00 2001 From: Irene Date: Thu, 10 Sep 2026 18:18:04 +0900 Subject: [PATCH] refactor: draw the src/scripts boundary, drop dead files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make each directory answerable by path alone: src/ is what the Remotion build compiles, scripts/ is what you run by hand. Removed: - `ffmpeg.sh` — never worked; every parameter was assigned `$1`, so bake/bypass were broken from the start. Superseded by `scripts/ffmpeg_tools.py bake|still`. - `src/lrc2srt.ts` — the TypeScript port; `scripts/lrc2srt.py` is the script that was actually maintained, and it now handles the multi-timestamp cases the TS version did. - `scripts/bom-gen.ts` — superseded by `scripts/bom_gen.py`. - `scripts/ffmpegusage.txt` — legacy command notebook. Every recipe in it is now reproduced by `ffmpeg_tools.py`, including the `-map 0:v:0 -map 1:a:0 -c:v copy` mux and the FLAC `-compression_level 12` case, so it has no unique content left. Also drops the `bom-gen` alias from the dispatcher (dash-case was TypeScript naming) and documents the boundary in README.md and REMOTION-QUICKSTART.md. `npm run lint` (eslint src && tsc) passes with src/ reduced to Remotion input. --- README.md | 15 +++++- REMOTION-QUICKSTART.md | 18 +++++-- ffmpeg.sh | 60 ----------------------- scripts/README.md | 9 ++-- scripts/bom-gen.ts | 102 ---------------------------------------- scripts/ffmpegusage.txt | 28 ----------- scripts/tools.py | 1 - src/lrc2srt.ts | 94 ------------------------------------ 8 files changed, 31 insertions(+), 296 deletions(-) delete mode 100644 ffmpeg.sh delete mode 100644 scripts/bom-gen.ts delete mode 100644 scripts/ffmpegusage.txt delete mode 100644 src/lrc2srt.ts diff --git a/README.md b/README.md index 27cb2f2..14944d6 100644 --- a/README.md +++ b/README.md @@ -15,10 +15,21 @@ This repo houses the code-like files for NCMR music videos. Binary assets live e This branch holds the common scaffolding: - **Remotion project** — entry point, root component, and a placeholder composition -- **`ffmpeg.sh`** — helper for baking ASS subtitles or bypassing with static image + audio -- **`src/lrc2srt.ts`** — legacy LRC → SRT subtitle converter +- **`scripts/`** — Python toolchain (stdlib only) for subtitles, ffmpeg and asset manifests - **Build config** — TypeScript, ESLint, Prettier, Remotion studio +### `src/` vs `scripts/` + +Two directories, two jobs: + +- **`src/`** — Remotion input only. Everything here is compiled by `tsc`/Remotion + and linted by `npm run lint`. +- **`scripts/`** — operator tooling. Python, standard library only, run directly + (`python3 scripts/tools.py --help`). Nothing here is part of the Remotion build. + +Keep the boundary sharp: anything the video build compiles belongs in `src/`, and +anything you run by hand belongs in `scripts/`. + ### Song branches For each song, create a branch `/master` (and optionally feature branches diff --git a/REMOTION-QUICKSTART.md b/REMOTION-QUICKSTART.md index ddfa4b1..d4ef7d9 100644 --- a/REMOTION-QUICKSTART.md +++ b/REMOTION-QUICKSTART.md @@ -42,17 +42,25 @@ The Studio auto-reloads on file changes. No manual refresh needed. ``` . -├── src/ +├── src/ # Remotion input — compiled by tsc/Remotion │ ├── index.ts # Entry point — calls registerRoot() │ ├── Root.tsx # React root component -│ ├── Composition.tsx # Composition definitions (placeholder) -│ └── lrc2srt.ts # LRC → SRT subtitle converter +│ └── Composition.tsx # Composition definitions (placeholder) +├── scripts/ # Operator tooling — Python, stdlib only +│ ├── tools.py # Dispatcher: python3 scripts/tools.py --help +│ ├── ffmpeg_tools.py # mux / bake / still / strip / probe +│ ├── lrc2srt.py # LRC → SRT +│ ├── srt2ass.py # SRT → ASS (the step before baking) +│ ├── bom_gen.py # Bill of materials for untracked assets +│ └── hwprobe.py # What this machine can actually encode ├── package.json # Remotion + React + Tailwind deps ├── remotion.config.ts # CLI config (rspack, jpeg output format) -├── tsconfig.json # TypeScript (strict, ES2018) -└── ffmpeg.sh # Helper for ASS subtitle baking +└── tsconfig.json # TypeScript (strict, ES2018) ``` +`src/` and `scripts/` do not mix: the former is what the video build compiles, the +latter is what you run by hand. + ## Compositions Compositions are defined in `src/Composition.tsx`. Each has: diff --git a/ffmpeg.sh b/ffmpeg.sh deleted file mode 100644 index 9bbd8d9..0000000 --- a/ffmpeg.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env bash -# ffmpeg helper — bake ASS subtitles into video, or bypass with static image + audio -# -# Usage: -# ffmpeg.sh bake