CLI tool for generating 60-second short films via AI video APIs
Project description
🎬 Short Film
Generate 60-second short films using AI video generation APIs. Creates cinematic videos by chaining clips together using last-frame-to-first-frame transitions.
✨ Features
- 🎥 Multiple Video Providers: OpenAI Sora and Google Gemini support
- 🎨 8 Film Styles: Cinematic, noir, anime, documentary, sci-fi, fantasy, horror, comedy
- 🎵 Music Vibes: Epic, suspenseful, calm, upbeat, dark, whimsical
- 🔗 Frame Chaining: Automatically chains clips by using the last frame as the first frame of the next clip
- 💾 Resume Support: Interrupted generations can be resumed from the last checkpoint
- 🎯 Interactive & Non-interactive: Use conversationally or with config files
- 📊 Progress Tracking: Beautiful progress bars and status updates
🚀 Quick Start
Installation
# Using uv (recommended)
uv tool install short-film
# Using pipx
pipx install short-film
# Using pip
pip install short-film
Usage
Interactive Mode (Recommended)
short-film generate
You'll be guided through the process:
- Enter your film premise
- Choose a visual style
- Pick a music vibe
- Watch as your film is generated!
Non-Interactive Mode
short-film generate \
--premise "A lone astronaut discovers an alien artifact on Mars" \
--style scifi \
--music-vibe suspenseful \
--provider openai \
--duration 60
List Available Options
# Show all film styles
short-film styles
# Show all music vibes
short-film vibes
🎬 How It Works
- Align on Premise: Describe your short film concept
- Choose Style & Music: Pick from cinematic styles and music vibes
- Generate Starting Frame: AI creates the opening shot using DALL-E
- Chain Video Clips: Each 10-second clip uses the previous clip's last frame as its first frame
- Stitch Together: All clips are combined into a 60-second film
The secret sauce: By chaining the last frame of each clip to the first frame of the next, we create smooth transitions and can exceed single-clip duration limits!
🔑 Setup
You'll need API keys for the video generation providers:
OpenAI (Sora)
export OPENAI_API_KEY="sk-..."
Google Gemini
export GEMINI_API_KEY="..."
📖 Advanced Usage
Resume Interrupted Generation
If generation is interrupted, simply run the same command again:
short-film generate --resume
The tool automatically saves progress after each step and will continue from where it left off.
Custom Output Directory
short-film generate \
--premise "Your premise" \
--output /path/to/output
Disable Interactive Mode
short-film generate \
--no-interactive \
--premise "Your premise"
🎨 Film Styles
- cinematic: Dramatic, film-like quality with professional cinematography
- noir: Black and white, high contrast, dramatic shadows
- anime: Japanese animation style with vibrant colors
- documentary: Realistic, natural lighting, authentic feel
- scifi: Futuristic, high-tech, neon-lit environments
- fantasy: Magical, ethereal, fantastical elements
- horror: Dark, ominous, unsettling atmosphere
- comedy: Bright, colorful, lighthearted tone
🎵 Music Vibes
- epic: Grand, sweeping orchestral music
- suspenseful: Tense, dramatic, keeps you on edge
- calm: Peaceful, relaxing, ambient
- upbeat: Energetic, positive, fun
- dark: Ominous, foreboding, intense
- whimsical: Playful, quirky, lighthearted
- none: No music (video only)
🛠️ Requirements
- Python 3.9+
- ffmpeg (for video stitching)
- OpenAI API key (for Sora) or Google Gemini API key
Installing ffmpeg
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt install ffmpeg
# Amazon Linux
sudo dnf install ffmpeg
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
📝 License
MIT License - see LICENSE file for details.
🙏 Credits
Built with:
- OpenAI Sora - AI video generation
- Google Gemini - Alternative video generation
- Typer - CLI framework
- Rich - Terminal formatting
Made with ❤️ by Aaron Levin
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file short_film-0.1.0.tar.gz.
File metadata
- Download URL: short_film-0.1.0.tar.gz
- Upload date:
- Size: 18.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0e83fe347b025a8a6147e52eeecb9199f5690dc38db0a9aca0905eded6a32844
|
|
| MD5 |
9eadabaf2ba8e55c7443cda2ed735f41
|
|
| BLAKE2b-256 |
58185dda46e7247c26b52136ce369c9298385f7f56eb1a2499accb9dcc1ec4eb
|
File details
Details for the file short_film-0.1.0-py3-none-any.whl.
File metadata
- Download URL: short_film-0.1.0-py3-none-any.whl
- Upload date:
- Size: 17.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7e52c5ba71b0523be67d2205ecf7d1b767902cfd8fb152dd3f17900666920555
|
|
| MD5 |
0eb24f46f20505056488748077519d14
|
|
| BLAKE2b-256 |
808c2b7ca69cdd5b4fd6785c103fae578616eaecd1f1531221b3578467565a7b
|