Skip to main content
AIDiveForge AIDiveForge
📻

Podcast Chapter Generator

Voice & Audio · by AIDiveForge · Apr 20, 2026 · Intermediate

Draft timestamped chapters from a supplied, timed transcript.

Get chapter titles and start times with source evidence.

Free · 2 KB · SKILL.md, instructions and example files. Provide a transcript with reliable timestamps and the target platform’s chapter rules.

A worked example

A small example to try before using your own data.

Input

{
  "duration": "12:00",
  "transcript": [
    "00:00 Welcome and episode goals",
    "02:10 Guest explains checkpointing",
    "07:30 Discussion turns to recovery mistakes"
  ],
  "platform_rules": null
}

Expected result

00:00 Welcome and episode goals
02:10 Checkpointing explained
07:30 Recovery mistakes
Status: transcript-derived draft; platform rules and audio boundaries not checked.

What to check: Starts are ordered and below 12:00; titles reflect the supplied topics without inventing content.

Limits: Transcript timing can drift. Platform acceptance and editorial quality require a final audio/platform check.

Worked example included. Model-specific performance and vendor compatibility have not been benchmarked.

Installation options and other formats

Install this skill

An agent skill starts with SKILL.md. The ZIP also includes its examples and any helper scripts. Drop the file into your tool of choice — or pick a different format if you use Cursor, Windsurf, Copilot, or something else.

Download SKILL.md
python3 - <<'ADF_SKILL_INSTALL'
import hashlib, io, os, stat, tempfile, urllib.request, zipfile
from pathlib import Path, PurePosixPath
folder = "podcast-chapter-generator"
root = Path(os.environ.get('ADF_SKILL_ROOT', str(Path.home() / '.claude' / 'skills'))).expanduser()
destination = root / folder
if destination.exists() or destination.is_symlink():
    raise SystemExit('An installation already exists. Back it up and merge the ZIP deliberately.')
root.mkdir(parents=True, exist_ok=True)
request = urllib.request.Request("https://aidiveforge.com/skill/podcast-chapter-generator.zip", headers={'User-Agent': 'AIDiveForge-Resource-Installer/1.0 (+https://aidiveforge.com/skills/)'})
with urllib.request.urlopen(request, timeout=30) as response:
    data = response.read(8 * 1024 * 1024 + 1)
if len(data) > 8 * 1024 * 1024 or hashlib.sha256(data).hexdigest() != "d62c223756be49d36ec7ae125c376fc10c477f4c075b9561c319d470d79db0a4":
    raise SystemExit('The download did not match this reviewed bundle. No files were installed.')
with zipfile.ZipFile(io.BytesIO(data)) as archive, tempfile.TemporaryDirectory(prefix='.adf-skill-', dir=root) as temporary:
    members = archive.infolist()
    if len(members) > 100 or sum(m.file_size for m in members) > 16 * 1024 * 1024:
        raise SystemExit('Unexpected archive size')
    for member in members:
        name = PurePosixPath(member.filename)
        if name.is_absolute() or '..' in name.parts or not name.parts or name.parts[0] != folder or '\\' in member.filename or stat.S_ISLNK(member.external_attr >> 16):
            raise SystemExit('Unsafe archive entry; nothing was installed')
        target = Path(temporary).joinpath(*name.parts)
        if member.is_dir():
            target.mkdir(parents=True, exist_ok=True)
        else:
            target.parent.mkdir(parents=True, exist_ok=True)
            with target.open('xb') as stream:
                stream.write(archive.read(member))
    staged = Path(temporary) / folder
    if not (staged / 'SKILL.md').is_file() or destination.exists() or destination.is_symlink():
        raise SystemExit('The skill could not be installed without replacing existing data')
    os.rename(staged, destination)
print('Installed the complete skill folder:', destination)
ADF_SKILL_INSTALL

Claude Code: ~/.claude/skills/podcast-chapter-generator/SKILL.md. Codex: ~/.codex/skills/podcast-chapter-generator/SKILL.md. Keep the complete ZIP folder when helper scripts are included.

🧠 Why it works

Starts are ordered and below 12:00; titles reflect the supplied topics without inventing content.

⚙️ How it works

  1. Identify substantive topic transitions and retain their transcript timestamps.
  1. Choose concise descriptive chapter titles rather than clickbait or unsupported summaries.
  1. Keep starts in ascending order, remove duplicates and ensure every timestamp is within the episode duration.
  1. Apply the supplied platform constraints; when none are supplied, return a neutral chapter list instead of claiming platform compliance.
  1. Spot-check each boundary against audio when available and flag transcript-only uncertainty.

Description

Get chapter titles and start times with source evidence.

Provide a transcript with reliable timestamps and the target platform’s chapter rules.

Limits: Transcript timing can drift. Platform acceptance and editorial quality require a final audio/platform check.

Recommended Use

Tools and workflow packs this skill pairs well with. Forge picks are auto-generated from category + capability signals; Community picks are added by people who've used the pairing.