Code for the THS site
yarnto install dependencies- Edit
content/episode/files - Upload mp3 file
- Run
yarn dev - Access
localhost:1313
Deploy is done with yarn build but it is handled by circleci in the .circleci/config.yml file, automatically built and pushed to production server.
Initial implementation lives in scripts/postprocess/.
- Node 24+
ffmpegandffprobeavailable in PATH
- Main config:
postprocess.config.json - Persistent chapter image overrides:
data/chapter-image-overrides.json
Update seasonMap in postprocess.config.json if you use additional seasons.
npm run postprocess:dry -- \
--mp3 /absolute/path/to/ths-11-18.mp3 \
--chapters "/absolute/path/Tangent Factories - Chapter Info.txt" \
--transcript-md "/absolute/path/Tangent Factories.md" \
--transcript-vtt "/absolute/path/Tangent Factories.vtt"npm run postprocess -- \
--mp3 /absolute/path/to/ths-11-18.mp3 \
--chapters "/absolute/path/Tangent Factories - Chapter Info.txt" \
--transcript-md "/absolute/path/Tangent Factories.md" \
--transcript-vtt "/absolute/path/Tangent Factories.vtt"This currently does the following:
- Validates expected filenames and required tools
- Parses chapter timings
- Resolves chapter images from overrides, IGN, Steam, then MP3 cover fallback
- Generates
index.md,transcript.md, andtranscript.vttin the episode folder - Generates a 1080x1080 MP4 chapter-image video
- Runs warning-only inappropriate word checks on transcripts
Not yet implemented in this phase:
- Embedding per-chapter images directly into MP3 chapter metadata
npm run postprocess:uiThen open http://localhost:4173.
If your episode assets are in the configured Episodes folder and use the standard names, run:
npm run postprocess:episode -- --season 11 --episode 18This will:
- Find the episode folder automatically under the configured Episodes root
- Detect the MP3, chapter info, transcript MD, and transcript VTT files
- Launch the local UI automatically with all fields prefilled
- Auto-run the pipeline immediately (full run)
To open UI and auto-run in dry-run mode instead:
npm run postprocess:episode -- --season 11 --episode 18 --dry-runIf you omit season and episode, the tool infers the next episode code using existing site episodes and these rules:
- max 26 episodes per season
- first episode published in January and July starts a new season
- otherwise increment episode number
Open prefilled UI using inference:
npm run postprocess:episodeThis inferred flow also auto-runs by default. Use --dry-run to switch to preview mode.
Run pipeline directly using inference:
npm run postprocess:dryYou can still override inferred publish date if needed:
npm run postprocess:episode -- --publish-date 2026-07-01T19:00:00+01:00