Skip to main content
ffmpeg must be installed and available on your PATH. Splyce uses ffmpeg for all video assembly and splicing operations. Video generation will fail without it.

Prerequisites

Before you start, make sure you have the following installed:
  • Python 3.10+ — check with python --version or python3 --version
  • pip — comes with Python; check with pip --version
  • ffmpeg — install via your system package manager (see below)
  • git — to clone the repository
brew install ffmpeg
Verify ffmpeg is on your PATH:
ffmpeg -version

Installation

1

Clone the repository

git clone https://github.com/rushilkukreja/hoohacks.git
cd hoohacks
2

Create a virtual environment

python -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate
3

Install dependencies

pip install -r requirements.txt
4

Create your .env file

Create a .env file at the project root with at minimum your Gemini API key:
GEMINI_API_KEY=your_key_here

# Optional: required for voiceover generation
ELEVENLABS_API_KEY=your_key_here
Get a Gemini API key from Google AI Studio.For a full list of supported variables, see Environment variables.
5

Start the server

Run the server using the provided run.py launcher:
python run.py
This starts Uvicorn with --reload enabled on 127.0.0.1:8000. The process reads the PORT environment variable if you need a different port.Alternatively, invoke Uvicorn directly:
uvicorn app.main:app --reload --host 127.0.0.1 --port 8000
6

Verify the server is running

Send a request to the health endpoint:
curl http://127.0.0.1:8000/api/health
Expected response:
{
  "status": "ok",
  "service": "splyce-ad-personalization",
  "prompt_api": "product-prompt-v2-no-standard-ad",
  "gemini_configured": true,
  "elevenlabs_configured": false
}
gemini_configured is true when GEMINI_API_KEY is set. elevenlabs_configured is true when ELEVENLABS_API_KEY is set.

Production considerations

  • Disable reloadreload=True watches the filesystem for code changes. Remove it in production (--no-reload with Uvicorn, or edit run.py to pass reload=False).
  • Set a stable PORT — export PORT in your environment or process manager config so the port is predictable across restarts.
  • Use a reverse proxy — run Splyce behind nginx or a cloud load balancer to handle TLS termination, request buffering, and rate limiting.
  • Increase upload limits — the default MAX_VIDEO_UPLOAD_MB is 200. Adjust this to match your infrastructure limits and reverse proxy body-size settings.

Build docs developers (and LLMs) love