{"id":25317297,"url":"https://github.com/georgefilipkin/pulsemixer","last_synced_at":"2025-05-15T09:00:17.133Z","repository":{"id":34273222,"uuid":"38160403","full_name":"GeorgeFilipkin/pulsemixer","owner":"GeorgeFilipkin","description":"CLI and curses mixer for PulseAudio","archived":false,"fork":false,"pushed_at":"2024-03-14T13:51:20.000Z","size":337,"stargazers_count":745,"open_issues_count":29,"forks_count":50,"subscribers_count":18,"default_branch":"master","last_synced_at":"2025-04-22T02:42:04.927Z","etag":null,"topics":["audio","cli","console","curses","linux","mixer","pulseaudio","sound","terminal","tui"],"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/GeorgeFilipkin.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":"2015-06-27T13:07:29.000Z","updated_at":"2025-04-16T15:00:23.000Z","dependencies_parsed_at":"2024-06-19T00:21:39.772Z","dependency_job_id":"131ce8e9-ab94-4436-badd-b8c7f6c32904","html_url":"https://github.com/GeorgeFilipkin/pulsemixer","commit_stats":{"total_commits":142,"total_committers":15,"mean_commits":9.466666666666667,"dds":"0.38732394366197187","last_synced_commit":"5d494ab18f48268e557af9d5ad27b1c053dfa152"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeorgeFilipkin%2Fpulsemixer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeorgeFilipkin%2Fpulsemixer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeorgeFilipkin%2Fpulsemixer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeorgeFilipkin%2Fpulsemixer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GeorgeFilipkin","download_url":"https://codeload.github.com/GeorgeFilipkin/pulsemixer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254310509,"owners_count":22049467,"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":["audio","cli","console","curses","linux","mixer","pulseaudio","sound","terminal","tui"],"created_at":"2025-02-13T19:25:14.248Z","updated_at":"2025-05-15T09:00:17.037Z","avatar_url":"https://github.com/GeorgeFilipkin.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pulsemixer\nCLI and curses mixer for PulseAudio\n\n#### Requirements\n- `Python` \u003e= 3.3\n- `PulseAudio` \u003e= 1.0\n\n## Installation\n\nPulsemixer is a self-sufficient single-file python app that doesn't require any extra libraries. You can simply download [pulsemixer](https://raw.githubusercontent.com/GeorgeFilipkin/pulsemixer/master/pulsemixer) manually, do `chmod +x ./pulsemixer` and put it anywhere you want.\n\nBelow are some more convenient ways to install pulsemixer:\n\n##### curl\n\n```sh\ncurl https://raw.githubusercontent.com/GeorgeFilipkin/pulsemixer/master/pulsemixer \u003e pulsemixer \u0026\u0026 chmod +x ./pulsemixer\n```\n\n##### pip\n\n```\npip install pulsemixer\n```\n\n## Interactive mode\nInteractive mode is used if no arguments are given (except `--color` and `--server`)\n\n![Image of 1](https://raw.githubusercontent.com/GeorgeFilipkin/pulsemixer/img/1.png)\n![Image of 2](https://raw.githubusercontent.com/GeorgeFilipkin/pulsemixer/img/2.png)\n\nInteractive controls:\n```\n j k   ↑ ↓               Navigation\n h l   ← →               Change volume\n H L   Shift←  Shift→    Change volume by 10\n 1 2 3 .. 8 9 0          Set volume to 10%-100%\n m                       Mute/Unmute\n Space                   Lock/Unlock channels\n Enter                   Context menu\n F1 F2 F3                Change modes\n Tab   Shift Tab         Next/Previous mode\n Mouse click             Select device or mode\n Mouse wheel             Volume change\n Esc q                   Quit\n```\n\nVia context menu it is possible to `set-default-sink`, `set-default-source`, `move-sink-input`, `move-source-output`, `suspend-sink`, `suspend-source`, `set-sink-port`, `set-source-port`, `kill-client`, `kill-sink-input`, `kill-source-output`, `set-card-profile`. See `man pactl` for details on these features.\n\n## CLI\n```\nUsage of pulsemixer:\n  -h, --help            show this help message and exit\n  -v, --version         print version\n  -l, --list            list everything\n  --list-sources        list sources\n  --list-sinks          list sinks\n  --id ID               specify ID, default sink is used if no ID specified\n  --get-volume          get volume for ID\n  --set-volume n        set volume for ID\n  --set-volume-all n:n  set volume for ID, for every channel\n  --change-volume +-n   change volume for ID\n  --max-volume n        set volume to n if volume is higher than n\n  --get-mute            get mute for ID\n  --mute                mute ID\n  --unmute              unmute ID\n  --toggle-mute         toggle mute for ID\n  --server              choose the server to connect to\n  --color n             0 no color, 1 color currently selected, 2 full-color\n  --no-mouse            disable mouse support\n  --create-config       generate configuration file\n```\n\n#### CLI examples\nPulsemixer follows PulseAudio's terminology:\n* Sink - an output device.\n* Source - an input device.\n* Sink input - a stream that is connected to an output device, i.e. an input for a sink.\n* Source output - a stream that is connected to an input device, i.e. an output of a source.\n\n```sh\n$ pulsemixer --list\nSink:          ID: sink-1, Name: Built-in Stereo, Mute: 0, Channels: 2, Volumes: ['60%', '60%'], Default\nSink:          ID: sink-3, Name: HDMI Audio (HDMI 2), Mute: 0, Channels: 2, Volumes: ['50%', '50%']\nSink input:    ID: sink-input-663, Name: Firefox, Mute: 0, Channels: 2, Volumes: ['60%', '60%']\nSink input:    ID: sink-input-686, Name: mocp, Mute: 0, Channels: 2, Volumes: ['60%', '60%']\nSource:        ID: source-1, Name: HDMI Audio (HDMI 2), Mute: 0, Channels: 2, Volumes: ['100%', '100%']\nSource:        ID: source-2, Name: Built-in Stereo, Mute: 0, Channels: 2, Volumes: ['40%', '40%'], Default\nSource output: ID: source-output-7, Name: arecord, Mute: 0, Channels: 1, Volumes: ['40%]\n```\n\nPrint volume of the default sink, decrease by 5, print new volume:\n```sh\n$ pulsemixer --get-volume --change-volume -5 --get-volume\n60 60\n55 55\n```\n\nToggle mute of `source-1`, print mute status:\n```sh\n$ pulsemixer --id source-1 --toggle-mute --get-mute\n1\n```\n\nSet volume of `sink-input-663` to 50, then set volume of `sink-3` to 10 (left channel) and 30 (right channel):\n```sh\n$ pulsemixer --id sink-input-663 --set-volume 50 --id sink-3 --set-volume-all 10:30\n```\n\nIncrease volume of `sink-input-686` by 10 but don't get past 100:\n```sh\n$ pulsemixer --id sink-input-686 --change-volume +10 --max-volume 100\n```\n\n## Configuration\nOptional.\nThe config file will not be created automatically. Do `pulsemixer --create-config` or copy-paste it from here.\n\n```ini\n;; Goes into ~/.config/pulsemixer.cfg, $XDG_CONFIG_HOME respected\n;; Everything that starts with \"#\" or \";\" is a comment\n;; For the option to take effect simply uncomment it\n\n[general]\nstep = 1\nstep-big = 10\n; server =\n\n[keys]\n;; To bind \"special keys\" such as arrows see \"Key constant\" table in\n;; https://docs.python.org/3/library/curses.html#constants\n; up        = k, KEY_UP, KEY_PPAGE\n; down      = j, KEY_DOWN, KEY_NPAGE\n; left      = h, KEY_LEFT\n; right     = l, KEY_RIGHT\n; left-big  = H, KEY_SLEFT\n; right-big = L, KEY_SRIGHT\n; top       = g, KEY_HOME\n; bottom    = G, KEY_END\n; mode1     = KEY_F1\n; mode2     = KEY_F2\n; mode3     = KEY_F3\n; next-mode = KEY_TAB\n; prev-mode = KEY_BTAB\n; mute      = m\n; lock      = ' '  ; 'space', quotes are stripped\n; quit      = q, KEY_ESC\n\n[ui]\n; hide-unavailable-profiles = no\n; hide-unavailable-ports = no\n; color = 2    ; same as --color, 0 no color, 1 color currently selected, 2 full-color\n; mouse = yes\n\n[style]\n;; Pulsemixer will use these characters to draw interface\n;; Single characters only\n; bar-top-left       = ┌\n; bar-left-mono      = ╶\n; bar-top-right      = ┐\n; bar-right-mono     = ╴\n; bar-bottom-left    = └\n; bar-bottom-right   = ┘\n; bar-on             = ▮\n; bar-on-muted       = ▯\n; bar-off            = -\n; arrow              = ' '\n; arrow-focused      = ─\n; arrow-locked       = ─\n; default-stream     = *\n; info-locked        = L\n; info-unlocked      = U\n; info-muted         = M  ; 🔇\n; info-unmuted       = M  ; 🔉\n\n[renames]\n;; Changes stream names in interactive mode, regular expression are supported\n;; https://docs.python.org/3/library/re.html#regular-expression-syntax\n; 'default name example' = 'new name'\n; '(?i)built-in .* audio' = 'Audio Controller'\n; 'AudioIPC Server' = 'Firefox'\n```\n\nThe old environment variable `PULSEMIXER_BAR_STYLE` is still supported.\nTo change the volume bar's appearance in (e.g.) zsh without creating the config file:\n```bash\nexport PULSEMIXER_BAR_STYLE=\"╭╶╮╴╰╯◆◇· ──\"\n```\n\n## See also\n\n[python-pulse-control](https://github.com/mk-fg/python-pulse-control) - Python high-level interface and ctypes-based bindings for PulseAudio.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeorgefilipkin%2Fpulsemixer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgeorgefilipkin%2Fpulsemixer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeorgefilipkin%2Fpulsemixer/lists"}