Agent skill

Video Podcast Maker Nano

by Agents365-ai in Agents365-ai/video-podcast-maker

Smallest personal narrated-explainer-video pipeline (spoken narration over visuals, not an audio podcast), fully tool-agnostic and autonomous by default — topic → research ∥ asset collection →…

MITAuto-check passedMedia & Creative

Install Video Podcast Maker Nano

skills CLI
$ npx skills add Agents365-ai/video-podcast-maker --skill video-podcast-maker-nano -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Agents365-ai/video-podcast-maker video-podcast-maker-nano --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Agents365-ai/video-podcast-maker.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/video-podcast-maker-nano .claude/skills/video-podcast-maker-nano && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
video-podcast-maker-nano
GitHub stars
1.7k
Token cost
~3.6k tokens
SKILL.md length
1,858 words
Files
2
Skills in repo
3
Repo updated
First seen
Licence
MIT

At a glance

Smallest personal narrated-explainer-video pipeline (spoken narration over visuals, not an audio podcast), fully tool-agnostic and autonomous by default — topic → research ∥ asset collection →…

  • Works in 7 steps: Research ∥ collect materials → Script → podcast.txt, then Checkpoint 1 → TTS → …
  • The user wants a quick personal narrated video with minimal steps
  • SKILL.md covers Oversight policy, Tool selection (per video), Working layout and Workflow, plus 2 more sections
  • Calls ffmpeg

What it does

Video Podcast Maker Nano is an agent skill from Agents365-ai/video-podcast-maker. Smallest personal narrated-explainer-video pipeline (spoken narration over visuals, not an audio podcast), fully tool-agnostic and autonomous by default — topic → research ∥ asset collection → script → TTS → video → 4K render ∥ publish info + cover. The skill defines the pipeline logic and self-verified checkpoints; any TTS backend and any video tool (Remotion, HyperFrames, CapCut, ...) work, and how much human oversight to apply is set by the working project's AGENTS.md/CLAUDE.md, not here. Use when the user…

Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `AGENTS.template.md`).

It sits in Media & Creative, covering Text to speech and voice, Video production and Podcasting. It works with Remotion, HeyGen and Bilibili. The repository describes itself as: Topic → 4K narrated video for coding agents. v5.3.0: local TTS (edge free + azure, no external engine), manifest-based Asset Engine, Remotion composition, cost-gated AI…. The licence is MIT.

When your agent uses it

  • The user wants a quick personal narrated video with minimal steps
  • Not they name the tool stack
  • Audio-only podcasts
  • Written episodic content

Example prompts

  • “/video-podcast-maker-nano”

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Research ∥ collect materials
  2. Script → podcast.txt, then Checkpoint 1
  3. TTS
  4. Audio check — Checkpoint 2
  5. Make the video
  6. Preview check — Checkpoint 3
  7. Render 4K ∥ publish kit

What it can do on your machine

Read from SKILL.md and the folder at commit 33b8078. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • ffmpeg

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Video Podcast Maker Nano loads about 3.6k tokens when it runs. Until then it costs about 185 tokens; SKILL.md has 1,858 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~185
When it runs · the whole SKILL.md, loaded when a task matches
~3.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from Agents365-ai/video-podcast-maker at commit 33b8078, republished under its MIT licence (© Agents365-ai). 1,858 words, ~3,600 tokens.

Download SKILL.mdSave it as .claude/skills/video-podcast-maker-nano/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
video-podcast-maker-nano
description
Smallest personal narrated-explainer-video pipeline (spoken narration over visuals, not an audio podcast), fully tool-agnostic and autonomous by default — topic → research ∥ asset collection → script → TTS → video → 4K render ∥ publish info + cover. The skill defines the pipeline logic and self-verified checkpoints; any TTS backend and any video tool (Remotion, HyperFrames, CapCut, ...) work, and how much human oversight to apply is set by the working project's AGENTS.md/CLAUDE.md, not here. Use when the user wants a quick personal narrated video with minimal steps, whether or not they name the tool stack. Do NOT trigger for audio-only podcasts, written episodic content, or heavy multi-format production.
argument-hint
[topic] or videos/{name}/
author
Agents365-ai
category
Content Creation
version
1.0.0

Video Podcast Maker Nano

A 7-step pipeline for personal use: research ∥ materials → script → TTS → audio checkpoint → video → preview checkpoint → 4K render ∥ publish kit. No bundled scripts, no hardcoded backends, no templates. The skill owns the logic and runs autonomously by default; the TTS backend and video tool are chosen per video (see Tool selection).

