SOYO is a Next.js website designed to display video files stored on a local drive (default: F:/). The website is accessible throughout the local network, providing a convenient way to browse and view videos without needing a central server.
Wanted to watch animes on phone but low on storage , so proceeded to spend hours in this
Framework: Next.js
Styling: Tailwind CSS
- Displays all video files from the specified local drive.
- Accessible across devices on the same local network.
- User-friendly interface for easy navigation and viewing.
- Fetches anime thumbnails from AniList API to display cover images for videos (if available).
- Fallback to local thumbnails if no external thumbnail is found.
- Ability to fetch movie/poster images from IMDb using OMDb API for non-anime videos.
![Laptop view](https://private-user-images.githubusercontent.com/79042374/387160529-8784693b-1431-46cd-8b0e-d98147396aa4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNDc3ODQsIm5iZiI6MTczOTM0NzQ4NCwicGF0aCI6Ii83OTA0MjM3NC8zODcxNjA1MjktODc4NDY5M2ItMTQzMS00NmNkLThiMGUtZDk4MTQ3Mzk2YWE0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEyVDA4MDQ0NFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWUwMGQ0YmIxYmE2MWFkM2EzZmQxODM4ZGYyN2FmOWM4OWExNWY1NjhiNGYxNjg3ZjUwY2I0ZDUyOWQ3M2EzZTgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.nLiHMdxIsUa8bzAGRNI5Yfn6eLjkQfy2IVgvdAwYCNs)
![Mobile view](https://private-user-images.githubusercontent.com/79042374/387158734-1d6fa291-4c01-4f1c-969a-7ad48e23afd7.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNDc3ODQsIm5iZiI6MTczOTM0NzQ4NCwicGF0aCI6Ii83OTA0MjM3NC8zODcxNTg3MzQtMWQ2ZmEyOTEtNGMwMS00ZjFjLTk2OWEtN2FkNDhlMjNhZmQ3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEyVDA4MDQ0NFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQ2ZjdjMGNkNWJmZjIyMzhiOGZjYmRkOGFjYjYxZWRmYjdhMDJhMWU0YzZkYmY3NWQ4MzZmZTJlMjNiNTFiMzUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.3BrXRjIFdVJKq-_5ekhL0jFBRoCiEIMTJYMwplb9wn8)
![Mobile view](https://private-user-images.githubusercontent.com/79042374/387729011-834900fc-00ad-43fb-9892-fa55fc1d6e6e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNDc3ODQsIm5iZiI6MTczOTM0NzQ4NCwicGF0aCI6Ii83OTA0MjM3NC8zODc3MjkwMTEtODM0OTAwZmMtMDBhZC00M2ZiLTk4OTItZmE1NWZjMWQ2ZTZlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEyVDA4MDQ0NFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTllNDk3ZWI5OGYzYjA3MzRhOGM2MjkwMTgzMDM1ZjdiYzMzZTljN2YxOTdhNWVkYTBjMzRlMWMxMWI2ZDBiMmQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.STtpCa-Tp9k3pkpHmzA6hK0uRWRALZK4poUFa8RHNLM)
![Laptop view](https://private-user-images.githubusercontent.com/79042374/388580181-2c9a0ad8-aa4e-4063-a0a8-7f14f5a3d727.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNDc3ODQsIm5iZiI6MTczOTM0NzQ4NCwicGF0aCI6Ii83OTA0MjM3NC8zODg1ODAxODEtMmM5YTBhZDgtYWE0ZS00MDYzLWEwYTgtN2YxNGY1YTNkNzI3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEyVDA4MDQ0NFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWI4ODJlOWZmOTA4N2Y0YjAxODVmZDI5OWRlZDY5OWZmYjQwZGFlMjNkMmM4MzQ3NzlmZmIwYTNmM2NhNzhkOTMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.c7Vq9FXlkk8sxQ3qTLjeW9_Blv8i8WgVshWBghz4YqY)
docker pull fal3n4ngel/soyo
- Docker Desktop installed
- Sufficient permissions to run Docker
- Access to local video directories
Custom Building
Install Docker Desktop:
- Windows/Mac: Download from Docker's official website
- Linux: Use package manager or follow the official Docker CE installation guides
Build Docker Image
docker build -t soyo .
docker build -t soyo:v1.0 . # build with specific tag
Run Docker Container
# Basic run
docker run -d -p <port>:8311 --volume=F:/:/Movies --volume=G:/:/Anime --name soyo fal3n4ngel/soyo:latest
# Run with auto-restart policy
docker run -d --restart=unless-stopped -p <port>:8311 --volume=F:\:/Movies --volume=G:\:/Anime --name soyo fal3n4ngel/soyo:latest
Open your browser and navigate to
http://{ip}:<port>
git clone https://github.com/fal3n-4ngel/soyo.git
cd soyo
npm install
{
"movieDir": "F:/",
"thumbnailCache": false,
"lastAccessedMovie": null
}
npm run dev
npm run build
npm run start
Open your browser and navigate to
http://{ip}:3000 # if Development Server
http://{ip}:8311 # if Production Server
to view the website.
-
Symptoms
- Videos not displaying
- Incorrect directory access
- Permission-related errors
-
Troubleshooting Steps
# verify the external / needed drives are mounted # restart the wsl ( within docker desktop )
Adithya Krishnan |
This project is open-source and available under the MIT License.
Interested in improving Soyo? I welcome contributions! Feel free to open issues, submit pull requests, or share your ideas on GitHub. Together, we can make this project even better. 🌟