{"id":17685986,"url":"https://github.com/lionello/tidalsocial","last_synced_at":"2026-02-12T21:32:29.629Z","repository":{"id":150871445,"uuid":"342769171","full_name":"lionello/TIdalSocial","owner":"lionello","description":"Recommendation engine for TIDAL playlists and mixes.","archived":false,"fork":false,"pushed_at":"2023-01-04T04:03:59.000Z","size":228,"stargazers_count":1,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-23T07:59:48.184Z","etag":null,"topics":["ecmascript","flask","machine-learning","nix","nodejs","recommender-system","tidal","typescript"],"latest_commit_sha":null,"homepage":"","language":"Python","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/lionello.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":"2021-02-27T04:21:39.000Z","updated_at":"2021-12-10T04:53:58.000Z","dependencies_parsed_at":"2023-09-01T05:30:48.265Z","dependency_job_id":null,"html_url":"https://github.com/lionello/TIdalSocial","commit_stats":null,"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/lionello/TIdalSocial","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lionello%2FTIdalSocial","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lionello%2FTIdalSocial/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lionello%2FTIdalSocial/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lionello%2FTIdalSocial/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lionello","download_url":"https://codeload.github.com/lionello/TIdalSocial/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lionello%2FTIdalSocial/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29381774,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T20:34:40.886Z","status":"ssl_error","status_checked_at":"2026-02-12T20:23:00.490Z","response_time":55,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["ecmascript","flask","machine-learning","nix","nodejs","recommender-system","tidal","typescript"],"created_at":"2024-10-24T10:29:38.422Z","updated_at":"2026-02-12T21:32:29.612Z","avatar_url":"https://github.com/lionello.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TIdalSocial ![logo](https://github.com/lionello/TIdalSocial/blob/master/static/favicon-32x32.png?raw=true)\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![TypeScript](https://img.shields.io/badge/%3C%2F%3E-TypeScript-%230074c1.svg)](https://www.typescriptlang.org/)\n[![code style: prettier](https://img.shields.io/badge/code_style-prettier-f8bc45.svg)](https://github.com/prettier/prettier)\n\n![GitHub package.json version](https://img.shields.io/github/package-json/v/lionello/tidalsocial)\n![Docker Image Size (tag)](https://img.shields.io/docker/image-size/lionello/tidalsocial/latest)\n\n**This project is not affiliated with TIDAL or ASPIRO AB.**\n\nTIdalSocial is my attempt at creating a playlist recommendation engine for the awesome [TIDAL](https://tidal.com/) music streaming service.\n\nTIDAL does not currently have a way to browse or search for shared playlists, but that doesn't stop us, the fans, from creating our own platform.\n\nTIdalSocial uses the following libraries for the recommendations:\n* [implicit](https://github.com/benfred/implicit/) for the Alternating Least Squares matrix decomposition\n* [hnswlib](https://github.com/nmslib/hnswlib) for the Hierarchical Navigable Small Worlds approximate nearest neighbors\n\nFor more details about the inner working of the algorithm, please check the excelent blog post by @benfred on https://www.benfrederickson.com/matrix-factorization/\n\nThe frontend is written in HTML and [TypeScript](https://www.typescriptlang.org) and uses [Vue.js](https://vuejs.org) and is served by [ExpressJS](https://expressjs.com).\nThe backend is also written in TypeScript, runs on [NodeJS](https://nodejs.org/), but `POST`s requests to a local Python 3 [Flask](https://flask.palletsprojects.com/en/1.1.x/) server for the actual recommendations. I'm using ECMAScript Modules (ESM) to allow the generated JavaScript to work in the browser as well as on NodeJS.\n\n## Development\nUse `direnv` with the following `.envrc`:\n```sh\nuse flake\nexport PATH=$PATH:$PWD/node_modules/.bin\nlayout python\n```\n\nOr, without direnv:\n```sh\nnix-shell --pure\nnpm install\nsource .venv/bin/activate # or whichever venv you want\n# For some reason CMAKE ignores the CXX from mkShell and insists on using clang\nCC=$CXX pip install -r requirements.txt\n```\n\n## Test\n```sh\nnix-shell\nnpm test\npython -m unittest discover -s model\n```\n\n## Run\n```sh\nnix-shell\nnpm start\n```\n\n## Publish\n```sh\nnpm version patch # or minor, or major\nnpm run docker:push\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flionello%2Ftidalsocial","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flionello%2Ftidalsocial","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flionello%2Ftidalsocial/lists"}