Skip to content

Akin-Selcuk/runami

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Runami 🍿

License: MIT Rust Axum

Runami is a lightweight, self-hosted anime streaming server written in Rust. It compiles into a single binary held together by duct tape (I'm not kidding) that serves your local video files with a modernish web interface — perfect for streaming to your browser, phone, tablet, or IPTV apps.

Features

Core

  • Single Binary Deployment — HTML, CSS, and JS embedded via rust-embed
  • Auto Cover Art — Fetches anime posters from AniList based on folder names
  • IPTV/M3U Support — Stream your library in VLC, MPV, Infuse, or any IPTV app
  • Format Support.mp4, .mkv, .webm files
  • Async & Fast — Built on Tokio + Axum

Web Player

  • Double-tap to seek ±10s
  • Hold to 2x speed
  • Previous/Next episode buttons
  • Resume playback (saves progress automatically)
  • Search bar to filter anime
  • Episode thumbnails (optional)

Keyboard Shortcuts

Key Action
Space / K Play/Pause
F Toggle Fullscreen
/ J Rewind 10s
/ L Forward 10s
/ Volume up/down
M Mute/Unmute
N Next episode
P Previous episode
Escape Close player
0-9 Jump to 0%-90%

Installation

Requirements: Rust toolchain

# Clone
git clone https://codeberg.org/Akin-Selcuk/runami.git
cd runami

# Build
cargo build --release

# Binary is at ./target/release/runami

Usage

./runami /path/to/your/anime/library

# Custom port
./runami /path/to/your/anime/library --port 9090

# Allow any browser origin (less secure; default is restricted origins)
./runami /path/to/your/anime/library --cors-any

Output:

  🍿 RUNAMI - Local Anime Server
  ─────────────────────────────────────────
  Web Player:  http://192.168.1.50:8080
  IPTV:        http://192.168.1.50:8080/playlist.m3u

Notes:

  • Default port is 8080.
  • CORS defaults to a safer restricted policy (localhost, 127.0.0.1, and detected LAN IP on your configured port).
  • Use --cors-any only if you explicitly need cross-origin browser access.

Expected Folder Structure

/your/library/
├── Attack_on_Titan/
│   ├── Episode_01.mkv
│   ├── Episode_02.mkv
│   └── ...
├── Demon_Slayer/
│   ├── S01E01.mp4
│   └── ...
├── Bleach/
│   ├── S1
│     ├── Episode-01.webm
│     └── ...
└── covers/           # Auto-generated
    ├── Attack_on_Titan.jpg
    ├── Demon_Slayer.jpg
    └── Bleach.jpg

IPTV / External Players

MPV

mpv "http://YOUR_IP:8080/playlist.m3u"
# Or single anime
mpv "http://YOUR_IP:8080/Anime_Name/playlist.m3u"

VLC (Desktop/iOS/Android)

  1. Media → Open Network Stream
  2. Enter: http://YOUR_IP:8080/playlist.m3u

Infuse (iOS/tvOS) — Recommended for Apple devices

  1. Add Files → Network Share → Other
  2. Enter your server IP and browse

IPTV Apps (TiviMate, IPTV Smarters, etc.)

  1. Add Playlist → M3U URL
  2. Enter: http://YOUR_IP:8080/playlist.m3u

Episode Thumbnails (Optional)

Generate thumbnails with ffmpeg:

mkdir -p /path/to/library/thumbs/Anime_Name

for f in /path/to/library/Anime_Name/*.mkv; do
  ffmpeg -ss 00:05:00 -i "$f" -vframes 1 -q:v 2 \
    "/path/to/library/thumbs/Anime_Name/$(basename "$f").jpg"
done

About

A mini file server that plays videos in your browser written in Rust, held by ductape.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors