Cyrus

cyrus-avatar

← All skills
/root/.openclaw/workspace/skills/cyrus-avatar/SKILL.md
Generate on-brand Cyrus talking-head videos with the exact locked avatar image, voice, and settings used for every public Cyrus video so far (TikToks, landing, YouTube welcome). Use this any time new Cyrus video or audio is needed — do NOT improvise avatar/voice choice.

Cyrus Avatar — Locked Brand Generation

All public Cyrus content (TikToks v3–v5, landing-page videos, YouTube welcome, the Twitter profile image) uses the same avatar, voice, and settings. This skill locks that choice in.

Do not change these values without explicit instruction from Ole Christian. Brand consistency depends on it.

Locked brand configuration

AssetValue
Avatar image (VIDEO)workspace/media/tool-image-generation/cyrus-dev-bg-v1---76d50711-a70f-40d1-84c9-e99d9510c1d9.png
Twitter profileworkspace/media/tool-image-generation/cyrus-twitter-profile-grey-hoodie---d49e894b-c954-4f81-a5ed-ba0ef4fe4eaf.png
NOT used for videocyrus-american-v1 variants — these were rejected studies (light background, "Cyrus" t-shirt). Do not use.
VoiceEric — cjVigY5qzO86Huf0OWal (ElevenLabs premade)
Modeleleven_multilingual_v2
Voice settingsstability=0.35, similarity_boost=0.85, style=0.4, use_speaker_boost=true (expressive — confirmed via Apr 20 A/B)
CharacterWarm, authoritative
EthnicityWhite American male (confirmed preferred; not the alt African-American variant from TikTok 1)
BackgroundDark developer office — monitors, ambient glow — part of the avatar PNG, not added separately
WardrobeBlack zip-up hoodie (built into the avatar image)
Video resolution720p (VEED Fabric 1.0 via Fal)
SubtitlesMontserrat, bold, white with black stroke, yellow highlight, 2 words per line, bottom position

Prerequisites

  • ~/.config/elevenlabs/api_key — ElevenLabs key
  • ~/.config/fal/api_key — Fal API key (also settable via FAL_KEY env)
  • fal-client Python package: pip install --break-system-packages fal-client
  • The avatar image present at the locked path above

Usage

One-shot: script → final subtitled video

python3 ~/.openclaw/workspace/skills/cyrus-avatar/scripts/make-cyrus-video.py \
  --script "Your script here. Keep it under 60 seconds for best lip-sync quality." \
  --output ~/Desktop/cyrus-new.mp4

This uses every locked value: the canonical avatar, the Eric voice, the matching settings, 720p output, and auto-subtitles in the brand style. No flags needed for brand compliance.

Audio only (for reuse / remixing)

python3 ~/.openclaw/workspace/skills/cyrus-avatar/scripts/make-cyrus-video.py \
  --script "..." \
  --audio-only \
  --output ~/Desktop/cyrus-audio.mp3

Reuse existing audio (skip TTS)

python3 ~/.openclaw/workspace/skills/cyrus-avatar/scripts/make-cyrus-video.py \
  --audio existing.mp3 \
  --output ~/Desktop/cyrus-new.mp4

Disable subtitles (raw video output)

python3 ~/.openclaw/workspace/skills/cyrus-avatar/scripts/make-cyrus-video.py \
  --script "..." \
  --no-subtitles \
  --output ~/Desktop/cyrus-raw.mp4

Output location

Put generated files in workspace/media/ so they're tracked by the media backup system (not committed to git, but preserved).

Naming convention: cyrus-<purpose>-<version>-<variant>.mp4, e.g.:

  • cyrus-landing-part1-subtitled.mp4
  • cyrus-tiktok-v6-raw.mp4
  • cyrus-youtube-welcome-subtitled.mp4

Cost estimate (per video)

  • ElevenLabs TTS: ~$0.15–0.30 per minute
  • Fal Fabric 1.0: ~$0.10–0.20 per video
  • Fal auto-subtitles: ~$0.05
  • ~$0.30–0.55 per ~45-second finished video

Historical context

All Cyrus audio/video in workspace/media/ was generated with these exact settings on the previous VPS (Apr 5 – Apr 15). After the Apr 18 compromise + nuke + restore, these settings are now the single source of truth.

Apr 20 correction: The skill initially pointed at cyrus-american-v1 based on imprecise memory notes. Frame-by-frame comparison of cyrus-tiktok-v5-raw.mp4 and cyrus-landing-page-final-raw.mp4 against each source PNG confirmed cyrus-dev-bg-v1 is the correct production avatar. The cyrus-american-v1 variants were studies that never made it to production.

If you ever need to verify output matches the historical samples, compare against:

  • workspace/media/cyrus-tiktok-v5-raw.mp4 (for face + voice match)
  • workspace/media/cyrus-eric-v1-audio.mp3 (for audio-only verification)

Related

  • skills/talking-head/ — generic underlying pipeline (also has Eric voice registered under eric/cyrus shortcuts)
  • workspace/media/ — all historical and new Cyrus media (gitignored, backed up separately)