Skip to content

Source code

Agon Ātrium product presentation

The 14-slide marketing tour presents Agon Ātrium by Agon Partners Innovation AG in English, German, and French. The showcase player at /components/video selects one final video with embedded narration. All authoring inputs and intermediate artifacts stay in this repository, outside the released showcase package. The presentation video skill follows this workflow.

Start here

Edit narration/fr.txt, narration/en.txt, or narration/de.txt to change the spoken wording. Keep the bracketed slide IDs. Edit settings.json for voices, speed, and French pronunciation.

From the repository root:

Terminal window
# Once per checkout, after the repository's normal Yarn installation.
yarn presentation:setup
# Rebuild all videos, JPG posters, VTT captions, TXT transcripts, and applications.
yarn presentation:build

This command reuses unchanged speech and slide clips. It generates the project artifacts in docs/presentation/artifacts/ and only final .webm videos in src/showcase/assets/. The normal application build includes the videos. No server starts and nothing is uploaded.

The entry point is cli.py, backed by pipeline.py. All commands are declared in package.json. The build uses preserved slide images. It does not regenerate PPTX files or their speaker notes. To rebuild those as well, configure the slide authoring runtime, then run yarn presentation:rebuild.

File map

LocationPurposeEditing rule
narration/Authoritative full narration in three languages.Edit these TXT files to change the speech.
settings.jsonVoices, pronunciations, timing, and encoding.Edit to change sound and video settings.
storyboard.jsonVisible slide copy, order, and screenshot selection.Edit, then rebuild slides before videos.
source/Opening artwork, actual screenshots, preserved PNG frames, and their manifest.Keep versioned. Refresh through the capture and slide tools.
artifacts/decks/Editable PPTX exports, including speaker notes.Regenerate from the storyboard and narration.
artifacts/posters/Generated opening JPG images for review or reuse.Rebuild from the first slide.
artifacts/captions/Generated word-timed VTT captions.Rebuild from narration timing.
artifacts/transcripts/Generated TXT transcripts grouped by slide title.Edit the original narration instead.
src/showcase/assets/Three final narrated WebM videos.Only these presentation outputs ship with the showcase.
samples/Short voice audition passages.Optional. They do not feed the full videos.
src/scripts/presentation/Maintained generation and capture tools.Keep versioned with their tests and skill.
.build/presentation/Disposable speech, timing, clip, and render cache.Ignored by Git.

Everything under docs/presentation/ is project material intended for version control. It is excluded from both the showcase package and its application build. The player has no external poster, caption track, or transcript download. The generic shared video component still supports those features for other consumers. Each final WebM contains the slides and Opus narration, encoded in Full HD VP9.

For example, narration/fr.txt controls the French voice. artifacts/transcripts/atrium-presentation-fr.txt is a generated review copy. Editing that output cannot change the voice. Direct PPTX edits also do not flow back into the storyboard or videos.

Voices and pronunciation

The approved voices are French Ariane (fr-CH-ArianeNeural) at +0%, English Ryan (en-GB-RyanNeural) at -4%, and German Conrad (de-DE-ConradNeural) at -4%. Pitch is unmodified. Ariane is reserved for French.

Keep official brand names in the narration. The pronunciations.fr entries in settings.json substitute “Agone Partnerzs innovacheune” and “Agone Atrioume” only in the speech request. The generator restores official spelling in caption timing. These exact, case-sensitive, whole-word substitutions are phonetic workarounds, not SSML language tags. Each entry maps one alphabetic word to a unique replacement word.

Terminal window
# Listen to a short sample using the approved settings.
yarn presentation:edge --locale fr
yarn presentation:edge --locale en
yarn presentation:edge --locale de
# Audition edited text, or reuse matching cached speech without contacting Edge.
yarn presentation:edge --locale fr --text-file docs/presentation/samples/fr.txt
yarn presentation:edge --locale fr --offline

Auditions go to .build/presentation-voice-samples-edge/, with MP3, canonical TXT, actual spoken TXT, VTT, and settings JSON. They are ignored working files. The audition’s --voice, --rate, and --output options never update full-video settings. Full wording remains subject to the user’s separate review.

Video build options

Use the Node and Yarn versions declared in package.json and Python 3.10 or newer with venv and pip. See development setup for repository installation. presentation:setup installs pinned edge-tts 7.2.8 and imageio-ffmpeg 0.6.0 in the ignored .build/presentation-tools/ environment. It changes no application dependencies. On Windows, use a Python installation exposing python3, or invoke the scripts directly.

Edge TTS sends narration to Microsoft’s online speech service. Fresh or changed narration needs network access. FFmpeg handles video assembly locally. Set ATRIUM_FFMPEG to your own executable if needed, with VP9 and Opus support.

Terminal window
# Validate inputs without synthesis.
yarn presentation:check
# Rebuild one language, then refresh the applications.
yarn presentation:video --locale fr
yarn build
# Rebuild all languages using matching cached speech only.
yarn presentation:video --offline
# Regenerate speech and clips for a selected language.
yarn presentation:video --locale fr --force
# Review elsewhere without replacing delivered videos or versioned artifacts.
yarn presentation:video --locale de --output .build/presentation-review
# Override both destinations explicitly.
yarn presentation:video --locale de --output .build/review-videos --artifacts .build/review-artifacts

