Repository navigation
Releases
narrate 0.1.1
The GitHub Action is now narrate video, ready for the GitHub Marketplace, and uses: bricef/narrate@v0 follows narrate's 0.x releases, building with each release's own image.
Get it:
- GitHub Action:
uses: bricef/narrate@v0(or@v0.1.1to pin this release); noimageinput needed (docs) - Docker:
docker pull ghcr.io/bricef/narrate:0.1.1(amd64 and arm64) - uv:
uv tool install --python 3.12 --with-executables-from playwright git+https://github.com/bricef/narrate@v0.1.1, thenplaywright install chromium(README)
The image's ffmpeg is unchanged from 0.1.0 (9.0.2); its source tarball is attached to v0.1.0.
Added
- A major tag for the GitHub Action:
uses: bricef/narrate@v0follows the
0.x releases. Each release moves it, and the image tag0, once its image
has passed its checks. Only a newer release moves them, never an older one
run again.
Changed
- The GitHub Action builds with its own release's image, with no
image
input:@v1.2.3usesghcr.io/bricef/narrate:1.2.3, and@v0uses
ghcr.io/bricef/narrate:0. A branch or a commit still useslatest, and
imagestill overrides it. 0.1.0's action useslatestunless given
image. - Only release tags build images:
v1.2.3, and pre-releases such as
v1.3.0-rc.1, which publish only their own image tag. - The GitHub Action is named "narrate video", so that it can be listed on
the GitHub Marketplace, which refusesnarrate: an organisation has that
name.uses: bricef/narrate@…doesn't change. - Dependencies: Pillow 13 (narrate now needs it), Playwright 1.64 with
its newer headless Chromium, Starlette 1.8, NumPy 2.5.4 and certifi
2026.10.19. From a checkout or a uv install, run
playwright install chromiumagain after updating ifnarrate doctor
says Chromium is missing.
narrate 0.1.0
narrate turns a Markdown script and a folder of pictures and clips into a narrated video, on your own computer. It reads Narakeet's "Markdown to Video" format, speaks with Kokoro (free, local) or ElevenLabs, and runs as a command, a web studio, an HTTP service, a Docker image and a GitHub Action.
Get it:
- Docker:
docker pull ghcr.io/bricef/narrate:0.1.0(amd64 and arm64) - uv:
uv tool install --python 3.12 --with-executables-from playwright git+https://github.com/bricef/narrate@v0.1.0, thenplaywright install chromium(README) - GitHub Action:
uses: bricef/narrate@v0.1.0withimage: ghcr.io/bricef/narrate:0.1.0(docs)
ffmpeg source: the image ships ffmpeg 9.0.2, built with --enable-gpl from its unmodified source tarball, which is attached below (ffmpeg-9.0.2.tar.xz, SHA-256 8c3850283eb25fa026482078a04051e0be17347b09ef81a0849bec15a96e002e). The build configuration is the ffmpeg stage of the Dockerfile.
narrate's first release. Earlier changes are in the git history.
If you ran narrate from main before this release, three things now work
differently, as Security explains: the studio and the service answer only to
their own host names (--allow-host adds more), the pages a build captures
reach only public addresses (--allow-local-network lets them reach yours),
and a .env sets only ELEVENLABS_API_KEY.
Added
- Scripts: builds narrated videos from Narakeet's "Markdown to Video"
script format: narration, pictures with pan and zoom, video clips, text and
code slides, themes, callouts, transitions, recorded audio, background music
and subtitles. - Speech: Kokoro, free and running locally, or ElevenLabs with your own
key. - narrate's extensions: Mermaid diagrams, web page captures and
placeholder cards as code blocks; animated HTML scenes; and HTML overlays. - Checking and reviewing:
narrate checkreports problems, timing and
what speech would cost;narrate framesandnarrate hearreview a built
video without watching it. - Ways to run it: the command line,
narrate studiofor writing scripts in
a browser,narrate servefor your own programs over HTTP,
narakeet-api-clientfor Narakeet's command line, a Docker image and a
GitHub Action. - Linux and macOS: install with
uv tool install, from a checkout, or
with Docker. On Linux narrate downloads its own ffmpeg; on macOS it uses
Homebrew'sffmpeg-full. On Windows, use Docker. - The image
ghcr.io/bricef/narrateruns natively on x86-64 and arm64,
Macs with Apple chips included. Each release has its own tags, such as
0.1.0and0.1;latestfollowsmain. - The GitHub Action: pin it to a release,
bricef/narrate@v0.1.0, with
that release's image,ghcr.io/bricef/narrate:0.1.0. narrate doctorchecks ffmpeg, Chromium, fonts, the voice models, the
cache and an ElevenLabs key, and prints a fix for each problem.
narrate buildstops before it starts if it can't write to its cache.- An agent skill (
skills/narrate/) that teaches AI agents to make videos
with narrate. - Licence: MIT. The notices for the JavaScript the studio bundles are in
src/narrate/studio/static/vendor/NOTICES.md, and the image keeps the
licences of narrate, ffmpeg and mermaid.js in/usr/share/doc/narrate/. - For contributors: a contributing guide, a code of conduct, a security
policy for reporting vulnerabilities privately, and a dev container.
Security
- The studio and the service keep web pages out: they answer only to
localhost,127.0.0.1,[::1]and their--hostaddress, and refuse
changes sent from another site's page. Other sites can't frame them: they
sendframe-ancestors 'self'andX-Frame-Options. So a page open in your
browser can't read your project or start builds through them. --allow-host:narrate studioandnarrate serveanswer to more host
names with it, once for each. A service on0.0.0.0whose clients call it
by its machine's name or address needs it.- Captured pages reach only public addresses:
render:webpages, HTML
scenes, overlays and slides, and everything they load, can't reach this
machine, a private network or a link-local address, such as a studio, a
service, a router or a cloud's metadata address. A host name that resolves
to a local address is refused too. A refusedrender:webcapture stops the
build, naming the address; anything else refused is noted. --allow-local-network:narrate buildlets pages reach local
addresses with it, or withNARRATE_ALLOW_LOCAL_NETWORK=1, to capture your
own dev server. The variable also reaches the studio's builds.
narrate servetakes the option for all its build jobs; a job can't turn
it on itself.- The studio's preview sandboxes a project's pages: HTML scenes, overlays
and slides run in origins of their own. So a page in a project from someone
else can't save over the script, switch the engine, start builds or read
what the studio answers. Its own files still load as in a build, but it has
no storage, such aslocalStorage. The studio serves project files
sandboxed too. .envsets onlyELEVENLABS_API_KEY: narrate ignores any other
variable in a.env, and warns, naming it. Set the others in the
environment.NARRATE_DOTENV=0stops narrate reading.envat all.- Projects bring no settings: a ZIP's hidden files (
.env,.git) are
left out when it's unpacked, apart from.narrate/, as are those of a
projectnarakeet-api-clientdownloads from GitHub.narrate serve
refuses hidden files in a project, and inside.narrate/too. Its jobs
read no.env: they run with the service's own environment. - Job outputs:
narrate serveserves only the files a job lists as its
outputs, not the rest of the job's folder, and serves them sandboxed.