What makes this work regardless of tool choice — the three invariants:

  1. Checkpoints are never skipped — but who checks is policy. Three checkpoints exist: script (after Step 2), audio (after Step 3), preview (before render). Default checker is the agent itself (self-verification, defined per checkpoint); a project's AGENTS.md/CLAUDE.md may upgrade any checkpoint to a human gate — see Oversight policy.
  2. Audio is the master clock. The final video's duration must match the narration audio within ±0.5s (ffprobe both). Visuals are cut to the audio, never the reverse.
  3. A script change invalidates everything downstream. Edit the script → re-run the script checkpoint, then TTS → audio checkpoint → visuals → preview checkpoint → render. Never hand-patch timings.

Oversight policy

Default mode is autonomous: the pipeline runs end to end, with the agent performing every checkpoint's self-verification. A working project's AGENTS.md/CLAUDE.md can override per checkpoint with one line each:

  • Checkpoint 1 (script): human — halt after Step 2 until the user approves the script. Worth it: a late script change costs a full re-run.
  • Checkpoint 2 (audio): human — the user listens to the full audio before visuals. Worth it when TTS misreadings are costly to catch later.
  • Checkpoint 3 (preview): human — the user reviews the draft before render. Worth it for style-sensitive channels.

Unmentioned checkpoints stay agent-verified. Project policy files start from AGENTS.template.md (next to this SKILL.md): copy it into the video project root as AGENTS.md (plus a CLAUDE.md copy for Claude Code) and fill in the tool bindings. The skill never uploads or publishes anything anywhere — the publish kit is files on disk; publishing is always a human act outside this pipeline.

Tool selection (per video)

Decide the TTS backend and the video tool once, before Step 3, in this priority order:

  1. Project bindings win. A filled AGENTS.md/CLAUDE.md in the working project (see Oversight policy) IS the user's standing specification — use it, no scanning, no second-guessing. If the user names a tool in-session, that overrides the file. If the policy file is missing or still contains template placeholders (/absolute/path/to/...), resolve the bindings via rules 2–3, then write the resolved values back into the project policy file so the next run starts bound.
  2. Auto-detect installed skills. Scan the session's available skills for anything that can do the job — video: skills wrapping an authoring tool (Remotion, HyperFrames, CapCut, ...); TTS: any skill wrapping a TTS engine. Exclude end-to-end pipeline skills (e.g. other video-podcast-maker variants, if installed): they are pipelines like this one, not backends — invoking them here would nest workflows and double the checkpoints. One fit → use it; several → pick the best match for the project's language and output needs. Record the choice in research.md; surface it in the final summary. Never block waiting for a tool confirmation.
  3. Nothing found. Fall back to plain CLIs the user already has (ffmpeg + any TTS CLI) and say so — never install a new tool unprompted. If a TTS CLI cannot emit subtitle timing, derive cues by splitting the script evenly across the audio duration and flag the approximation at Checkpoint 2. If a user-specified tool is missing or cannot meet the capability floor, say so and drop to rule 2 instead of improvising.

Capability floor (applies to rules 1–3): the TTS choice must produce narration audio plus subtitle timing; the video choice must export a draft video file (for Checkpoint 3 verification) and 4K. Live preview is a bonus, never a substitute for the draft export. Auxiliary jobs need no selection: research uses the built-in web search, stills/cover the video tool's still export or any image tool, duration checks ffprobe. If ffmpeg/ffprobe are absent, report it and stop — the ±0.5s invariant is non-negotiable and is not skipped to keep a run alive.

Working layout

All artifacts for one video live in videos/{name}/ ({name} = lowercase English, hyphen-separated). File names for audio/timing adapt to the chosen backend; the set is what matters:

text
videos/{name}/
├── research.md          # Step 1 — facts + sources
├── podcast.txt          # Step 2 — narration script
├── podcast_audio.wav    # Step 3 — narration audio   (name per backend)
├── podcast_audio.srt    # Step 3 — subtitle timing  (or the backend's equivalent)
├── assets/              # Step 1 — images/BGM + sources.md (source + license per asset)
├── video-project/       # Step 5 — whatever the video tool produces
├── final_4k.mp4         # Step 7 — 3840×2160 render
├── cover.png            # Step 7 — video cover
└── publish_info.md      # Step 7 — title / description / tags / chapters

Workflow