By default, --artifacts resolves to the selected source directory’s artifacts/ folder. A custom --output automatically places artifacts beside it in <output>-artifacts/ unless --artifacts is supplied. The two output directories must be separate and cannot contain one another. --source and --cache also support isolated experiments.

The generator rejects missing narration sections and stale visuals. Refresh frames after changes to visible copy, artwork, screenshots, or branding. Content digests invalidate affected caches when narration, voice, pronunciation, rate, dependencies, images, or encoding settings change. Corrupt caches are rejected. --offline requires matching cached speech and cannot be combined with --force.

Each slide’s actual audio determines its duration, with short lead-in and fade transitions. Existing outputs survive speech or encoding failures. A cache .lock prevents concurrent builds. Remove a stale lock only after confirming the previous build has ended. Deleting the ignored cache requires fresh synthesis next time.

After rebuilding, use yarn preview to review the production showcase and stop it with Ctrl+C afterward. The language selector releases the previous player and loads the next video paused at the beginning. Vite fingerprints video URLs and respects deployment subpaths.

Rebuild slides and PowerPoints

The editable exports are English, German, and French. Titles and body text remain editable. Screenshots and artwork are embedded images. PPTX notes contain the narration text, with no embedded audio or automatic timings.

The maintained render-slides.mjs regenerates frames, their manifest, and editable decks from the storyboard and narration. It uses Codex’s optional @oai/artifact-tool, Sharp, and presentation validation runtime. This authoring runtime is required for visual and deck regeneration and is separate from presentation:setup. Video regeneration from preserved frames works without it.

In Codex, obtain the installed locations using load_workspace_dependencies and the Presentations skill. Set the actual local paths, then run:

Terminal window
export ATRIUM_PRESENTATION_NODE_MODULES="/absolute/path/to/runtime/node_modules"
export ATRIUM_PRESENTATION_SKILL="/absolute/path/to/presentations/skill"
export ATRIUM_PRESENTATION_PYTHON="/absolute/path/to/runtime/python3"
# Rebuild all frames, editable PPTX files and notes, videos, artifacts, and apps.
yarn presentation:rebuild
# Or regenerate one language's deck and frames, followed by its video.
yarn presentation:slides --locale fr --update-artifacts
yarn presentation:video --locale fr
yarn build

--update-artifacts first validates a new draft in .build/presentation/, then replaces the corresponding versioned file under docs/presentation/artifacts/decks/ and refreshes its PNG frames and manifest. Without that flag, presentation:slides leaves the revised deck in a fresh ignored directory. --output NEW_DIRECTORY chooses a draft location and cannot be combined with --update-artifacts. Existing draft PPTX files are never overwritten. Inspect the resulting slides after visual changes. Keep artwork and the actual Agon logo intact unless a redesign is requested.

Refresh product screenshots

Capture uses the existing Playwright dependency and an explicitly supplied local showcase. From the repository root:

Terminal window
yarn build
yarn playwright install chromium
# In another terminal. Stop with Ctrl+C afterward.
yarn preview
# Capture one language, or omit --locale for all three.
yarn presentation:capture --url http://127.0.0.1:4173/ --locale en
# Then regenerate the deck, frames, and video using the commands above.

The URL may include a deployment base path. --output .build/presentation-captures isolates new screenshots for review. The tool uses isolated preferences, real charts and maps, a local echo terminal, and a local noVNC RFB fixture. It closes its browser on completion or failure. It does not own the supplied preview server. When native Chromium is unavailable, use the repository’s pinned Playwright container and a reachable fixture URL.

Verification and provenance

Terminal window
yarn presentation:test
yarn presentation:check
yarn check

Python tests cover narration, pronunciation, validation, cache invalidation, offline failures, caption timing, separate output routing, and preservation of prior outputs. They need neither network nor optional speech dependencies. For player or output changes, follow production browser and package verification. Inspect local package archives to ensure they contain only final presentation videos. No authoring artifacts should enter a released package or application.

The original screenshots come from the production showcase on 2026-09-19 and contain demonstration data. Opening artwork is an AI-generated concept inspired by the supplied great.png, not a photograph of company premises or a promise of illustrated infrastructure. The original Agon logo is preserved. Edge TTS generates synthetic narration, normalized to −16 LUFS and assembled with FFmpeg. Videos currently run approximately four to five minutes. New wording changes duration automatically.

The repository skill is linked from AGENTS.md. It is not installed globally. This workflow never commits, uploads, publishes packages, or deploys automatically.

Author

Laurent Declercq l.declercq@agon-innovation.ch

License

Unless otherwise stated all source code is licensed under LGPL 2.1 and has the following copyright:

© 2026, Agon Partners Innovation AG, All rights reserved.

The design material and the “Agon Ātrium” trademark is the property of their authors. Reuse of them without prior consent of their respective authors is strictly prohibited.

Version

Version: 20260921