Building a Documentary with AI: 15 Atmospheric Clips from Veo 3.1
This project demonstrates how to use Google’s Veo 3.1 AI video generation model to create atmospheric background clips for documentary filmmaking. The toolkit generates 15 cinematic clips totaling ~112 seconds, each designed as a backdrop for quote overlays in post-production.
The Concept: “In His Own Words”
The documentary concept overlays verified political quotes onto atmospheric visuals—storm clouds, American symbols in shadow, abstract textures—creating an emotional resonance without depicting specific individuals. Each clip is designed with a dark lower third for text placement.
The 15 Generated Clips
Each video below was generated using Veo 3.1 with carefully crafted prompts. Click to play.
Hover or tap to play each clip
Opening: Dust Particles
Soft dust particles floating in a beam of harsh white light against black void. Title card background.
Storm Clouds
Ominous storm clouds rolling slowly, dark grey and navy blue palette with distant lightning.
"Maybe we'll give that a shot some day." — on president for life, March 2018
Liberty Face in Shadows
Low-angle close-up of Statue of Liberty's face with dramatic chiaroscuro lighting.
"We fell in love. He wrote me beautiful letters." — on Kim Jong Un, September 2018
Flag in Slow Motion
Desaturated American flag waving against overcast grey sky, almost monochrome.
"I said, 'This is genius.'" — on Putin, February 22, 2022
Constitution Texture
Extreme close-up of aged parchment paper with raking side light revealing texture.
"...allows for the termination of all rules...even those found in the Constitution." — December 2022
Chains and Rust
Heavy iron chains with deep rust and corrosion, harsh side lighting creating dramatic shadows.
"...that live like vermin within the confines of our country." — Veterans Day 2023
Smoke Rising
Wispy white smoke rising against pure black, catching harsh side light.
"They're poisoning the blood of our country." — December 2023
Capitol in Fog
U.S. Capitol dome silhouette emerging from heavy morning fog, pre-dawn blue hour.
"I am your retribution." — CPAC 2023
Breaking Glass
Extreme slow-motion of glass shattering, fragments suspended catching backlight.
"No, no, no. Other than Day One." — on being a dictator, December 2023
Rain on Window
Close-up of rain streaming down window glass with blurred city lights beyond.
"The enemy from within...is more dangerous than China, Russia..." — October 2024
Liberty's Torch
Close-up of Liberty's torch and flame against stormy sky, appearing almost extinguished.
"You won't have to vote anymore..." — July 2024
Floating Embers
Glowing orange embers and sparks floating upward against pure black background.
"No. I think they haven't gone far enough." — on ICE raids, November 2025
Washington Monument
Washington Monument silhouette emerging from dense ground fog at dawn.
"...either the nice way or the more difficult." — on Greenland, January 2026
Ink Spreading
Black ink slowly spreading through clear water, tendrils reaching outward.
"This is, in essence, a federal invasion..." — Minnesota AG, January 2026
Finale: Liberty Full
Wide shot of complete Statue of Liberty at golden hour, slow push-in toward her face.
The pattern was always visible. The words were always there.
15
Video Clips
112s
Total Duration
9:16
Aspect Ratio
Veo 3.1
AI Model
The Python Generator Script
The complete script below generates all clips using Google’s Veo 3.1 API. Each prompt is carefully crafted for cinematic, documentary-style output.
Prerequisites
# Install the Google GenAI SDK
pip install google-genai
# Set your API key
export GEMINI_API_KEY="your-api-key-here"
Usage
# List all available clips
python veo_documentary_generator.py list
# Generate all clips
python veo_documentary_generator.py all
# Generate a single clip
python veo_documentary_generator.py single 03_liberty_face_shadows
# Generate a range (clips 0-4)
python veo_documentary_generator.py range 0 5
# Show quote sequence for post-production
python veo_documentary_generator.py quotes
Full Script
#!/usr/bin/env python3
"""
Veo 3.1 Documentary Video Generator
Generates atmospheric background clips for quote-based political documentary
Usage:
export GEMINI_API_KEY="your-api-key"
python veo_documentary_generator.py
"""
import os
import time
from datetime import datetime
from google import genai
from google.genai import types
# Client initialized lazily when needed
client = None
def get_client():
"""Initialize and return the Gemini client."""
global client
if client is None:
api_key = os.environ.get("GEMINI_API_KEY")
if not api_key:
raise ValueError(
"GEMINI_API_KEY environment variable not set.\n"
"Set it with: export GEMINI_API_KEY='your-api-key'\n"
"Get your API key from: https://aistudio.google.com/apikey"
)
client = genai.Client(api_key=api_key)
return client
# Output directory
OUTPUT_DIR = os.path.join(os.getcwd(), "veo_clips")
os.makedirs(OUTPUT_DIR, exist_ok=True)
# Documentary clip prompts (15 total)
DOCUMENTARY_CLIPS = [
{
"name": "01_opening_dust_particles",
"prompt": """Slow cinematic shot of soft dust particles floating in a single beam of
harsh white light against a completely black void background. Particles drift slowly
left to right. Minimal, moody, mysterious atmosphere. Shallow depth of field creates
bokeh effect on distant particles. Dramatic chiaroscuro lighting. No people, no objects,
pure atmosphere. Silent, no audio. 9:16 vertical format. No text, no subtitles,
no watermarks, no logos.""",
"duration": 8
},
# ... (14 more clips defined similarly)
]
def generate_video_sync(clip_config: dict) -> str:
"""Generate a single video clip using Veo 3.1 synchronously."""
name = clip_config["name"]
prompt = clip_config["prompt"]
duration = clip_config.get("duration", 8)
print(f"Generating: {name} ({duration}s)")
try:
api_client = get_client()
# Start video generation
operation = api_client.models.generate_videos(
model="veo-3.1-generate-preview",
prompt=prompt,
config=types.GenerateVideosConfig(
aspect_ratio="9:16",
number_of_videos=1,
duration_seconds=duration,
)
)
# Poll for completion
while not operation.done:
time.sleep(10)
operation = api_client.operations.get(operation)
if operation.error:
print(f"ERROR: {operation.error}")
return None
# Download and save
if operation.response and operation.response.generated_videos:
video = operation.response.generated_videos[0]
output_path = os.path.join(OUTPUT_DIR, f"{name}.mp4")
video_data = api_client.files.download(file=video.video)
with open(output_path, "wb") as f:
f.write(video_data)
print(f"✓ Saved: {output_path}")
return output_path
except Exception as e:
print(f"ERROR: {str(e)}")
return None
def generate_all_clips():
"""Generate all documentary clips sequentially."""
for i, clip in enumerate(DOCUMENTARY_CLIPS):
print(f"[{i+1}/{len(DOCUMENTARY_CLIPS)}] {clip['name']}")
generate_video_sync(clip)
time.sleep(5) # Rate limiting pause
if __name__ == "__main__":
import sys
if len(sys.argv) > 1 and sys.argv[1] == "all":
generate_all_clips()
else:
print("Usage: python veo_documentary_generator.py all")
Technical Specifications
| Specification | Value |
|---|---|
| Model | Veo 3.1 (veo-3.1-generate-preview) |
| Resolution | 720p (1080p with AI Ultra) |
| Aspect Ratio | 9:16 vertical |
| Frame Rate | 24fps |
| Max Duration | 8 seconds per clip |
| Format | MP4 |
| Total Clips | 15 |
| Total Duration | ~112 seconds |
API Costs (Approximate)
- Each 8-second clip: ~$3.20 with AI Pro
- Full 15-clip project: ~$45-50
- Generation time: 2-5 minutes per clip
Post-Production Workflow
Recommended Editors
| Tool | Best For | Cost |
|---|---|---|
| CapCut | Quick edits, auto-captions | Free |
| DaVinci Resolve | Professional quality | Free |
| Premiere Pro | Full production | $22.99/mo |
Text Overlay Guidelines
- Font: Clean sans-serif (Inter, Helvetica, Arial)
- Size: 48-72pt for quotes, 36pt for attribution
- Position: Lower third with safe margins
- Duration: 3-5 seconds per quote segment
- Animation: Simple fade in/out (200-400ms)
Export Settings
- Resolution: 1080 x 1920 (9:16)
- Codec: H.264 or H.265
- Bitrate: 10-15 Mbps
- Frame Rate: 24fps
The Full Quote Sequence
For post-production reference, here’s the complete quote sequence to overlay on each clip:
| Clip | Quote |
|---|---|
| 01 | [Title card - no quote] |
| 02 | ”Maybe we’ll give that a shot some day.” — March 2018 |
| 03 | ”We fell in love. He wrote me beautiful letters.” — September 2018 |
| 04 | ”I said, ‘This is genius.’…How smart is that?” — February 22, 2022 |
| 05 | ”…allows for the termination of all rules…even those found in the Constitution.” — December 2022 |
| 06 | ”…that live like vermin within the confines of our country.” — Veterans Day 2023 |
| 07 | ”They’re poisoning the blood of our country.” — December 2023 |
| 08 | ”I am your warrior. I am your justice…I am your retribution.” — CPAC 2023 |
| 09 | ”No, no, no. Other than Day One.” — December 2023 |
| 10 | ”The enemy from within…is more dangerous than China, Russia…” — October 2024 |
| 11 | ”You won’t have to vote anymore…We’ll have it fixed so good…” — July 2024 |
| 12 | ”No. I think they haven’t gone far enough.” — November 2025 |
| 13 | ”…either the nice way or the more difficult.” — January 2026 |
| 14 | ”This is, in essence, a federal invasion…it must stop.” — MN AG, January 2026 |
| 15 | [The pattern was always visible. The words were always there.] |
Resources
- Google AI Studio - Get your API key
- Veo Documentation - Official docs
- Full Source Code - Complete Python script