A replay-to-video converter for Project Ignis: EDOPro. https://echelon.arqalite.org/
Find a file
2025-12-26 01:45:28 +02:00
packages fix: better formatting and phrasing on errors 2025-12-26 01:45:28 +02:00
.dockerignore feat: implement server 2025-12-05 21:47:49 +02:00
.env.example feat: add Discord bot 2025-12-22 20:33:11 +02:00
.gitignore feat: implement server 2025-12-05 21:47:49 +02:00
build-and-push.sh build: add script to quickly push images to Forgejo 2025-12-25 17:50:52 +02:00
Cargo.lock feat: add privacy policy 2025-12-23 16:39:48 +02:00
Cargo.toml feat: add Discord bot 2025-12-22 20:33:11 +02:00
compose.yaml build: add watch path for discord bot 2025-12-25 19:33:12 +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 build: remove captain-definition files; mention images 2025-12-25 18:00:20 +02:00
server.Dockerfile feat: implement Web UI (#7) 2025-12-16 15:17:02 +00:00
webui.Dockerfile feat: optimize bundle size 2025-12-24 23:57:17 +02:00

Project Echelon

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

A reference deployment is available for testing. Currently in beta - expect ongoing improvements!

Quick Start

Using the Discord Bot (@Echelon)

  1. Send a replay - DM or mention the bot with a .yrpX file attached
  2. Get queued - Bot confirms your replay is queued with a unique ID
  3. Wait for processing - Bot sends status updates as the replay is processed
  4. Download video - Bot 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:

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

    • Handles replay validation and video encoding
    • Manages job queue and processing state
    • Requires: Xvfb, ffmpeg, EDOPro
  • 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

Local Development

Prerequisites

  • Rust 1.70+
  • Docker & Docker Compose (for containerized setup)
  • Xvfb, ffmpeg (if running server locally without Docker)

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

Environment Variables

Server:

  • No required environment variables (uses defaults)

Discord Bot:

  • DISCORD_TOKEN - Discord bot authentication token (required)
  • ECHELON_SERVER_URL - Server URL (defaults to http://server:3000)

Web UI:

  • API_BASE_URL - Backend server URL (required for deployment)

Docker Compose

All services use an .env file. Key variables:

DISCORD_TOKEN=your_bot_token_here
ECHELON_SERVER_URL=http://server:3000  # Internal Docker network

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! Submit your patches in the Fire King Discord server.

License

Project Echelon is licensed under the MIT license.

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