{"id":23674570,"url":"https://github.com/piyp791/playlist2vec","last_synced_at":"2026-02-20T18:31:07.168Z","repository":{"id":267402390,"uuid":"898965330","full_name":"piyp791/playlist2vec","owner":"piyp791","description":"This repository contains code for playlist2vec.com, a website built to demo the vector search model described in our paper, \"Representation, Exploration, \u0026 Recommendation of Playlists\".","archived":false,"fork":false,"pushed_at":"2025-01-06T06:48:35.000Z","size":2250,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-25T01:30:15.298Z","etag":null,"topics":["fastapi","full-text-search","nginx","nodejs","sequence-to-sequence-autoencoder","vector-search"],"latest_commit_sha":null,"homepage":"https://playlist2vec.com/","language":"CSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/piyp791.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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-05T11:21:39.000Z","updated_at":"2025-01-06T06:44:07.000Z","dependencies_parsed_at":"2024-12-10T06:27:48.016Z","dependency_job_id":"2c764a24-cb68-4413-a8f7-4dc163ade012","html_url":"https://github.com/piyp791/playlist2vec","commit_stats":null,"previous_names":["piyp791/playlist2vec"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/piyp791/playlist2vec","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piyp791%2Fplaylist2vec","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piyp791%2Fplaylist2vec/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piyp791%2Fplaylist2vec/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piyp791%2Fplaylist2vec/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/piyp791","download_url":"https://codeload.github.com/piyp791/playlist2vec/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piyp791%2Fplaylist2vec/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29660019,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T16:33:43.953Z","status":"ssl_error","status_checked_at":"2026-02-20T16:33:43.598Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["fastapi","full-text-search","nginx","nodejs","sequence-to-sequence-autoencoder","vector-search"],"created_at":"2024-12-29T13:27:36.751Z","updated_at":"2026-02-20T18:31:07.136Z","avatar_url":"https://github.com/piyp791.png","language":"CSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"## ABOUT\n\nThis repository contains code for [playlist2vec.com](https://playlist2vec.com/), a website built to demo the vector search model described in our paper, \"Representation, Exploration, \u0026 Recommendation of Playlists\". \n\n## FEATURES\n\n- [x] Intuitive search interface and Spotify integration\n- [x] Microservices architecture for seamless scalability.\n- [x] Docker containers for a streamlined deployment.\n- [x] Utilization of low-cost libraries ([SQLite](https://www.sqlite.org/) and [Usearch Vector Search](https://github.com/unum-cloud/usearch)) to minimize app footprint.\n- [x] MMAP-based vector search enabling the application to operate efficiently on budget-friendly machines such as Raspberry Pi.\n- [x] NGINX configuration for a robust traffic handling.\n- [x] Rate limiting implemented to safeguard against DDoS attacks.\n- [x] NGINX caching to optimize server resource usage.\n- [x] Docker swarm setup with a bash-based DIY autoscaling setup\n- [ ] Auto-scaling capabilities using Kubernetes.\n\n## INSTALLATION\n\n*Note: This setup has been tested on Ubuntu 22.04 for both x86_64 and aarch64 architectures.*\n\n### 1. Install Docker\n1. Follow the instructions to install Docker from this link: [Install Docker On Ubuntu](https://docs.docker.com/engine/install/ubuntu/).\n2. Make sure to complete the post-installation steps outlined [here](https://docs.docker.com/engine/install/linux-postinstall/).\n\n### 2. Install Nginx\nInstall Nginx by following the guide available at: [How to Install Nginx on Ubuntu 22.04](https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-22-04).\n\n### 3. Install NodeJS\n\nYou can install Node.js (v20.18.0) by referring to this tutorial: [How to install Node.js on Ubuntu 22.04](https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-22-04).\n\n### 4. Download Code\n\nRun the following command to clone the repository:\n\n```\ngit clone https://github.com/piyp791/playlist2vec.git\n```\n\n### 5. Navigate To Project\nNavigate to the project directory by running:\n\n```\ncd playlist2vec\n```\n\n### 6. Nginx Setup\n1. Copy the `nginx/nginx.conf` file to `/etc/nginx/`.\n2. Copy the `nginx/site_config` file to `/etc/nginx/sites-available/\u003cYOURSITENAME\u003e`.\n3. Create a symbolic link from `sites-available` to `sites-enabled` with the following command:\n\n    ```\n    sudo ln -s /etc/nginx/sites-available/\u003cYOURSITENAME\u003e /etc/nginx/sites-enabled/\n    ```\n\n4. Remove the default configuration file by executing: \n\n    ```\n    sudo rm /etc/nginx/sites-enabled/default\n    ```\n5. Create a cache directory for NGINX:\n\n    ```\n    sudo mkdir /var/cache/nginx\n    ```\n\n6. Verify the configuration is correct by running:\n\n    ```\n    sudo nginx -t\n    ```\n\n7. Restart NGINX with the command:\n\n    ```\n    sudo systemctl restart nginx\n    ```\n\n### 7. Update Docker Daemon Configuration For Local Registry\n\nEnsure that you add the following configuration to the `/etc/docker/daemon.json` file (on all machines in a multi-machine cluster setup) to accommodate the local registry needed for Docker images:\n```\n{                                                                                       \n  \"insecure-registries\": [\"\u003cRegistry-Host-IP\u003e:5000\"]                                                \n}                                                                                       \n```\n\nYou can get the registry host IP by running the following command:\n\n```\n$(hostname -I | awk '{print $1}'\n```\n\n### 8. Build the Application\n\nFrom within the project directory, execute the build script:\n```\n./build.sh.\n```\n\nThis script:\n- Downloads the resources needed for the application to run.\n- Creates a local registry.\n- Builds the docker images.\n- Pushes the docker images to the registry. \n\n### 9. Run the Application\n\nFinally, execute the run script:\n```\n./run.sh\n```\n\nThis script:\n- Copies the website's static resources to the nginx folder.\n- Deploys the docker swarm setup using the images built. \n\nThis will create an HTTP version of the website, which can be integrated with a service like a [Cloudflare tunnel](https://www.cloudflare.com/en-ca/products/tunnel/) for an HTTPS frontend.\n\n### Note\nBy default, the build script configures the application to use the mini version of the corpus, which contains 377,000 items. In this configuration, the search index for the mini corpus is loaded into memory. In contrast, the search index built with full corpus is accessed in memory-mapped mode.\n\nTo change this setting, you can modify the `.env` file. Set the `IS_MINI` variable to `false` to use the full version of the corpus:\n\n```\nIS_MINI=false\n```\n\n### RUN IN DEVELOPMENT MODE (WITHOUT NGINX)\n\n### Setting up Search Service:\n```\ncd search-service\npython3 -m venv .venv\nsource .venv/bin/activate\npip install -r requirements.txt\nuvicorn src.server:app --port 3001\n```\n\n### Setting up Autocomplete Service:\n```\ncd autocomplete-service\npython3 -m venv .venv\nsource .venv/bin/activate\npip install -r requirements.txt\nuvicorn src.server:app --port 3002\n```\n### Setting up Web-Server:\n```\ncd web-server\nnpm install\nnpm run start-dev-mode\n```\n\n### RUN TESTS\n\n```\ncd web-server\nnpm run test-dev\n```\n\n## CITATION\n\n```\nPapreja, P., Venkateswara, H., Panchanathan, S. (2020). Representation, Exploration and Recommendation of Playlists. In: Cellier, P., Driessens, K. (eds) Machine Learning and Knowledge Discovery in Databases. ECML PKDD 2019. Communications in Computer and Information Science, vol 1168. Springer, Cham. https://doi.org/10.1007/978-3-030-43887-6_50\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpiyp791%2Fplaylist2vec","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpiyp791%2Fplaylist2vec","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpiyp791%2Fplaylist2vec/lists"}