A replay-to-video converter for Project Ignis: EDOPro. https://echelon.arqalite.org/
Find a file
2026-03-01 10:26:31 +00:00
api feat: allow speeding up or slowing down gameplay 2026-02-21 18:17:10 +02:00
packages docs: update discord bot README 2026-03-01 10:26:31 +00:00
.dockerignore ci: make server image a tiny bit smaller 2026-02-25 22:53:59 +02:00
.env.example feat: embed Discord invite URL 2026-02-22 14:43:05 +02:00
.gitignore feat: implement server 2025-12-05 21:47:49 +02:00
.gitmodules ci: integrate EDOPro fork into build process 2026-02-20 21:53:52 +02:00
build-and-push.sh ci: split deployment from build process 2026-02-20 21:07:20 +02:00
Cargo.lock feat: add range request handling 2026-02-11 17:24:22 +02:00
Cargo.toml feat: add Discord bot 2025-12-22 20:33:11 +02:00
compose.yaml feat: exclude Discord bot from rate limiting 2026-02-10 22:32:43 +02:00
deploy.sh ci: split deployment from build process 2026-02-20 21:07:20 +02:00
discord.Dockerfile feat: add Discord bot 2025-12-22 20:33:11 +02:00
LICENSE feat: implement server 2025-12-05 21:47:49 +02:00
README.md docs: update README to better reflect the current state of Echelon 2026-03-01 10:18:57 +00:00
server.Dockerfile ci: make server image a tiny bit smaller 2026-02-25 22:53:59 +02:00
webui.Dockerfile feat: embed Discord invite URL 2026-02-22 14:43:05 +02:00

Project Echelon

A replay-to-video converter for Project Ignis: EDOPro.

Quick Start

Using the Discord Bot (@Echelon)

Add the bot to your own server using this install link.

  1. Send a replay - call the /echelon convert command and attach your replay file
  2. Get queued - Echelon confirms your replay is queued
  3. Wait for processing - You'll receive status updates as the replay is processed
  4. Download video - Echelon sends the finished MP4 when ready

Using the Web UI

  1. Visit the web interface
  2. Upload a .yrpX replay file
  3. Wait for processing and download your video

Packages

The project consists of three independent services and a custom fork of EDOPro:

  • echelon-server - Core replay processing (Rust + Axum)

    • Handles replay validation and video encoding
    • Manages job queue and processing state
    • Requires: Xvfb, ffmpeg, oEDOPro
  • echelon-discord - Discord bot frontend (Rust + Serenity)

    • Accepts replay uploads via Discord DMs/mentions
    • Provides real-time status updates
    • Streams completed videos back to users
  • echelon-webui - Web interface (Rust + Dioxus + Nginx)

    • Simple file upload interface
    • Real-time job status tracking
    • Video download link
  • echelon-edopro - custom fork of EDOPro (C++)

    • Added offline rendering to audio and video FIFO pipes, for perfectly smooth 60fps video output
    • Adjusted UI elements to better fit a video recording
    • Added command line arguments and environment variables to configure EDOPro

Local Development

Prerequisites

  • Rust 1.70+
  • Docker & Docker Compose (for containerized setup)
  • Xvfb, ffmpeg (if running server locally without Docker)
  • Optionally, for echelon-edopro, a C++ development environment
  • For the Discord bot, you will need to create an application in the Discord Developer Portal, and obtain your token (DISCORD_TOKEN in our environment)

Running the entire system with Docker Compose

# Copy example env file and configure
cp .env.example .env
# Edit .env with your DISCORD_TOKEN and other settings

# Start all services
docker compose up --build

# Services available at:
# - Server: http://localhost:3000
# - Web UI: http://localhost:8080
# - Discord: Invite the bot to your server

For running the packages individually, check their respective README.md files.

Configuration

Project Echelon is configured exclusively via environment variables. A .env.example file is provided in the repository root, listing all the environment variables and example values where applicable.

Testing

Run all tests:

cargo test --all

Tests include:

  • API tests (11 tests) - Discord bot server communication
  • Server tests (27 tests) - Replay validation, job management, API routes

Deployment

Project Echelon is intended to be deployed in a Docker environment; as such, Dockerfiles and a compose.yaml representative of our reference deployment are provided in the repository root.

They should serve well as a starting point for your own deployment and should be ready to use - just docker compose up --build and you're good to go.

Additionally, prebuilt images for each service are available in the Packages tab, under their respective tags.

For example, to use the latest version of Echelon, run the following images:

  • project-echelon:server-latest
  • project-echelon:webui-latest
  • project-echelon:discord-latest

Contributing

We accept contributions! Reach out to us in the Fire King Discord server to get access!

License

Project Echelon is licensed under the MIT license.

Project Ignis: EDOPro, and the custom fork in this repository, are licensed under the AGPL-3.0 license.

Unless explicitly stated otherwise, any contribution to this project shall be licensed under the aforementioned licenses, without any additional terms or conditions.