{"id":16669962,"url":"https://github.com/leptos-null/leptosmusic","last_synced_at":"2025-04-09T19:40:52.264Z","repository":{"id":157508243,"uuid":"165606135","full_name":"leptos-null/LeptosMusic","owner":"leptos-null","description":"Research project: Use InnerTube REST API to write a YouTube Music iOS client","archived":false,"fork":false,"pushed_at":"2019-01-20T20:41:07.000Z","size":5257,"stargazers_count":20,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-23T21:35:47.712Z","etag":null,"topics":["client","innertube","ios","youtube","youtube-api","youtube-client"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/leptos-null.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2019-01-14T06:20:23.000Z","updated_at":"2024-09-23T13:16:54.000Z","dependencies_parsed_at":null,"dependency_job_id":"5ff669b9-2838-44f7-a156-1f8b74771c08","html_url":"https://github.com/leptos-null/LeptosMusic","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leptos-null%2FLeptosMusic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leptos-null%2FLeptosMusic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leptos-null%2FLeptosMusic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leptos-null%2FLeptosMusic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/leptos-null","download_url":"https://codeload.github.com/leptos-null/LeptosMusic/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248100261,"owners_count":21047767,"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":["client","innertube","ios","youtube","youtube-api","youtube-client"],"created_at":"2024-10-12T11:36:20.618Z","updated_at":"2025-04-09T19:40:52.260Z","avatar_url":"https://github.com/leptos-null.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"## LeptosMusic\n\nLMusic is an iOS client for YouTube Music. It uses Google's InnerTube backend service, posing as YouTube Music. \nCurrently, the protobuf messages are not included with this project. \nMore information on this research is outlined in my [Writing an iOS YouTube Music client](https://gist.github.com/leptos-null/5ae739d2a561f5d1910fd9af3bb8a945) artcle.\n\nThe only information I could find about InnerTube was [this article](https://www.fastcompany.com/3044995/to-take-on-hbo-and-netflix-youtube-had-to-rewire-itself) by FastCompany.\n\nThe main YouTube app uses InnerTube, as do other YouTube clients (e.g. YouTube Kids). Every protobuf message requires a field usually under the key path \"context.client.clientName\", which is an enum, to reflect the client. \n\nThis project was written for research purposes. InnerTube was a previously undocumented service. \n\n### Additional Components\n\n[DisPlayers-Audio-Visualizers](https://github.com/agilie/DisPlayers-Audio-Visualizers) is used for an audio visualization view at the top of the app.\n\n[protobuf](https://github.com/protocolbuffers/protobuf) was downloaded at the [3.5.1 Release Tag](https://github.com/protocolbuffers/protobuf/releases/tag/v3.5.1) to best match the reverse engineered client.\n\n### LMPrivateGoogleAccessToken\n\nThis macro needs to be defined in `LMPrivateGoogleAccessToken.h` as directed in [LMAccessTokenManager.m](music/Services/LMAccessTokenManager.m).\n\nTo find the value, open Keychain Access.app on macOS. Enter \"com.apple.account.Google.oath-refresh-token\" in the search bar. You may have multiple Google Accounts. \nSelect each cell, and a preview will be provided at the top of the app. Right click the cell of the account you'd like to use. Select \"Copy Password to Clipboard\".\n\n\u003e **Note**: This is a workaround for a non-priority feature: logging into a Google Account in the app.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleptos-null%2Fleptosmusic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fleptos-null%2Fleptosmusic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleptos-null%2Fleptosmusic/lists"}