A Python-based screenplay editor with Fountain format support, professional PDF output, backup management and AI support.
- Plain Text Editing: Write screenplays using industry-standard Fountain format
- PDF Export: Generate professional PDFs with Courier font and proper formatting
- Character Management: Track characters, descriptions, and character arcs
- Scene Organization: Automatic scene parsing and organization
- AI Assistant: Ollama integration for character arc and plot suggestions
- Auto-save: Automatic saving every 15 seconds (configurable)
- Industry Standard: Follows screenplay formatting conventions
- Enhanced Theming: 5 themes including evening (dark blue) and night (dark grey)
- Mobile Responsive: Optimized for mobile devices with touch-friendly controls
For the best experience, please use your phone in horizontal (landscape) orientation.
The application is designed primarily for desktop and horizontal mobile use. While some features work in vertical orientation, the editor and screenplay management interfaces are optimized for horizontal viewing.
- ✅ Editor: Full screenplay text with syntax guide visible
- ✅ Screenplay Cards: Proper button layout and spacing
- ✅ Scene Content: Optimal scrolling and readability
- ✅ AI Panel: Full functionality with prompt editing
⚠️ Editor: Syntax guide moves below text area (reduced functionality)⚠️ Screenplay Cards: Buttons stack vertically (less convenient)⚠️ Scene Content: Reduced scrolling height⚠️ General Layout: More scrolling required
- Chrome Mobile (Android) - Recommended
- Safari Mobile (iOS)
- Firefox Mobile
- Edge Mobile
- Rotate phone to horizontal orientation
- Use desktop view if available in browser settings
- Enable auto-rotation for best experience
- Consider using tablet for extended writing sessions
Deploy Screen Dreams instantly on your computer with a single command:
# Install UV (one-time setup)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Deploy Screen Dreams instantly
uvx git+https://github.com/opensourcemechanic/screen-dreams.git
# Open your browser to http://localhost:5000That's it! Screen Dreams is now running locally on your machine with:
- Complete web interface
- Local data storage (all files saved on your computer)
- AI features (if configured)
- Privacy (no data leaves your machine)
For detailed UVX instructions, see UVX Quick Start.
For modern, fast dependency management:
# Install uv (if not already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Clone and setup
git clone https://github.com/opensourcemechanic/screen-dreams.git
cd screen-dreams
# Create virtual environment and install dependencies
uv venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
uv pip install -e .
# Configure environment
cp .env.example .env
# Edit .env with your settings (SECRET_KEY is required)Traditional setup using Python's built-in virtual environment:
# Clone and setup
git clone https://github.com/opensourcemechanic/screen-dreams.git
cd screen-dreams
# Create virtual environment
python3 -m venv .venv
# Activate environment
# Linux/macOS:
source .venv/bin/activate
# Windows:
.venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Configure environment
cp .env.example .env
# Edit .env with your settings (SECRET_KEY is required)See SETUP.md for detailed setup instructions and troubleshooting.
For AI assistant features, install Ollama:
# Install Ollama (https://ollama.ai)
curl -fsSL https://ollama.ai/install.sh | sh
# Pull a model
ollama pull llama2
# Start Ollama
ollama run llama2The start.sh script auto-detects your environment and starts the server using the best available runtime:
| Runtime | Used when |
|---|---|
| uvx (recommended) | uvx is installed — dev mode uses Flask, prod mode uses gunicorn |
| Podman | uvx not found — maps $PORT on the host to port 5000 in the container |
| gunicorn | Podman not found but gunicorn is installed |
| Python | Last resort — creates .venv, installs dependencies, runs directly |
# Production mode on port 5000 (default)
./start.sh
# Development mode with auto-reload on port 5000
./start.sh dev
# Production mode on a custom port
PORT=8080 ./start.sh
# One-command via uvx (production, port 5000)
uvx git+https://github.com/opensourcemechanic/screen-dreams.git
# One-command via uvx on custom port
PORT=9000 uvx git+https://github.com/opensourcemechanic/screen-dreams.git screen-dreams-prodAll user accounts, screenplays, and uploads are stored in a single persistent directory that survives across uvx re-runs, upgrades, and restarts:
| Platform | Default location |
|---|---|
| Linux / macOS | ~/.local/share/screen-dreams/ |
| Override | Set DATA_DIR=/your/path |
# Use default location (~/.local/share/screen-dreams)
uvx git+https://github.com/opensourcemechanic/screen-dreams.git
# Use a custom location (e.g. a shared drive or Docker volume)
DATA_DIR=/mnt/data/screen-dreams uvx git+https://github.com/opensourcemechanic/screen-dreams.git screen-dreams-prodThe startup banner always prints the active data directory so you can confirm where data is being stored.
Stops all running Screen Dreams instances regardless of how they were started:
./stop.shHandles all deployment modes:
- uvx / screen-dreams entry point processes
- gunicorn workers
- Flask dev server (
run_dev.py,run.py) - Podman containers (by image or name)
- Docker containers (by image or name)
- Docker Compose services
- Open your browser to
http://localhost:5000(default) orhttp://localhost:<PORT>if you set a custom port - Login with the demo account:
- Email:
demo@example.com - Password:
demo123
- Email:
- Create your first screenplay!
INT. COFFEE SHOP - DAY
JOHN
(nervous)
Is anyone here?
John enters and looks around nervously.
FADE OUT.
screen-dreams/
├── app/
│ ├── __init__.py # Flask app initialization
│ ├── models.py # Database models
│ ├── routes.py # API routes
│ ├── screenplay.py # Fountain parser
│ ├── pdf_generator.py # PDF generation with ReportLab
│ ├── ai_assistant.py # Ollama AI integration
│ ├── templates/ # HTML templates (canonical)
│ └── static/ # CSS and JavaScript (canonical)
├── screenplays/ # Saved screenplay files
├── requirements.txt # Python dependencies
└── pyproject.toml # Package configuration
GET /api/screenplays- List all screenplaysPOST /api/screenplays- Create new screenplayGET /api/screenplay/<id>- Get screenplayPUT /api/screenplay/<id>- Update screenplayDELETE /api/screenplay/<id>- Delete screenplayGET /api/screenplay/<id>/pdf- Generate PDFPOST /api/screenplay/<id>/parse- Parse scenes and charactersGET /api/characters/<screenplay_id>- List charactersPOST /api/ai/character-arc- Get AI character arc suggestionPOST /api/ai/plot-development- Get AI plot suggestion
PDFs are generated with:
- Font: Courier 12pt (industry standard)
- Margins: 1.5" left, 1" right, 1" top/bottom
- Page Numbers: Top right corner
- Proper Element Formatting: Scene headings, character names, dialogue, etc.
- Character arc suggestions
- Plot development recommendations
- Dialogue enhancement
- Auto-completion for character names
Brian Nitz - Architect and AI Coordinator
Brian Nitz is the lead architect and AI coordinator for Screen Dreams, overseeing the technical design and AI integration aspects of the project.
Screen Dreams is licensed under a Modified MIT License with commercial use provisions.
- Free for: Individual users, non-commercial use, education, open source projects
- Commercial license required: When SaaS income exceeds $1000/month (standalone or bundled)
- Full license: See LICENSE.md for complete terms
Commercial licensing required for any individual or company whose total screen-dreams Software as a Service (SaaS) income exceeds $1000/month, regardless of whether screen-dreams is a stand-alone web application or part of a SaaS bundle.
For commercial licensing inquiries, please contact the project maintainer through the GitHub repository.
See LICENSE.md for the complete license text.