The Orpheus System transforms static slides into interactive lecture videos with lifelike professor avatars, combining expressive narration, visual presence, and dynamic content to create engaging, personalized learning experiences
Python
21
218 commits
updated May 26, 2026
The Orpheus System transforms static slides into interactive lecture videos with lifelike professor avatars, combining expressive narration, visual presence, and dynamic content to create engaging, personalized learning experiences.
The Orpheus system is composed of multiple specialized services, each handling different aspects of the lecture generation pipeline. Below you can find links to the technology-specific documentation and implementation details for each service component.
| Service | Documentation |
|---|---|
| Avatar Service | orpheus/avatar |
| Core Service | orpheus/core |
| Document Intelligence Service | orpheus/docint |
| Slides Service | orpheus/slides |
| Status Service | orpheus/status |
| User Interface | orpheus/ui |
| Service | Description | OpenAPI Specification |
|---|---|---|
| Answer Generation Service | Handles user prompts, creates lecture generation jobs, and returns a lectureId. | Answer Generation Service |
| Avatar Generation Service | Produces short videos of lifelike professor avatars from a given text for the voice track with expressive narration. | Code not generated from API spec yet Avatar Generation Service, instead the endpoint definition is found in video.py |
| Content Retrieval Service | Extracts and retrieves relevant content from instructor-provided slides and materials to support question answering. | Content Retrieval Service |
| Generation Status Service | Handles the status of a lecture generation job. | Generation Status Service |
| Generated Avatar Service | Provides the generated avatar videos, retrieved by related promptId. | Generated Avatar Service |
| Generated Slide Service | Provides the generated slides. Retrieval is done with the related promptId. | Generated Slides Service |
| Lecture Ingestion Service | Loads received lectures into vector database and allows deleting information related to already uploaded lecture slides. | Lecture Ingestion Service |
| Slide Generation Service | Generates lecture slides that conform to the layout of the respective course from a detailed lecture script. | Slide Generation Service |
| Slide Postprocessing Service | Converts slides to HTML and uploads generated code to the Generated Slide Delivery (CDN) for distribution. | Slide Postprocessing Service |
| Video Push Service | Uploads generated avatar videos to the Generated Avatar Delivery (CDN) for distribution. | Code not generated from API spec yet Video Push Service |
The lecturer view can be accessed via the Admin Button located at the top right.
To personalize the course delivery, the lecturer is required to upload both avatar images and voice samples, followed by the relevant course materials.
Three distinct avatars should be provided to represent different stages of the lecture:
Beginning Avatar
Default/Middle Avatar
Ending Avatar
Similarly, three voice samples should be uploaded, aligned with the same lecture stages as the avatars:
Choose your level of expertise by selecting a suitable character:

Enter your question or choose from the predefined ones:

Wait for for the generation process. In the meantime a textual answer will be given. The lectre will start as soon as
the first video is done:

Watch the video:

.env file in the root directory
cp exampleEnv .env
MODEL_NAME,
SPLITTING_MODEL, SLIDESGEN_MODEL)
Generate short-term API keys (Generate long-term API keys did not work with our license)API Key that starts with bedrock-api-key...Inference profile ARN that starts with arn:aws:bedrock:....env file values with service specific .env filesThe project is based on python 3.13.7. We recommend using pyenv to manage your python versions.
sudo apt update
sudo apt install -y build-essential curl git \
libssl-dev zlib1g-dev libncurses5-dev libbz2-dev libreadline-dev \
libsqlite3-dev libffi-dev liblzma-dev tk-dev uuid-dev
curl https://pyenv.run | bash
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
exec "$SHELL" for the changes to take effect
exec "$SHELL"
pyenv install 3.13.7
pyenv global 3.13.7
python --version
Expected output: Python 3.13.7
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
Important: Restart your terminal or run exec "$SHELL" for the changes to take effect
exec "$SHELL"
pyenv install 3.13.7
pyenv global 3.13.7
python --version
Expected output: Python 3.13.7Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"; Remove-Item "./install-pyenv-win.ps1"
...cannot be loaded because running scripts is disabled on this system.Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
pyenv Command Not Found After Installationpyenv results in a command not found
error.PATH environment variable correctly, or your terminal
session needs to be refreshed.
PATH environment
variables.
%USERPROFILE%\.pyenv\pyenv-win\bin%USERPROFILE%\.pyenv\pyenv-win\shimspyenv Versionpyenv global or pyenv local, but running python --version shows your
old system version (or opens the Microsoft Store).PATH priority issue.
Start > Manage App Execution Aliases and turn off the
aliases for python.exe and python3.exe. This is the most common cause.PATH order: Ensure the pyenv shims and bin paths appear before any other Python
installation paths in your environment variables.pipx or poetry) using pip, but the command isn't
available in your terminal.pyenv shims so it's aware of the new executable.
pyenv rehash
(Optional) Check which version pyenv is managing
pyenv version
Expected output: 3.13.7 (set by C:\Users\YourUser.pyenv\pyenv-win\version)
We use Poetry as our dependency and environment management tool.
curl -sSL https://install.python-poetry.org | python3 -
~/.local/bin/poetry self update 2.2.1
export PATH="$HOME/.local/bin:$PATH"
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
poetry --version
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python -
Poetry is typically installed under:
$env:APPDATA\Python\Scripts
poetry self update 2.2.1
$env:Path += ";$env:APPDATA\Python\Scripts"
setx PATH "$($env:PATH)"
poetry --version
Run this command in your root directory to build all services, start them up under the project name orpheus, and pull any necessary images:
docker compose -p orpheus up --build
Python
77.2%
TypeScript
21.3%
The Orpheus System transforms static slides into interactive lecture videos with lifelike professor avatars, combining expressive narration, visual presence, and dynamic content to create engaging, personalized learning experiences
Python
21
218 commits
updated May 26, 2026
The Orpheus System transforms static slides into interactive lecture videos with lifelike professor avatars, combining expressive narration, visual presence, and dynamic content to create engaging, personalized learning experiences.
The Orpheus system is composed of multiple specialized services, each handling different aspects of the lecture generation pipeline. Below you can find links to the technology-specific documentation and implementation details for each service component.
| Service | Documentation |
|---|---|
| Avatar Service | orpheus/avatar |
| Core Service | orpheus/core |
| Document Intelligence Service | orpheus/docint |
| Slides Service | orpheus/slides |
| Status Service | orpheus/status |
| User Interface | orpheus/ui |
| Service | Description | OpenAPI Specification |
|---|---|---|
| Answer Generation Service | Handles user prompts, creates lecture generation jobs, and returns a lectureId. | Answer Generation Service |
| Avatar Generation Service | Produces short videos of lifelike professor avatars from a given text for the voice track with expressive narration. | Code not generated from API spec yet Avatar Generation Service, instead the endpoint definition is found in video.py |
| Content Retrieval Service | Extracts and retrieves relevant content from instructor-provided slides and materials to support question answering. | Content Retrieval Service |
| Generation Status Service | Handles the status of a lecture generation job. | Generation Status Service |
| Generated Avatar Service | Provides the generated avatar videos, retrieved by related promptId. | Generated Avatar Service |
| Generated Slide Service | Provides the generated slides. Retrieval is done with the related promptId. | Generated Slides Service |
| Lecture Ingestion Service | Loads received lectures into vector database and allows deleting information related to already uploaded lecture slides. | Lecture Ingestion Service |
| Slide Generation Service | Generates lecture slides that conform to the layout of the respective course from a detailed lecture script. | Slide Generation Service |
| Slide Postprocessing Service | Converts slides to HTML and uploads generated code to the Generated Slide Delivery (CDN) for distribution. | Slide Postprocessing Service |
| Video Push Service | Uploads generated avatar videos to the Generated Avatar Delivery (CDN) for distribution. | Code not generated from API spec yet Video Push Service |
The lecturer view can be accessed via the Admin Button located at the top right.
To personalize the course delivery, the lecturer is required to upload both avatar images and voice samples, followed by the relevant course materials.
Three distinct avatars should be provided to represent different stages of the lecture:
Beginning Avatar
Default/Middle Avatar
Ending Avatar
Similarly, three voice samples should be uploaded, aligned with the same lecture stages as the avatars:
Choose your level of expertise by selecting a suitable character:

