{"id":21094487,"url":"https://github.com/gatomod/rain","last_synced_at":"2025-05-16T14:33:31.257Z","repository":{"id":136122100,"uuid":"573328781","full_name":"gatomod/rain","owner":"gatomod","description":"An extremely minimalist video delivery platform made with Rust and React","archived":false,"fork":false,"pushed_at":"2023-10-16T12:15:54.000Z","size":9323,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2023-10-17T16:09:27.133Z","etag":null,"topics":["ffmpeg","gatomo","hls","http","react","rust","video"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gatomod.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2022-12-02T07:48:59.000Z","updated_at":"2023-06-03T20:15:36.000Z","dependencies_parsed_at":"2023-05-21T07:00:19.165Z","dependency_job_id":null,"html_url":"https://github.com/gatomod/rain","commit_stats":null,"previous_names":["gatomod/rain"],"tags_count":0,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gatomod%2Frain","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gatomod%2Frain/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gatomod%2Frain/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gatomod%2Frain/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gatomod","download_url":"https://codeload.github.com/gatomod/rain/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225433464,"owners_count":17473599,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ffmpeg","gatomo","hls","http","react","rust","video"],"created_at":"2024-11-19T22:17:39.011Z","updated_at":"2025-05-16T14:33:31.239Z","avatar_url":"https://github.com/gatomod.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Rain\nAn extremely minimalist video delivery platform made with React and Rust.\n\n## Note\nThis was my first project in Rust, I made it a few years ago to use that language in a real project, but the code is too messy and inneficient so please, don't bother me with that.\n\nI have the intention to rewrite it with the same stack and using it for my Final Degree Project, organizing it better, documenting it and using another libraries.\n\n## Technologies\n### Frontend\n- **Language:** [TypeScript](https://www.typescriptlang.org/)\n- **Libs:** [React](https://reactjs.org/), [Vite](https://vitejs.dev/), [React HLS Player](https://www.npmjs.com/package/react-hls-player)\n- **Style:** [Tailwind](https://tailwindcss.com/)\n- **HTTP:** [Axios](https://axios-http.com/)\n\n### Backend\n- **Language:** [Rust](https://www.rust-lang.org/)\n- **Libs:** [Axum](https://github.com/tokio-rs/axum), [Tokio](https://tokio.rs/), [Tower HTTP](https://github.com/tower-rs/tower-http), [UUID](https://github.com/uuid-rs/uuid), [Serde](https://serde.rs/)\n- **Protocols:** [HLS](https://www.rfc-editor.org/rfc/rfc8216), [HTTP 1.1](https://www.rfc-editor.org/rfc/rfc2616)\n- **Video:** [FFMPEG](https://ffmpeg.org/), [FFMPEG Thumbnailer](https://github.com/dirkvdb/ffmpegthumbnailer)\n\n## Getting started\nTo start using Rain you need to install certain programs and build it.\n### Configuration\nBefore build Rain, you need to configure `server.toml`\n\n- In `server.toml` set the port and the file limit (in bytes)\n```toml\nip = [0, 0, 0, 0]\nport = 3000\nfile_limit = 10_000_000_000 # In bytes\n```\n\n\n### Docker\nTo use docker, run the following commands.\n```sh\n# Clone the repo\ngit clone https://github.com/gatomod/rain \u0026\u0026 cd rain\n\n# Build Dockerfile\ndocker build -t gatomo/rain:latest .\n\n# Run the container\n# - Choose a port. 80 is the default one\n# - Volumes are used to preserve data. Choose a path\ndocker run --name rain -p 80:80 -v /route/to/store/cdn:/server/cdn gatomo/rain\n```\n\n### Manual build\n#### Prerequisites\n- FFmpeg\n- FFmpeg Thumbnailer\n- Rust and Cargo\n- Node.js and Yarn\n\nIf you have all installed, update all to latest versions (not required but recommended).\n\n#### Building\nRun the following command to build server and client\n```sh\n# build client\ncd client \u0026\u0026 yarn build\n\n# build server\ncd server \u0026\u0026 cargo build --release\n```\n\n#### Run\nRun the server\n```sh\ncd server \u0026\u0026 cargo run --release\n```\n\n## API Endpoints\n* `/` - `GET` Web\n* `/assets/:asset` - `GET` Web assets\n* `/api` - API endpoints\n  * `/cdn` - Video delivery (HLS)\n      * `/` - `POST` upload multipart\n      * `/:uuid/video.m3u8` - `GET` M3U8 file\n      * `/:uuid/video#.ts` - `GET` Video segments\n  * `/data` - Video data (JSON)\n      * `/` - `GET` All UUID videos\n      * `/:uuid` - `GET` Video data\n  * `/thumbnail` - Get thumbnails (PNG)\n      * `/lg/:uuid` - `GET` Large\n      * `/sm/:uuid` - `GET` Small\n\n\n## License\nRain is licensed under the [GPL-3 license](https://www.gnu.org/licenses/gpl-3.0.html).\n\n## Usage\nThere are some security and performance issues, so is recommended to personal use at home or testing.\n\n## Contribute\n🥳 Any PR is welcome! Rain is a small project, so please follow the code style and avoid making insane proposals.\n\n*Gátomo - AGPL-3 License*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgatomod%2Frain","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgatomod%2Frain","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgatomod%2Frain/lists"}