agentsclimarketplace

Csv landscape video pipeline

Skill Yash-Kavaiya/csv-quiz-reels-skills/skills/creative/csv-landscape-video-pipeline

Hermes Agent skills: CSV practice-test reels (9:16) + landscape quiz videos (16:9) with bulk/resumable pipelines and multi-platform publish metadata.

Install
npx -y skills add Yash-Kavaiya/csv-quiz-reels-skills --skill csv-landscape-video-pipeline

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • 27 days oldThe repository was created 27 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Create landscape 16:9 Manim videos from CSV question banks with NVIDIA branding and TTS voiceover

SKILL.md

12.8 KB, as published. Nobody here has run it

CSV Landscape Video Pipeline (16:9)

When to Use

Use when users want to convert a CSV file of practice/exam questions (typically 50-100 questions) into a single landscape 16:9 educational video with:

  • NVIDIA green/black branding (#76B900 on #050805)
  • Professional question presentation (question card → options → answer reveal → explanation)
  • TTS voiceover (Sarvam AI English voice or fallback TTS)
  • Single long-form video (~10-20 minutes for 60 questions)
  • Production-quality output ready for YouTube/education platforms

Prerequisites

  • Python 3.10+
  • Manim Community Edition v0.19+
  • LaTeX (TeX Live / MiKTeX / MacTeX)
  • ffmpeg
  • Python packages: pandas, edge-tts (fallback), requests, tqdm
  • Optional: Sarvam AI API key for premium TTS

NVIDIA Brand Colors (Official)

RoleHexUsage
Background#050805Scene background (near-black)
Primary Green#76B900NVIDIA brand green - accents, highlights, correct answers
Panel Background#101510Question/option panel backgrounds
Text Primary#F5F7F5Primary text (questions, options)
Text Muted#B8C2B8Secondary text (explanations, metadata)
Correct Green#76B900Correct answer highlight
Incorrect Red#E84D3DIncorrect answer highlight
Accent Blue#76B900Progress bars, accents

Video Specifications (Landscape 16:9)

ParameterValue
Resolution1920×1080 (Full HD)
Aspect Ratio16:9
Frame Rate30 FPS (production), 15 FPS (draft)
Quality-qh (1080p60) production, -ql (480p15) draft
Duration~10-15 seconds per question → ~10-15 min for 60 Q
Audio48kHz stereo, TTS voiceover

CSV Expected Format

ColumnRequiredDescription
QuestionYesQuestion text
Question TypeYesmultiple-choice or multi-select
Answer Option 1..6YesOption text (up to 6)
Explanation 1..6OptionalPer-option explanation
Correct AnswersYesComma-separated indices (1-based)
Overall ExplanationOptionalFull explanation
DomainOptionalCategory/domain tag

Pipeline Stages

CSV INPUT → PARSE → PLAN → RENDER SCENES → STITCH → ADD AUDIO → FINAL MP4

Stage 1: Parse CSV (parse_csv.py)

  • Read CSV with pandas
  • Validate required columns
  • Clean text (escape LaTeX special chars)
  • Output: questions.json + plan.md

Stage 2: Plan Scenes (plan.md)

Generate a scene plan with:

  • Scene sequence: Intro → Q1 → Q2 → ... → Q60 → Outro
  • Per-question timing: ~10-15s each
  • Color palette, typography, layout specs
  • TTS script per question

Stage 3: Generate Manim Scenes (generate_scenes.py)

One scene class per question + intro/outro:

  • IntroScene - Title card with exam name, question count
  • QuestionScene_N - Question card → Options → Reveal → Explanation
  • OutroScene - Summary, score, call-to-action

Stage 4: Render (render.sh)

manim -qh --format=mp4 script.py IntroScene QuestionScene_1 QuestionScene_2 ... OutroScene

Stage 5: Stitch (stitch.sh)

ffmpeg -f concat -safe 0 -i concat.txt -c copy stitched.mp4

Stage 6: Add TTS Audio (add_audio.py)

  • Generate TTS for each question's narration script
  • Concatenate audio files
  • Mix with video via ffmpeg

Stage 7: Final Output

final_output.mp4 - Ready for upload

Scene Design (Landscape 16:9)

Layout (1920×1080)

┌─────────────────────────────────────────────────────────────┐
│  [NVIDIA Logo]  NCP-AAI Practice Test 1              Q 1/60 │  ← Top bar (100px)
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   ┌─────────────────────────────────────────────────────┐  │
│   │  Question text (wrapped, centered, large font)      │  │  ← Question card (center)
│   │                                                     │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
│   ┌─────────────┐  ┌─────────────┐  ┌─────────────┐        │  ← Options grid (2x2 or 3x2)
│   │  A. Opt 1   │  │  B. Opt 2   │  │  C. Opt 3   │        │
│   └─────────────┘  └─────────────┘  └─────────────┘        │
│   ┌─────────────┐  ┌─────────────┐  ┌─────────────┐        │
│   │  D. Opt 4   │  │  E. Opt 5   │  │  F. Opt 6   │        │
│   └─────────────┘  └─────────────┘  └─────────────┘        │
│                                                             │
│   ┌─────────────────────────────────────────────────────┐  │  ← Answer reveal panel (bottom)
│   │  ✓ Correct Answer: B                                │  │
│   │  Explanation: [Overall Explanation text...]         │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
│                    [Progress: ████████░░ 1/60]              │  ← Progress bar
└─────────────────────────────────────────────────────────────┘

Animation Sequence Per Question (~12-15s)

TimeAnimationDuration
0.0-1.5sFade in question card + top bar1.5s
1.5-3.0sStagger fade-in option cards (A→B→C→D...)1.5s
3.0-3.5sPause for reading0.5s
3.5-5.0sHighlight correct answer (green glow), dim others1.5s
5.0-6.5sSlide up answer panel with explanation1.5s
6.5-12sHold for TTS narration (explanation)~5-6s
12-13sFade out all, progress bar advance1s

TTS Integration

Primary: Sarvam AI English Voice

  • API: https://api.sarvam.ai/text-to-speech
  • Voice: en-IN-neel (English male) or en-IN-ananya (English female)
  • Requires: SARVAM_API_KEY environment variable

Fallback: edge-tts (Microsoft Edge TTS)

  • Voice: en-US-GuyNeural (male) or en-US-AriaNeural (female)
  • No API key needed, works offline

TTS Script Per Question

"Question {n}: {question_text}. 
 Option A: {opt_a}. Option B: {opt_b}. Option C: {opt_c}. Option D: {opt_d}.
 The correct answer is {correct_letter}. {overall_explanation}."

Usage

# 1. Parse CSV and generate plan
python parse_csv.py "NCP-AAI_Practice_Test_1.csv"

# 2. Review plan.md, adjust if needed

# 3. Generate Manim scenes
python generate_scenes.py

# 4. Render draft (fast)
manim -ql script.py IntroScene QuestionScene_1 QuestionScene_2 ... OutroScene

# 5. Render production (slow, high quality)
manim -qh script.py IntroScene QuestionScene_1 QuestionScene_2 ... OutroScene

# 6. Stitch scenes
bash stitch.sh

# 7. Generate TTS audio
python add_audio.py --tts sarvam  # or --tts edge

# 8. Final output: final_output.mp4

Project Structure

csv-video-pipeline/
├── input/
│   └── NCP-AAI_Practice_Test_1.csv
├── parse_csv.py
├── generate_scenes.py
├── add_audio.py
├── script.py              # Generated Manim script
├── plan.md                # Generated scene plan
├── questions.json         # Parsed questions
├── concat.txt             # ffmpeg concat list
├── render_draft.sh
├── render_prod.sh
├── stitch.sh
├── tts_scripts/           # Generated TTS text files
├── audio/                 # Generated WAV/MP3 files
├── media/                 # Manim output
│   └── videos/script/1080p60/
└── final_output.mp4       # Final deliverable

Configuration (config.yaml)

video:
  resolution: "1920x1080"
  fps: 30
  quality: "high"  # high|medium|low
  question_duration: 14  # seconds per question

branding:
  background: "#050805"
  primary: "#76B900"
  panel_bg: "#101510"
  text_primary: "#F5F7F5"
  text_muted: "#B8C2B8"
  correct: "#76B900"
  incorrect: "#E84D3D"

tts:
  provider: "sarvam"  # sarvam|edge
  sarvam_voice: "en-IN-neel"
  edge_voice: "en-US-GuyNeural"
  sample_rate: 48000

intro:
  title: "NCP-AAI Practice Test 1"
  subtitle: "60 Questions • Agent Architecture & Development"
  duration: 5

outro:
  title: "Practice Test Complete"
  subtitle: "Review your answers and improve!"
  duration: 5

Verification Checklist

Before final delivery, verify:

  • Video resolution: 1920×1080, 30fps
  • Duration: ~12-15 minutes for 60 questions
  • Audio: Clear TTS, synced with visuals
  • No text overflow/cutoff in any scene
  • Correct answer highlighting works
  • Progress bar increments correctly
  • NVIDIA branding consistent throughout
  • Final file size reasonable (<2GB for 1080p30)

Troubleshooting

\n\n| Issue | Fix |\n|-------|-----|\n| LaTeX errors in text | Escape _, %, $, #, &, {, }, ~, ^, \\ in parse_csv.py |\n| Text overflow | Reduce font size, increase panel height, or split long questions |\n| TTS too fast/slow | Adjust question_duration in config, or add SSML <break> tags |\n| Render too slow | Use -ql for draft, -qm for medium, only -qh for final |\n| Audio sync drift | Ensure TTS sample rate matches video (48kHz), use ffmpeg -af aresample=48000 |\n| IndentationError: unexpected indent in generate_scenes.py | The skill file's helper functions section (lines 100-175) must use 4-space indentation, not 8. Lines 101-174 inside generate_script() should be indented by 4 spaces relative to the function. |\n| SyntaxError in generated script.py (unterminated string) | The escape_latex function in generate_scenes.py writes LaTeX escape dict to the generated script. Use exactly 4 backslashes in the skill source: \"'\\\\\\\\\\\\\\\\': r'\\\\\\\\textbackslash{}'\" (produces '\\\\\\\\': r'\\\\textbackslash{}' in script.py). 8 backslashes in source = double-escaped output = broken syntax. |\n| CRLF line endings causing parse errors | Normalize to LF: dos2unix generate_scenes.py or sed -i 's/\\r//g' generate_scenes.py before running. |\n\n## References

IssueFix
LaTeX errors in textEscape _, %, $, #, &, {, }, ~, ^, \ in parse_csv.py
Text overflowReduce font size, increase panel height, or split long questions
TTS too fast/slowAdjust question_duration in config, or add SSML <break> tags
Render too slowUse -ql for draft, -qm for medium, only -qh for final
Audio sync driftEnsure TTS sample rate matches video (48kHz), use ffmpeg -af aresample=48000

Related Skills

  • csv-quiz-video — Alternative approach: renders one clip per question (resumable), beat-driven audio sync via add_sound, preview mode, per-domain voiceover. Better for long-form quiz videos where resumability and voice variety matter.
  • manim-video — Core Manim animation patterns for educational content.
  • manim-reels — Vertical 9:16 reel patterns (adaptable to landscape).

Architecture Comparison

Aspectcsv-quiz-videocsv-landscape-video-pipeline (this skill)
Scene structureOne clip per question (resumable)One giant script with all scenes
Audio syncBeat-driven per clip (add_sound + wait)Post-render TTS concat + ffmpeg mix
Resumability✅ Skip existing clips❌ Full re-render on change
Preview mode--preview (first N questions)Manual scene selection
ParallelizationPossible (independent clips)Sequential
ComplexityHigher (orchestrator + env vars)Lower (single script)

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.