Entry point check (before Step 1). Look for videos/{name}/ at the project root (or the directory the user names). If it already contains artifacts from an earlier session, this is an iteration — resume from the earliest step affected (see Iterating), do not re-run Step 1. Only start at Step 1 when no artifacts exist.

Step 1 — Research ∥ collect materials

Two parallel outputs from one investigation pass (facts and assets come from the same sources):

Research → research.md. Investigate the topic (web search, papers, the user's pointers). Distill into research.md: facts, numbers, and their sources. Every number the script will claim must trace back here — a precise number without a source is fabricated; drop it or attribute it.

Materials → assets/. Collect everything the visuals and cover will consume into videos/{name}/assets/: per-section images/illustrations/screenshots, brand logos, BGM. Two sources, in priority order:

  1. User-provided — files the user hands over or points at; copy into assets/, never reference them in place.
  2. Auto-collect — official material first (product banner, spec card, screenshot), else free/licensed sets (unDraw SVG, Pixabay/Pexels, OpenMoji / Microsoft Fluent Emoji / Google Noto Emoji, @lobehub/icons for brand logos).

Record each asset's source URL + license in assets/sources.md at collection time (attribution-required sets must be credited in the video description at Step 7). No suitable asset exists for a section? Do not fabricate a screenshot — fall back to a text-only layout for that section (or a generic free-license illustration), record the decision in assets/sources.md, and move on; asking the user is optional in human mode. Missing assets can be added any time before Step 5.

Step 2 — Script → podcast.txt, then Checkpoint 1

Spoken text only, no markdown. Split the script into segments with [SECTION:xxx|display-label] markers (lowercase English names, e.g. [SECTION:hero|intro]) — one section per video segment. This marker convention is the portable contract between script, TTS chunking, and visual layout; any TTS/video tool can consume it. Markers are structural metadata: never spoken, never shown as subtitle text — TTS and subtitles consume the text between markers only.

Style rules (language-agnostic): see Script style.

Checkpoint 1 — script self-review (mandatory). Verify the script against every Script style rule, then reconcile its sections against assets/: list sections with no matching asset, collect or fall back per the no-asset rule above, and note what goes without. In human mode (project policy), halt instead and hand the script over — do NOT run TTS until the user explicitly approves. Audio, timings, and visual entrances all derive from the script; a late script change costs a full re-run.

Show full SKILL.md (750 more words)Show less
Step 3 — TTS

Run the chosen TTS backend (Azure, Edge, fish, minimax, ... — whatever the session picked). Produce:

  • narration audio (WAV/MP3)
  • subtitle timing (SRT or equivalent, cue text = script verbatim)

Pronunciation hygiene before synthesizing, in any narration language: brand/term readings that can't be derived mechanically (Qwen read as its Chinese brand name, MoE spelled letter-by-letter) go into an alias/phoneme list per the backend's mechanism — never into the script text (it would leak into subtitles).

Step 4 — Audio check — Checkpoint 2

Agent self-verification (autonomous mode): ffprobe the audio duration against a rough estimate from the script (per-language speaking rate; use it only to catch gross errors like a silent or truncated file); verify every brand/term token in the script has an alias/phoneme entry (a coverage check — actual pronunciation is exactly what human-mode Checkpoint 2 is for); check for silent or clipped segments (silencedetect/volumedetect) that suggest synthesis failures. Fix alias-list gaps and re-synthesize if found. In human mode, the user listens to the full audio instead; misreadings → fix the alias list (not the script), re-synthesize, re-check.

Step 5 — Make the video

Cut the visuals with the chosen tool (Remotion, HyperFrames, CapCut, ...) to the narration audio, using assets/ as the material pool. Section markers from podcast.txt drive the layout; subtitle cues drive text entrances. Keep the draft files in videos/{name}/.

Step 6 — Preview check — Checkpoint 3

Agent self-verification (autonomous mode): inspect the draft export (a seekable video file — the capability floor guarantees one): extract one frame per section (ffmpeg -ss <mid-section-time> -i draft.mp4 -frames:v 1) and view each for layout overflow, missing subtitles, broken asset references; verify draft duration matches the narration audio within ±0.5s. Fix and re-verify after every change. In human mode, the user reviews the draft in person (live preview if the tool has one, else the draft export); render only on explicit confirmation ("render"), and every round of changes needs fresh confirmation.

Step 7 — Render 4K ∥ publish kit

Run in parallel (the render is the long blocking job; the publish kit doesn't depend on it):

  • Render at 3840×2160 → final_4k.mp4. Verify duration vs narration audio within ±0.5s before calling it done.
  • Publish kit → publish_info.md (title / description / tags / chapter timestamps — each chapter starts at the SRT time of its section's first cue) and cover.png (generate from the video tool's still frame if available, else any image tool; may reuse assets/ material). The asset-sources section of publish_info.md copies from assets/sources.md.

Script style (language-agnostic)

Provenance: the full skill's video-podcast-maker/references/natural-narration.md (anti-AI-flavor) + script-polish.md (deep editing) are the canonical sources; this is the language-agnostic distillation. Edit rules there first, then mirror here — do not fork a rule and drift it.

The narration language is whatever the user's script is — this pipeline defaults to Chinese but the rules below apply in any language's spoken register. These rules are enforced at Checkpoint 1; read each section aloud — if you stumble, split the sentence.

  • Everyday spoken prose, not written prose. One idea per sentence, subject first, no nested clauses, no — or · as connectives. Vary sentence length; a light first person is fine.
  • Connector swap. Replace bookish connectives (furthermore / however / therefore / in summary) with the everyday equivalent, or delete. Drop enumerative openers (firstly / secondly / lastly) and just move to the next point.
  • Kill list. Delete formulaic filler: corporate buzzwords, "it is worth noting", "as everyone knows", "revolutionary", "game-changing", "seamless", "let's wait and see" — and their equivalents in the narration language.
  • Structural tells. Verb-noun shells ("perform an optimization") → concrete action + result ("cut approval from three steps to one"). "Not X but Y" → state Y. Three-part parallelism ("both A and B and C") → keep only the most informative item; two are better than three. Vague intensifiers ("significantly") → a number or a perceivable consequence. Vague attribution ("experts say") → named source + date, else delete the sentence. Slogan endings ("the future is bright") → end on a concrete fact, number, or next action.
  • Numbers are Arabic digits (86.1, 1.5G, 9B) — subtitles are the script verbatim, so write what should LOOK on screen. Never write the TTS spoken form into the script to fix a misreading; use the backend's alias/phoneme layer.
  • Numbers must be traceable to research.md — a precise number without a source is fabricated; drop it or attribute it.

Iterating

  • Script changed → re-run Checkpoint 1 (human in human mode), then from Step 3 (TTS) through Checkpoints 2 and 3 to render. Never hand-edit timings.
  • Audio re-synthesized (same script, different voice/rate) → re-run Checkpoint 2; visuals may stay if timings didn't shift; re-run Checkpoint 3 before rendering.
  • Visuals only → edit and re-run Checkpoint 3.
  • Reuse the same videos/{name}/ directory.

© Agents365-ai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in skills/video-podcast-maker-nano of Agents365-ai/video-podcast-maker.

  • SKILL.md
  • AGENTS.template.md

Open the folder on GitHubat commit 33b8078

Compare with similar skills

Video Podcast Maker Nano next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Video Podcast Maker Nano compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Video Podcast Maker Nano this skillAgents365-ai/video-podcast-maker1.7k—~3.6kAutomated safety check: PassMIT
Super Video MakerBomx/super-video-maker-skill310—~11kAutomated safety check: NotesNone
Ra Video Production DirectorPluviobyte/rnskill1.6k—~7.4kAutomated safety check: NotesCustom licence
Video Podcast Makerdtsola/xiaoyaosearch1k—~3.4kAutomated safety check: PassMIT
Making Demo Videosnukeop/nuclear19k—~892Automated safety check: PassAGPL-3.0
HyperFrames Video Entry Pointheygen-com/hyperframes60k3 repos~5.2kAutomated safety check: PassApache-2.0

Similar skills

  • Super Video Maker

    Bomx/super-video-maker-skill

    End-to-end AI video production skill for agentic frameworks.

    310 GitHub stars~11k tokensUpdated 2 mo ago
    Media & CreativeAuto-check: notes
  • End-to-end video production orchestration for the content-creation workspace.

    1.6k GitHub stars~7.4k tokensUpdated 20 days ago
    Media & CreativeAuto-check: notes
  • Video Podcast Maker

    dtsola/xiaoyaosearch

    Turns a topic into a 4K horizontal video podcast through research, scripting, text-to-speech, Remotion rendering and background music, and can learn styles from references.

    1k GitHub stars~3.4k tokensUpdated 9 days ago
    Media & CreativeAuto-check passed
  • Making Demo Videos

    nukeop/nuclear

    A skill your agent uses when making a demo, tutorial, or feature video of Nuclear.

    19k GitHub stars~892 tokensUpdated 5 days ago
    Media & CreativeAuto-check passed
  • HyperFrames Video Entry Point

    heygen-com/hyperframes

    Entry point for making, editing and rendering videos from HTML compositions with HyperFrames, routing each request to the right workflow.

    60k GitHub starsUsed in 3 repos~5.2k tokens
    Media & CreativeAuto-check passed
  • Avatar Video

    calesthio/OpenMontage

    Create AI avatar videos with precise control over avatars, voices, scripts, scenes, and backgrounds using HeyGen's v2 API.

    66k GitHub stars~1.6k tokensUpdated 7 days ago
    Media & CreativeAuto-check passed

More from Agents365-ai/video-podcast-maker

  • Video Podcast Maker

    Agents365-ai/video-podcast-maker

    A skill your agent uses when the user gives a topic and wants an automated topic-driven narrated explainer, podcast, or knowledge-summary video (Bilibili / YouTube / Xiaohongshu / Douyin / WeChat…

    1.7k GitHub stars~4.9k tokensUpdated 9 days ago
    Auto-check passed
  • Video Podcast Maker Lite

    Agents365-ai/video-podcast-maker

    Minimal personal narrated-video pipeline — a topic becomes a talking-head-free explainer MP4 (1080p or 4K) via script → Azure TTS (SSML) → Remotion.

    1.7k GitHub stars~4.5k tokensUpdated 9 days ago
    Auto-check passed

Questions about Video Podcast Maker Nano

What does Video Podcast Maker Nano do?

Smallest personal narrated-explainer-video pipeline (spoken narration over visuals, not an audio podcast), fully tool-agnostic and autonomous by default — topic → research ∥ asset collection →…. Video Podcast Maker Nano is an agent skill from Agents365-ai/video-podcast-maker. Smallest personal narrated-explainer-video pipeline (spoken narration over visuals, not an audio podcast), fully tool-agnostic and autonomous by default — topic → research ∥ asset collection → script → TTS → video → 4K render ∥ publish info + cover.

When should I use Video Podcast Maker Nano?

Video Podcast Maker Nano fits situations like: the user wants a quick personal narrated video with minimal steps; not they name the tool stack; audio-only podcasts; written episodic content.

How do I install Video Podcast Maker Nano in Claude Code?

Run `npx skills add Agents365-ai/video-podcast-maker --skill video-podcast-maker-nano -a claude-code`. Or copy the skill folder (skills/video-podcast-maker-nano in Agents365-ai/video-podcast-maker) into .claude/skills/video-podcast-maker-nano in your project. Claude Code loads it when a task matches its description.

How do I install Video Podcast Maker Nano in Codex?

Run `npx skills add Agents365-ai/video-podcast-maker --skill video-podcast-maker-nano -a codex`. Or copy the skill folder (skills/video-podcast-maker-nano in Agents365-ai/video-podcast-maker) into .agents/skills/video-podcast-maker-nano in your project. Codex loads it when a task matches its description.

Can I use Video Podcast Maker Nano in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Agents365-ai/video-podcast-maker --skill video-podcast-maker-nano -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/video-podcast-maker-nano, .gemini/skills/video-podcast-maker-nano, .github/skills/video-podcast-maker-nano and .opencode/skills/video-podcast-maker-nano in your project.

What does Video Podcast Maker Nano need to run?

Going by SKILL.md and its folder, Video Podcast Maker Nano needs the command-line tools its instructions call (ffmpeg).

Does Video Podcast Maker Nano access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Video Podcast Maker Nano safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Video Podcast Maker Nano use?

Video Podcast Maker Nano is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Video Podcast Maker Nano use?

About 3.6k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Video Podcast Maker Nano?

Skills that share tags, products or a category with Video Podcast Maker Nano: Super Video Maker (Bomx/super-video-maker-skill, 310 stars), Ra Video Production Director (Pluviobyte/rnskill, 1.6k stars), Video Podcast Maker (dtsola/xiaoyaosearch, 1k stars) and Making Demo Videos (nukeop/nuclear, 19k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Video Podcast Maker Nano?

Agents365-ai (a GitHub user) maintains it in Agents365-ai/video-podcast-maker, which has 1,670 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 1, 2026.

Source: Agents365-ai/video-podcast-maker on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.