{"id":13769131,"url":"https://github.com/woefe/ytcc","last_synced_at":"2025-04-06T00:09:05.940Z","repository":{"id":46272384,"uuid":"43006082","full_name":"woefe/ytcc","owner":"woefe","description":"Command line tool to keep track of your favorite playlists on YouTube and many other places.","archived":false,"fork":false,"pushed_at":"2024-01-01T12:20:35.000Z","size":533,"stargazers_count":181,"open_issues_count":8,"forks_count":21,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-03-29T22:11:17.434Z","etag":null,"topics":["command-line","mpv","python3","video","youtube","youtube-dl"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/woefe.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2015-09-23T14:27:44.000Z","updated_at":"2025-02-18T15:33:30.000Z","dependencies_parsed_at":"2024-01-12T09:45:54.561Z","dependency_job_id":null,"html_url":"https://github.com/woefe/ytcc","commit_stats":{"total_commits":440,"total_committers":11,"mean_commits":40.0,"dds":0.03863636363636369,"last_synced_commit":"8893bc98428cb78d458a9cf3ded03f519d86a46b"},"previous_names":[],"tags_count":44,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/woefe%2Fytcc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/woefe%2Fytcc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/woefe%2Fytcc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/woefe%2Fytcc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/woefe","download_url":"https://codeload.github.com/woefe/ytcc/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247415967,"owners_count":20935387,"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":["command-line","mpv","python3","video","youtube","youtube-dl"],"created_at":"2024-08-03T17:00:17.914Z","updated_at":"2025-04-06T00:09:05.923Z","avatar_url":"https://github.com/woefe.png","language":"Python","funding_links":[],"categories":["Overview","Python"],"sub_categories":["YouTube"],"readme":"# ytcc\n![Build and test](https://github.com/woefe/ytcc/workflows/Build%20and%20test/badge.svg)\n\nCommand line tool to keep track of your favorite playlists on YouTube and many other places.\n\n## Installation\n```shell script\npip install ytcc\n```\nAlternative installation methods are described in the [documentation](https://github.com/woefe/ytcc/tree/master/doc/install.md).\n\n## Usage\n\nAdd \"subscriptions\".\n```shell script\n# Any playlist supported by yt-dlp (or youtube-dl)\nytcc subscribe \"Jupiter Broadcasting\" \"https://www.youtube.com/c/JupiterBroadcasting/videos\"\nytcc subscribe \"NCS: House\" \"https://www.youtube.com/playlist?list=PLRBp0Fe2GpgmsW46rJyudVFlY6IYjFBIK\"\nytcc subscribe \"Neus\" \"https://soundcloud.com/neus/tracks\"\n\n# RSS feed podcasts\nytcc subscribe \"LINUX Unplugged\" \"https://linuxunplugged.com/rss\"\nytcc subscribe \"Darknet Diaries\" \"https://feeds.megaphone.fm/darknetdiaries\"\n```\n\nImport subscriptions from [Google Takeout](https://takeout.google.com/).\n*Hint*: When requesting a takeout make sure to select only the YouTube data, otherwise the takeout might take quite long to complete.\n```shell script\nytcc import ~/Downloads/Takeout/Youtube/subscriptions/subscriptions.csv\n```\n\nFetch metadata of new videos.\n```shell script\nytcc update\n```\n\nList unwatched videos.\n```shell script\nytcc list\n```\n\nList playlist content in JSON format.\n```shell script\nytcc --output json list --playlist \"NCS: House\" --since 2020-07-07 --watched --unwatched\n```\n\nList all videos as RSS feed.\n```shell script\nytcc --output rss list --watched --unwatched\n```\n\nStart the interactive terminal interface.\n```shell script\nytcc tui\n```\n\nMark all videos of a playlist as watched without playing them.\n```shell script\nytcc ls -p \"Jupiter Broadcasting\" | ytcc mark\n```\n\nListen to some music without limitations.\n```shell script\nytcc ls -p \"NCS: House\" | ytcc play --audio-only\n```\n\n**Alternative terminal interface with thumbnail support.**\nRequires [fzf](https://github.com/junegunn/fzf) version 0.23.1 or newer, optionally [curl](https://curl.se/) and either [ueberzug](https://github.com/seebye/ueberzug) or [kitty](https://sw.kovidgoyal.net/kitty/).\nThe script is automatically installed on most platforms during installation of ytcc.\nIf it's not installed, you can download it from [here](https://github.com/woefe/ytcc/tree/master/scripts/ytccf.sh).\n```shell script\nytccf.sh\n\n# Show help and key bindings\nytccf.sh --help\n```\n\n## Configuration\nYtcc searches for a configuration file at following locations:\n\n1. The file given with `-c` or `--config` options\n2. `~/.ytcc.conf`\n3. `$XDG_CONFIG_HOME/ytcc/ytcc.conf` or `~/.config/ytcc/ytcc.conf`\n4. `/etc/ytcc/ytcc.conf`\n\nIf no config file is found in these locations, a default config file is created at `$XDG_CONFIG_HOME/ytcc/ytcc.conf` or `~/.config/ytcc/ytcc.conf`\n\n### Example config\n\n```ini\n[ytcc]\n\n# Directory where downloads are saved, when --path is not given\ndownload_dir = ~/Downloads\n\n# Downloads videos to subdirectories by playlist name. If a video is on multiple playlists, ytcc\n# will download the video only to one subdirectory and symlink it to the other subdirectories.\ndownload_subdirs = on\n\n# Parameters passed to mpv. Adjusting these might break video playback in ytcc!\nmpv_flags = --ytdl --ytdl-format=bestvideo[height\u003c=?1080]+bestaudio/best\n\n# Defines the order of video listings.\n# Possible options: id, url, title, description, publish_date, watched, duration, extractor_hash,\n# playlists. Every option must be suffixed with :desc or :asc for descending or ascending sort.\norder_by = playlists:asc, publish_date:desc\n\n# Default attributes shown in video listings.\n# Some ytcc commands allow overriding the default set here in the config.\nvideo_attrs = id, title, publish_date, duration, playlists\n\n# Default attributes shown in playlist/subscription listings.\n# Some ytcc commands allow overriding the default set here in the config.\nplaylist_attrs = name, url, reverse, tags\n\n# Path where the database is stored.\n# Can be used to sync the database between multiple machines.\ndb_path = ~/.local/share/ytcc/ytcc.db\n\n# The format of used to print dates\ndate_format = %Y-%m-%d\n\n# Default failure threshold before a video is ignored.\n# When a video could not be updated repeatedly, it will be ignored by ytcc after `max_update_fail`\n# attempts. This setting can be overridden with the --max-fail commandline parameter.\nmax_update_fail = 5\n\n# Default update backlog.\n# The update command will only check the first `max_update_backlog` videos of a playlist to improve\n# performance. This setting can be overridden with the --max-backlog commandline parameter.\nmax_update_backlog = 20\n\n# Ignore videos that have an age limit higher than the one specified here.\nage_limit = 0\n\n\n# Prompt and table colors. Supports 256 colors. Hence, values between 0-255 are allowed.\n# See https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit for the color codes.\n[theme]\nprompt_download_audio = 2\nprompt_download_video = 4\nprompt_play_audio = 2\nprompt_play_video = 4\nprompt_mark_watched = 1\ntable_alternate_background = 245\nplain_label_text = 244\n\n\n[tui]\n# The characters to use for selecting videos in interactive mode.\nalphabet = sdfervghnuiojkl\n\n# Default action of interactive mode.\n# Possible options: play_video, play_audio, mark_watched, download_audio, download_video\ndefault_action = play_video\n\n\n[youtube_dl]\n# Format (see FORMAT SELECTION in yt-dlp manpage). Make sure to use a video format here, if you\n# want to be able to download videos.\nformat = bestvideo[height\u003c=?1080]+bestaudio/best\n\n# Output template (see OUTPUT TEMPLATE in yt-dlp manpage).\n# Note that the output template will be prefixed with the `download_dir` directory and the name of\n# the playlist if `download_sub_dir` is enabled.\noutput_template = %(title)s.%(ext)s\n\n# If a merge is required according to format selection, merge to the given container format.\n# One of mkv, mp4, ogg, webm, flv\nmerge_output_format = mkv\n\n# Limit download speed to the given bytes/second. Set 0 for no limit.\n# E.g. limit to one megabyte per second\n#ratelimit = 1000000\nratelimit = 0\n\n# Set number of retries before giving up on a download.\n# Set 0 for no retries.\nretries = 0\n\n# Subtitles for videos.\n# If enabled and available, automatic and manual subtitles for selected languages are embedded in\n# the video.\n#subtitles = en,de\nsubtitles = off\n\n# Embed the youtube thumbnail in audio downloads.\n# Transforms the resulting file to m4a, if enabled.\nthumbnail = on\n\n# Skips livestreams in download command.\nskip_live_stream = true\n\n# Don't download videos longer than 'max_duration' seconds.\n# 0 disables the limit.\nmax_duration = 9000\n\n# Restrict filenames to only ASCII characters and avoid \"\u0026\" and spaces in filenames.\nrestrict_filenames = off\n```\n\n### mpv configuration\nYtcc uses [mpv](https://mpv.io) to play videos.\nYou can configure mpv to integrate nicely with ytcc.\nSpecifics are documented [here](https://github.com/woefe/ytcc/tree/master/doc/mpv.md).\n\n\n## Reporting issues\nCreate a new issue on the [GitHub issue tracker](https://github.com/woefe/ytcc/issues/new).\nDescribe the issue as detailed as possible and please use the issue templates, if possible!\n**Important**: do not forget to include the output of `ytcc bug-report` in bug reports.\nIt also might help a lot to run ytcc with the `--loglevel debug` option and include the output in your report.\n\n## Development\nWe recommend developing inside a virtualenv.\n\n1. Set up a [virtualenv](https://virtualenv.pypa.io/en/latest/)\n2. Install development dependencies: `pip install -r devrequirements.txt`\n\nRun the following commands before every pull request and fix the warnings or errors they produce.\n```shell script\nmypy ytcc\npytest\npylint ytcc\npydocstyle ytcc\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwoefe%2Fytcc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwoefe%2Fytcc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwoefe%2Fytcc/lists"}