{"id":13447319,"url":"https://github.com/ridhwaans/homehost","last_synced_at":"2025-05-16T12:11:58.286Z","repository":{"id":39953162,"uuid":"121475814","full_name":"ridhwaans/homehost","owner":"ridhwaans","description":"self-hosted, Netflix-like app made for streaming","archived":false,"fork":false,"pushed_at":"2024-05-09T19:34:00.000Z","size":192451,"stargazers_count":1127,"open_issues_count":17,"forks_count":130,"subscribers_count":35,"default_branch":"master","last_synced_at":"2025-04-09T07:04:54.149Z","etag":null,"topics":["books","comics","media","movies","music","netflix","node","podcasts","react","self-hosted","spotify","streaming","tmdb","tv"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ridhwaans.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-02-14T05:47:23.000Z","updated_at":"2025-04-04T23:10:40.000Z","dependencies_parsed_at":"2023-12-30T17:47:26.189Z","dependency_job_id":"eeddfc61-7b5c-43d7-9887-6de247b20bab","html_url":"https://github.com/ridhwaans/homehost","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ridhwaans%2Fhomehost","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ridhwaans%2Fhomehost/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ridhwaans%2Fhomehost/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ridhwaans%2Fhomehost/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ridhwaans","download_url":"https://codeload.github.com/ridhwaans/homehost/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254527099,"owners_count":22085919,"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":["books","comics","media","movies","music","netflix","node","podcasts","react","self-hosted","spotify","streaming","tmdb","tv"],"created_at":"2024-07-31T05:01:13.755Z","updated_at":"2025-05-16T12:11:58.234Z","avatar_url":"https://github.com/ridhwaans.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","Software","HarmonyOS","Apps","Media Streaming"],"sub_categories":["Media Streaming - Multimedia Streaming","Windows Manager","MediaManagement","Multimedia Streaming"],"readme":"\u003ch2 align=\"center\"\u003e homehost \u003c/h2\u003e\n\n\u003ch3 align=\"center\"\u003e homehost is made for streaming your media collection within the home network \u003c/h3\u003e\n\u003ch4 align=\"center\"\u003e Features: 🎥 Movies, 📺 TV Shows, 🎵 Music \u003c/h4\u003e\n\n- [🎥 Movies](#-movies)\n- [📺 TV Shows](#-tv-shows)\n- [🎵 Music](#-music)\n- [⚙️ Setup](#%EF%B8%8F-setup)\n  - [Naming conventions](#naming-conventions)\n  - [Database](#database)\n  - [Run](#run)\n  - [Routes](#routes)\n    - [Server-side](#server-side)\n    - [Client-side](#client-side)\n- [Development](#development)\n- [Powered by](#powered-by)\n- [License](#license)\n- [Disclaimer](#disclaimer)\n  - [General Copyright Statement](#general-copyright-statement)\n\n## 🎥 Movies\n\n### Home\n\n![movies_1](docs/public/movies_1.png)\n\n### Search\n\n![movies_2](docs/public/movies_2.png)\n\n## 📺 TV Shows\n\n### Home\n\n![tv](docs/public/tv_1.png)\n\n## 🎵 Music\n\n### Home\n\n![music](docs/public/music_1.png)\n\n### Search\n\n![music](docs/public/music_2.png)\n\n### Album\n\n![music](docs/public/music_3.png)\n\n## ⚙️ Setup\n\nRun `npm run install-packages`\n\nIn `.env`, set a working API key for TMDb API and Spotify Web API, set the media paths, and set tha base url of the homehost client\n\n######\n\n```env\n# packages/client/.env\nREACT_APP_HOMEHOST_BASE = \"http://localhost:5000\"\nREACT_APP_IMAGE_BASE = \"https://image.tmdb.org/t/p/\"\nREACT_APP_IMDB_BASE = \"https://www.imdb.com\"\n\n# packages/server/.env\nTMDB_KEY = '\u003capi_key\u003e'\nSPOTIFY_CLIENT_ID = '\u003cclient_id\u003e'\nSPOTIFY_CLIENT_SECRET = '\u003cclient_secret\u003e'\n\nMOVIES_PATH = '/path/to/movies/directory'\nTV_PATH = '/path/to/tv/directory'\nMUSIC_PATH = '/path/to/music/directory'\n\nDATABASE_URL = 'file:./data/media.db'\nCLIENT_BASE_URL = 'http://localhost:3000'\n```\n\nIf you dont have keys, you can request API authorization from Spotify at https://developer.spotify.com/documentation/web-api/, and TMDb at https://developers.themoviedb.org/3/getting-started/introduction\n\n### Media\n\nYour media must appear in the absolute path locations set by `.env`. Each media must be in a unique location and cannot share the same directory path(s)  \n\n#### Naming conventions\n\n🎥 **Movies**\n\n```\n\u003cmovies_path\u003e\n- (subdirectory)?\n  - (movie_file_name \u003cTMDb-movie-ID\u003e) (.mp4|.mkv)\n```\n\n📺 **TV**\n\n```\n\u003ctv_path\u003e\n- (tv_show_directory_name \u003cTMDb-tv-show-ID\u003e)\n  - (S\u003cseason_number\u003eE\u003cepisode_number\u003e episode_file_name) (.mp4|.mkv)\n```\n\n🎵 **Music**\n\n```\n\u003cmusic_path\u003e\n- (album_directory_name \u003cSpotify-album-ID\u003e)\n  - ((\u003cdisc_number\u003e-)?\u003ctrack_number\u003e track_file_name) (.mp3|.flac)\n```\n\nTracks not found on Spotify can be put in a directory titled `Unknown Album` sans disc/ track number\n\n```\n\u003cmusic_path\u003e\n- Unknown Album\n  - (track_file_name) (.mp3|.flac)\n```\n\n### Database\n  \nRun `npm run db:migrate` to create migrations from schema, apply them, generate the database client  \n_homehost_ scans the media paths and adds the files to the database  \nWait for the async job to finish generating metadata and save  \nTo browse data, run `npm run db:browse` and go to `http://localhost:5555`  \nTo clear all data, run `npm run db:clear`\n\n### Run\n\nRun `npm run start` to start the application  \nBy default, the server port is `5000`, client port is `3000`  \nRun `npm run start:prod` to start the application as prod (default port is `5000`)  \nWhile running, _homehost_ continuously saves and retrieves information for any media that was added, moved or removed\n\n### Routes\n\n#### Server-side\n \n**GET**  \n`/api/about`  \n`/api/library/stats`  \n`/api/not_available`  \n`/api/movies`  \n`/api/movies/most_popular`  \n`/api/movies/highest_rated`  \n`/api/movies/recently_added`  \n`/api/movies/genres`  \n`/api/movies/genre/:name`  \n`/api/movies/random`  \n`/api/movies/:id`  \n`/api/tv`  \n`/api/tv/most_popular`  \n`/api/tv/highest_rated`  \n`/api/tv/recently_added`  \n`/api/tv/genres`  \n`/api/tv/genre/:name`  \n`/api/tv/random`  \n`/api/tv/:id`  \n`/api/music/albums/recently_added`  \n`/api/music/albums/latest`  \n`/api/music/artists`  \n`/api/music/artists/most_popular`  \n`/api/music/albums`  \n`/api/music/albums/:id`  \n`/api/music/songs`  \n`/api/music/songs/recently_added`  \n`/movies/:id`  \n`/tv/:tv_show_id/:season_number/:episode_number`  \n`/music/:album_id/:disc_number/:track_number`  \n`/api/watch/search`  \n`/api/listen/search`  \n`/api/watch/billboard`\n\n#### Client-side\n\n`/movies`, `/tv`, `/music`\n\n## Development\n\nWorks best in \u003cimg src=\"docs/public/Chrome.svg\" width=\"16\" height=\"16\" title=\"Google Chrome\"\u003e Chrome. Coming to Desktop, iOS, Android.\n\n## Powered by\n\n\u003cp\u003e\u003cimg src=\"docs/public/Spotify_Green.svg\" width=\"200\" height=\"150\" title=\"Spotify Web API\"\u003e\u0026emsp;\u003cimg src=\"docs/public/TMDB_Green.svg\" width=\"150\" height=\"150\" title=\"TMDb API\"\u003e\u003c/p\u003e\n\n## Contributing\n\nSee [CONTRIBUTING.md](.github/CONTRIBUTING.md).\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details\n\n## Disclaimer\n\nAll pictures copyright to their respective owner(s). This project does not claim ownership of any of the pictures displayed on this site unless stated otherwise. This project does not knowingly intend or attempt to offend or violate any copyright or intellectual property rights of any entity. Some images used on this project are taken from the web and believed to be in the public domain. In addition, to the best of this project's knowledge, all content, images, photos, etc., if any, are being used in compliance with the Fair Use Doctrine (Copyright Act of 1976, 17 U.S.C. § 107.) The pictures are provided for comment/criticism/news reporting/educational purposes only.\n\nWhere every care has been taken to ensure the accuracy of the contents of this project, we do not warrant its completeness, quality and accuracy, nor can we guarantee that it is up-to-date. We will not be liable for any consequences arising from the use of, or reliance on, the contents of this project. The respective owners are exclusively responsible for external websites. This project accepts no liability of the content of external links.\n\nOur project follows the safe harbor provisions of 17 U.S.C. §512, otherwise known as Digital Millennium Copyright Act (“DMCA”).\n\nIf any images posted here are in violation of copyright law, please contact us and we will gladly remove the offending images immediately upon receipt of valid proof of copyright infringement.\n\n### General Copyright Statement\n\nMost of the sourced material is posted according to the “fair use” doctrine of copyright law for non-commercial news reporting, education and discussion purposes. We comply with all takedown requests.\n\nYou may not use the Service for any illegal or unauthorized purpose. You must not, in the use of the Service, violate any laws in your jurisdiction (including but not limited to copyright or trademark laws).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fridhwaans%2Fhomehost","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fridhwaans%2Fhomehost","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fridhwaans%2Fhomehost/lists"}