Enter your question or choose from the predefined ones:

Wait for for the generation process. In the meantime a textual answer will be given. The lectre will start as soon as
the first video is done:

Watch the video:

.env file in the root directory
cp exampleEnv .env
MODEL_NAME,
SPLITTING_MODEL, SLIDESGEN_MODEL)
Generate short-term API keys (Generate long-term API keys did not work with our license)API Key that starts with bedrock-api-key...Inference profile ARN that starts with arn:aws:bedrock:....env file values with service specific .env filesThe project is based on python 3.13.7. We recommend using pyenv to manage your python versions.
sudo apt update
sudo apt install -y build-essential curl git \
libssl-dev zlib1g-dev libncurses5-dev libbz2-dev libreadline-dev \
libsqlite3-dev libffi-dev liblzma-dev tk-dev uuid-dev
curl https://pyenv.run | bash
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
exec "$SHELL" for the changes to take effect
exec "$SHELL"
pyenv install 3.13.7
pyenv global 3.13.7
python --version
Expected output: Python 3.13.7
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
Important: Restart your terminal or run exec "$SHELL" for the changes to take effect
exec "$SHELL"
pyenv install 3.13.7
pyenv global 3.13.7
python --version
Expected output: Python 3.13.7Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"; Remove-Item "./install-pyenv-win.ps1"
...cannot be loaded because running scripts is disabled on this system.Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
pyenv Command Not Found After Installationpyenv results in a command not found
error.PATH environment variable correctly, or your terminal
session needs to be refreshed.
PATH environment
variables.
%USERPROFILE%\.pyenv\pyenv-win\bin%USERPROFILE%\.pyenv\pyenv-win\shimspyenv Versionpyenv global or pyenv local, but running python --version shows your
old system version (or opens the Microsoft Store).PATH priority issue.
Start > Manage App Execution Aliases and turn off the
aliases for python.exe and python3.exe. This is the most common cause.PATH order: Ensure the pyenv shims and bin paths appear before any other Python
installation paths in your environment variables.pipx or poetry) using pip, but the command isn't
available in your terminal.pyenv shims so it's aware of the new executable.
pyenv rehash
(Optional) Check which version pyenv is managing
pyenv version
Expected output: 3.13.7 (set by C:\Users\YourUser.pyenv\pyenv-win\version)
We use Poetry as our dependency and environment management tool.
curl -sSL https://install.python-poetry.org | python3 -
~/.local/bin/poetry self update 2.2.1
export PATH="$HOME/.local/bin:$PATH"
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
poetry --version
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python -
Poetry is typically installed under:
$env:APPDATA\Python\Scripts
poetry self update 2.2.1
$env:Path += ";$env:APPDATA\Python\Scripts"
setx PATH "$($env:PATH)"
poetry --version
Run this command in your root directory to build all services, start them up under the project name orpheus, and pull any necessary images:
docker compose -p orpheus up --build
Python
77.2%
TypeScript
21.3%