{"id":46609453,"url":"https://github.com/tholdrim/subplayo","last_synced_at":"2026-04-02T21:43:47.633Z","repository":{"id":316937499,"uuid":"1064299483","full_name":"Tholdrim/Subplayo","owner":"Tholdrim","description":"Google Apps Script that automatically adds newly published YouTube videos from selected channels to your playlists.","archived":false,"fork":false,"pushed_at":"2026-03-03T21:56:18.000Z","size":34,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-04T01:42:16.392Z","etag":null,"topics":["automation","google-apps-script","youtube","youtube-api-v3"],"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/Tholdrim.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-25T20:41:41.000Z","updated_at":"2026-02-19T21:11:09.000Z","dependencies_parsed_at":"2025-10-04T21:21:02.371Z","dependency_job_id":null,"html_url":"https://github.com/Tholdrim/Subplayo","commit_stats":null,"previous_names":["tholdrim/youtube-subscriptions","tholdrim/subplayo"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/Tholdrim/Subplayo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tholdrim%2FSubplayo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tholdrim%2FSubplayo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tholdrim%2FSubplayo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tholdrim%2FSubplayo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Tholdrim","download_url":"https://codeload.github.com/Tholdrim/Subplayo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tholdrim%2FSubplayo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30225404,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T17:00:40.062Z","status":"ssl_error","status_checked_at":"2026-03-07T17:00:39.026Z","response_time":53,"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":["automation","google-apps-script","youtube","youtube-api-v3"],"created_at":"2026-03-07T18:00:41.417Z","updated_at":"2026-04-02T21:43:47.613Z","avatar_url":"https://github.com/Tholdrim.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"Assets/Logo.png\" alt=\"Subplayo logo\" /\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"https://github.com/Tholdrim/Subplayo/releases/latest\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/Tholdrim/Subplayo?style=flat-square\u0026label=Release\" alt=\"Latest release\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/Tholdrim/Subplayo/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/Tholdrim/Subplayo?style=flat-square\u0026label=Stars\" alt=\"GitHub stars count\" /\u003e\u003c/a\u003e\n    \u003ca href=\"LICENSE.txt\"\u003e\u003cimg src=\"https://img.shields.io/github/license/Tholdrim/Subplayo?style=flat-square\u0026label=License\" alt=\"MIT license\" /\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n# Subplayo\n\n**Automatically build and maintain YouTube playlists from your favorite channels – fully under your control.**\n\n- Tired of missing important uploads?\n- Frustrated with YouTube’s chaotic subscription feed?\n\nSubplayo monitors selected channels and automatically adds new videos to playlists you define. No external servers, no third-party services – everything runs inside your own Google account via Apps Script.\n\n## 🚀 Getting started\n\n\u003e [!NOTE]\n\u003e Several users have reached out to share that the current setup process is overly complex and difficult to follow. This feedback has been genuinely appreciated and has inspired a significant redesign of the onboarding experience. A concrete plan is already in place. However, implementation will require some additional time due to personal commitments. The next release is intended to be the one that introduces a greatly simplified setup process.\n\nFollow the steps below to configure Subplayo inside your Google account.\n\n### 1. Create a Google Apps Script project\n\n1. Open [Google Apps Script](https://script.google.com/) and create a new project.\n2. In the Apps Script editor, create files matching those in the [Source](/Source) directory of this repository.\n3. Copy the contents of each file into its corresponding file in Apps Script.\n\n### 2. Enable the YouTube Data API v3\n\n1. Click the **+** icon next to the **Services** section.\n2. In the dialog that appears, select **YouTube Data API v3**.\n3. Click **Add**.\n\n### 3. Retrieve your playlist and channel IDs\n\nTo configure Subplayo, you need the IDs of the playlists you want to update and the IDs of the channels you want to monitor. You can retrieve both directly from the Apps Script editor.\n\n#### List your playlists\n\n1. Open the `Main.gs` file.\n2. Select the `listMyPlaylists` function from the function dropdown.\n3. Click **Run**.\n4. Authorize the script if prompted.\n5. In the **Execution log**, locate the playlists you want to use and note their IDs.\n\n#### List your subscriptions\n\n1. Select the `listMySubscriptions` function.\n2. Click **Run**.\n3. In the **Execution log**, locate the channels you want to monitor and note their IDs.\n\n### 4. Configure your playlists and channels\n\n1. Open `Settings.gs`.\n2. Replace placeholder values (`PLAYLIST_1_ID`, `CHANNEL_1_1_ID`, etc.) with your actual IDs.\n\nYour configuration should look similar to this:\n\n```javascript\nconst settings = {\n  playlists: {\n    \"PLrEoTTPGndRYOD03tciWWVZ5hhpDsKVYW\": [ // IT\n      \"UCpIn7ox7j7bH_OFj7tYouOQ\",           // John Savill's Technical Training\n    ],\n    \"PLrEoTTPGndRblAh27ns3MOHZldAilErI6\": [ // Science\n      \"UCsXVk37bltHxD1rDPwtNM8Q\",           // Kurzgesagt – In a Nutshell\n      \"UCHnyfMqiRRG1u-2MsSQLbXA\",           // Veritasium\n    ],\n  }\n};\n```\n\n### 5. Run the script manually\n\n1. Select the `addNewVideosToPlaylists` function.\n2. Click **Run**.\n\nIf everything is configured correctly:\n\n- The latest video from each configured channel will be added to the corresponding playlist.\n- Running the function again will not duplicate videos.\n- Only newly published videos will be added in future runs.\n\n## ⚙️ Advanced setup\n\nOnce the basics are in place, you can refine your setup further with additional options.\n\n### Set up a time-driven trigger\n\n\u003e [!TIP]\n\u003e Running the script on an hourly schedule is recommended. This schedule should not exceed the daily YouTube Data API quota, while still keeping your playlists updated quickly.\n\n- Go to **Triggers** (alarm clock icon on the left).\n- Click **Add Trigger** in the bottom-right corner.\n- Select the function: `addNewVideosToPlaylists`.\n- Choose the trigger type: **Time-driven → Hour timer**.\n- Select frequency: e.g., **Every hour**.\n- Click **Save**.\n\n### Using Brand Accounts\n\nYouTube Brand Accounts cannot be authenticated directly in Google Apps Script. To work around this limitation, you can share playlists between the Brand Account and your main Google account:\n\n- Create the desired playlist in your Brand Account.\n- Open the playlist settings and share it with your main Google account, granting edit permissions.\n- Copy the playlist ID and paste it into `Settings.gs` the same way you would with any other playlist.\n- When the script runs, videos will be added via your main account to a playlist that belongs to the Brand Account.\n\n## ⚖️ License\n\nThis is open-source software licensed under the MIT License. See the [LICENSE.txt](LICENSE.txt) file for more details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftholdrim%2Fsubplayo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftholdrim%2Fsubplayo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftholdrim%2Fsubplayo/lists"}