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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5MTI3NTMsIm5iZiI6MTczODkxMjQ1MywicGF0aCI6Ii83OTA0MjM3NC8zODcxNjA1MjktODc4NDY5M2ItMTQzMS00NmNkLThiMGUtZDk4MTQ3Mzk2YWE0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA3VDA3MTQxM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTNkMjg3NDc2YWRhNGM0ZGE0Zjg2ZTAxMWNjOWNiNDFhZmQ2ZGQzZmU1OTgzNjk2M2E1MDVlZTI4NDJiYWMwYzkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.IpHN_Knfv8VpMw6wUUZujfRv2iZuWeSZkBN4Kd_2OPI)
![Mobile view](https://private-user-images.githubusercontent.com/79042374/387158734-1d6fa291-4c01-4f1c-969a-7ad48e23afd7.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5MTI3NTMsIm5iZiI6MTczODkxMjQ1MywicGF0aCI6Ii83OTA0MjM3NC8zODcxNTg3MzQtMWQ2ZmEyOTEtNGMwMS00ZjFjLTk2OWEtN2FkNDhlMjNhZmQ3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA3VDA3MTQxM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWI0MzUzZDZlNmYwNDZjMmQ3MDIzNzM0MzIwMzM0MjBiNmVlZThlZjE3M2JiNDMyYTFkYTQ1ZDYxMjYzNmE5YWImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.HqjYP72M3fdMKQCUU9nTwTpFIcvgNESY00_bD9lE4rY)
![Mobile view](https://private-user-images.githubusercontent.com/79042374/387729011-834900fc-00ad-43fb-9892-fa55fc1d6e6e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5MTI3NTMsIm5iZiI6MTczODkxMjQ1MywicGF0aCI6Ii83OTA0MjM3NC8zODc3MjkwMTEtODM0OTAwZmMtMDBhZC00M2ZiLTk4OTItZmE1NWZjMWQ2ZTZlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA3VDA3MTQxM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWYwNzI2MmE4YTIwMWFiZGY4OWZjYjQ0ODc1NzY2YzNlNzg2MzM3ZTg0N2RhM2UwNGU0NmI1M2ViMGI1MzdhOGUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.wKkU4jwvCXqWqUFodztnU3A5M66wSXgG9cu5fUnz2fE)
![Laptop view](https://private-user-images.githubusercontent.com/79042374/388580181-2c9a0ad8-aa4e-4063-a0a8-7f14f5a3d727.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5MTI3NTMsIm5iZiI6MTczODkxMjQ1MywicGF0aCI6Ii83OTA0MjM3NC8zODg1ODAxODEtMmM5YTBhZDgtYWE0ZS00MDYzLWEwYTgtN2YxNGY1YTNkNzI3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA3VDA3MTQxM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRhMmU4Y2UyNmE1ZDYwYTRiOWY2YTY2M2E4MTU1MDYxMzVkMzY0MTA3YzcyNmVkNTI2ZGE2NzZmZmU2NDM2Y2MmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.DrvOSVEbEO8i3hIolXNQIMuCgjRPGs6eszRu3a4eFDk)
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. 🌟