{"id":24758506,"url":"https://github.com/pyreko/yt-community-post-archiver","last_synced_at":"2026-04-02T00:34:42.668Z","repository":{"id":218168392,"uuid":"745269220","full_name":"Pyreko/yt-community-post-archiver","owner":"Pyreko","description":"Archives YouTube community posts.","archived":false,"fork":false,"pushed_at":"2025-08-18T05:13:57.000Z","size":115,"stargazers_count":13,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-18T05:21:05.126Z","etag":null,"topics":["archiver","community","members","post","selenium","youtube","yt"],"latest_commit_sha":null,"homepage":"","language":"Python","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/Pyreko.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,"zenodo":null}},"created_at":"2024-01-19T01:07:07.000Z","updated_at":"2025-08-18T05:13:26.000Z","dependencies_parsed_at":"2024-01-20T08:21:24.012Z","dependency_job_id":"5c806757-8d97-4ed2-b3d8-f8a1d6ecc415","html_url":"https://github.com/Pyreko/yt-community-post-archiver","commit_stats":null,"previous_names":["pyreko/yt-community-post-archiver"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/Pyreko/yt-community-post-archiver","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pyreko%2Fyt-community-post-archiver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pyreko%2Fyt-community-post-archiver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pyreko%2Fyt-community-post-archiver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pyreko%2Fyt-community-post-archiver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Pyreko","download_url":"https://codeload.github.com/Pyreko/yt-community-post-archiver/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pyreko%2Fyt-community-post-archiver/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279006320,"owners_count":26084085,"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","status":"online","status_checked_at":"2025-10-11T02:00:06.511Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["archiver","community","members","post","selenium","youtube","yt"],"created_at":"2025-01-28T16:20:37.658Z","updated_at":"2026-04-02T00:34:42.655Z","avatar_url":"https://github.com/Pyreko.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# yt-community-post-archiver\n\nArchives YouTube community posts. Will try and grab the post's text content, images at as large of a resolution as possible, polls, and some other various bits of metadata. Works on members posts too if you're logged in/using cookies.\n\nNote that:\n\n- This was originally written very quickly to archive things in time for something, so it is somewhat scuffed.\n- The scraping is also done in a way which is somewhat fragile, and may break easily as YouTube updates things.\n\nFeel free to report problems or suggest features, though as a disclaimer,\n_I may not have the bandwidth or interest to tackle all reported issues_.\nPRs are always welcome, though!\n\n## Installation/Usage\n\n### From PyPI\n\nThe script is available via [pypi](https://pypi.org/project/yt-community-post-archiver/):\n\n1. [Install Python](https://www.python.org/downloads/).\n2. Install via `pip` (or alternatives like [`pipx`](https://github.com/pypa/pipx)):\n\n    ```shell\n    pip install yt-community-post-archiver\n    ```\n\n3. Run `yt-community-post-archiver`. For example:\n\n   ```shell\n   yt-community-post-archiver \"https://www.youtube.com/@PomuRainpuff/posts\"\n   ```\n\n   This will spawn a headless Chrome instance (that is, you won't see a Chrome window) and download all posts\n   it can find from the provided page, and save text metadata + images in an automatically created folder called\n   `archive-output` in the same directory the program was called in. Note this will take a while!\n\n   For info on the options you can use, run with `--help`:\n\n   ```shell\n   yt-community-post-archiver --help\n   ```\n\n### From the wheel\n\nFrom [Releases](https://github.com/Pyreko/yt-community-post-archiver/releases), you can install a wheel for this using Python.\n\n1. [Install Python](https://www.python.org/downloads/).\n\n2. Download one of the `.whl` files from [Releases](https://github.com/Pyreko/yt-community-post-archiver/releases)\n\n3. Install the wheel file. For example, if the file you downloaded is called `yt_community_post_archiver-0.1.0-py3-none-any.whl`:\n\n    ```shell\n    pip install yt_community_post_archiver-0.1.0-py3-none-any.whl\n    ```\n\n4. Run `yt-community-post-archiver`. For example:\n\n   ```shell\n   yt-community-post-archiver \"https://www.youtube.com/@PomuRainpuff/posts\"\n   ```\n\n   This will spawn a headless Chrome instance (that is, you won't see a Chrome window) and download all posts\n   it can find from the provided page, and save text metadata + images in an automatically created folder called\n   `archive-output` in the same directory the program was called in. Note this will take a while!\n\n   For info on the options you can use, run with `--help`:\n\n   ```shell\n   yt-community-post-archiver --help\n   ```\n\n### From the repo\n\n1. Clone the repo.\n\n2. [Install Python](https://www.python.org/downloads/).\n\n3. (Optional) Create and source a venv:\n\n   ```shell\n   python3 -m venv venv\n   source venv/bin/activate\n   ```\n\n4. (Optional) Install `uv` if you do not already have it:\n\n   ```shell\n   pip3 install uv\n   ```\n\n5. Make sure the computer you're running this on has Chrome or Firefox, as it uses a browser to grab posts.\n\n6. Run the archiver using `uv run yt-community-post-archiver`. For example:\n\n   ```shell\n   uv run yt-community-post-archiver \"https://www.youtube.com/@PomuRainpuff/posts\"\n   ```\n\n   This will spawn a headless Chrome instance (that is, you won't see a Chrome window) and download all posts\n   it can find from the provided page, and save text metadata + images in an automatically created folder called\n   `archive-output` in the same directory the program was called in. Note this will take a while!\n\n   For info on the options you can use, run with `--help`:\n\n   ```shell\n   yt-community-post-archiver --help\n   ```\n\n## Examples\n\nFor example, let's say I run:\n\n```shell\nyt-community-post-archiver \"https://www.youtube.com/@IRyS/posts\" -o \"output/testing\" -m 1  \n```\n\nThis runs the archiver, directed to `https://www.youtube.com/@IRyS/posts`, saving to `output/testing`, and gets\na maximum of one post. If you are running from the repo, then replace `yt-community-post-archiver` with\n`uv run yt-community-post-archiver`.\n\nAt the time of writing, this gives me two files that look like this - `post.json`:\n\n```json\n{\n    \"url\": \"https://www.youtube.com/post/UgkxzjFK9MbmdHoUW7Tyg54ncKqzkQxAb1AN\",\n    \"text\": \"😈💎NEW ORIGINAL SONG MV RELEASE💎👼\\n\\n\\r\\nTwiLight has just dropped on the internet and it is LOUD with a fantastically spicy MV to boot!! \\n\\n\\r\\nThe song will also be releasing on streaming platforms at midnight JST/3PM GMT/7AM PST!\\r\\nhttps://cover.lnk.to/mrc6zl\\n\\n\\r\\nComposer and Arrangement:\\r 雄之助\\nLyrics\\r: 牛肉\\nMV\\r: Kanauru\\nLogo Design\\r: saku㊴  \\nChoreography\\r: まりやん\",\n    \"images\": [\n        \"https://i.ytimg.com/vi/dFZ1oTSFuIE/hq720.jpg?sqp=-oaymwEnCOgCEMoBSFryq4qpAxkIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB\u0026rs=AOn4CLBEYbFyLyBzcYH2qy6j4jcoSEw4Uw=s0?imgmax=0\"\n    ],\n    \"links\": [\n        \"https://www.youtube.com/post/UgkxzjFK9MbmdHoUW7Tyg54ncKqzkQxAb1AN\",\n        \"https://cover.lnk.to/mrc6zl\",\n        \"https://www.youtube.com/watch?v=dFZ1oTSFuIE\",\n        \"https://www.youtube.com/channel/UC8rcEBzJSleTkf_-agPM20g\"\n    ],\n    \"is_members\": false,\n    \"relative_date\": \"1 year ago (edited)\",\n    \"approximate_num_comments\": \"35\",\n    \"num_comments\": \"35\",\n    \"num_thumbs_up\": \"1.6K\",\n    \"poll\": null,\n    \"when_archived\": \"2026-03-24 04:12:16.851436+00:00\"\n}\n```\n\nand an image file called `UgkxzjFK9MbmdHoUW7Tyg54ncKqzkQxAb1AN-0.jpg`, containing the included image. Note that some\ndetails may change throughout the versions; this document will be updated to reflect that though.\n\n### Set save location\n\nIf you want to set the save location, then use `-o`:\n\n```shell\nyt-community-post-archiver \"https://www.youtube.com/@IRyS/posts\" -o \"/home/me/my_save\"\n```\n\n### Logging in\n\nYou may want to provide a logged-in instance to this tool as this is the only way to get membership posts or certain details like poll vote percentages. The tool supports a few methods.\n\n#### Using a browser profile\n\nI've found this way works a bit better from personal experience. You can re-use an existing browser profile that is\nlogged into your YouTube account to grab membership posts with the `-p` flag, where the path is where your user\nprofiles are located (for example, in Chrome, you can find this with `chrome://version`). For example:\n\n```shell\nyt-community-post-archiver -o output/ -p ~/.config/chromium/  \"https://www.youtube.com/@WatsonAmelia/membership\"\n```\n\nBy default this will use the default profile name; if you need to override this then use `-n` as well. **I highly recommend\ncreating a new profile for using this tool (whether it's Chrome or Firefox) just so it doesn't accidentally delete some tabs or something**.\n\n#### Using a cookies file\n\nAnother method is if you have a Netscape-format cookies file, which you can pass the path with `-c` / `--cookies`:\n\n```shell\nyt-community-post-archiver \"https://www.youtube.com/@WatsonAmelia/posts\" -c \"/home/me/my_cookies_file.txt\"\n```\n\nYou can see how to get a cookies file by following [the instructions on how to do so from yt-dlp](https://github.com/yt-dlp/yt-dlp/wiki/FAQ#how-do-i-pass-cookies-to-yt-dlp).\n\n**Note that from personal experience, this sometimes breaks, so your mileage may vary.**\n\nAlso note that when using this from WSL, avoid reusing a Windows Chrome profile path (`/mnt/c/.../User Data`) with `-p`. Linux Chrome/Chromium in WSL does not reliably read/decrypt Windows profile data. Use a Linux profile directory\ninstead (for example `~/.config/google-chrome`) or use a cookie file.\n\n#### Using remote debugging to connect to a running instance\n\nYou can also start Chrome/Chromium with a remote debugging port, and connect this program to it. For example:\n\n1. Start up Chrome/Chromium with a remote debugging port:\n\n    ```shell\n    chromium --remote-debugging-port=9222 --profile-directory=\"Profile 1\"\n    ```\n\n2. Start `yt-community-post-archiver`:\n\n    ```shell\n    yt-community-post-archiver \"https://www.youtube.com/@kaminariclara/posts\" -o \"output\" --remote-debugging-port 9222\n    ```\n\n### Use Firefox instead of Chrome as the driver\n\nThe default driver is Chrome, but Firefox should work as well.\n\n```shell\nyt-community-post-archiver \"https://www.youtube.com/@PomuRainpuff/posts\" -d \"firefox\"\n```\n\n## Other Information\n\n### Polls\n\nPoll vote percentages can only be shown if you are logged in, due to how vote results are only shown if the user has voted before.\n\nThis also means that if you are logged in but have not voted on the poll before in a post, the tool will temporarily vote for you so it can see the vote percentages. It will try to remove the vote if it had to do this to avoid affecting anything, though be aware that this may sometimes fail!\n\n### How does this work?\n\nThis is just a typical Selenium/BeautifulSoup program, that's it. As such, it's simulating being a user and manually\ncopying + formatting all the data via a browser window. This is very evident if you disable headless mode,\nand see all the action.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpyreko%2Fyt-community-post-archiver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpyreko%2Fyt-community-post-archiver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpyreko%2Fyt-community-post-archiver/lists"}