{"id":18498904,"url":"https://github.com/instance-id/loupedeck","last_synced_at":"2025-06-30T15:35:43.205Z","repository":{"id":98392453,"uuid":"597276129","full_name":"instance-id/Loupedeck","owner":"instance-id","description":"An app that turns the Loupedeck into a multipurpose command runner on linux","archived":false,"fork":false,"pushed_at":"2023-02-12T04:56:18.000Z","size":407,"stargazers_count":30,"open_issues_count":0,"forks_count":5,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-26T21:04:17.646Z","etag":null,"topics":["loupedeck","mqtt"],"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/instance-id.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":"2023-02-04T03:10:30.000Z","updated_at":"2025-06-11T19:41:47.000Z","dependencies_parsed_at":null,"dependency_job_id":"89ecca4d-2f26-4502-a585-4aaced766f96","html_url":"https://github.com/instance-id/Loupedeck","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/instance-id/Loupedeck","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/instance-id%2FLoupedeck","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/instance-id%2FLoupedeck/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/instance-id%2FLoupedeck/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/instance-id%2FLoupedeck/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/instance-id","download_url":"https://codeload.github.com/instance-id/Loupedeck/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/instance-id%2FLoupedeck/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262801389,"owners_count":23366554,"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":["loupedeck","mqtt"],"created_at":"2024-11-06T13:42:57.832Z","updated_at":"2025-06-30T15:35:43.179Z","avatar_url":"https://github.com/instance-id.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Loupedeck multipurpose command runner setup for linux.\n\n## Note: Active work in progress.  \n### I made this for my personal use, so things are the way they are because of reasons\n\n---\nI primarily transfered over the logic I had written for my [Xcencelabs QuickKeys](https://github.com/instance-id/quick-keys-app) to the Loupedeck.\n\n#### Features\n* Script Running  \n* Volume Adjustment\n* MQTT message sending and receiving  \n* Others I am not thinking of at the moment  \n\n#### Note\nIt may be a bit diffifcult to figure out at first, but this includes an MQTT client in which I connect to my HomeAssistant instance and began adding two way communication to trigger sensor behavior, and subscribe/listen for events, then run local scripts based on message payload.\n\n\u003cimg src=\"docs/loupedeck_linux.jpg\"  width=\"500\" \u003e\n\n\n#### Dependencies\n---\n Make sure you have the following installed in your system:\n\n* node\n* bash\n* tmux\n* npm\n\nTo install node dependencies run this from the project root folder\n\n`$ npm install`\n\n#### Configure\n\n---\n\nEdit the config/config.toml file to setup your Loupedeck\n\n\n\nA .env file in your project root containing your MQTT settings (if applicable) or an empty file  \n\n`$ touch .env`\n\nEdit the .env file to set some settings\n\n\n\n#### Start\n---\n\nIf you use powershell run\n\n`$ ./run.ps1`\n\nIf you use bash run\n\n`$ ./run.sh`\n\nThis will spawn off an node instance handeling the Loupedeck in the background\nyou can check the logs with the tmux command\n\n`$ tmux attach-session -t loupedeck`\n\nYou can also just start it with the node commant directly using\n\n`$ node ./examples/custom/index.mjs`\n\nThis could be usefull for development.\n\n\n### Tips \u0026 Tricks for the config\n\n---\n\n#### xdotool\n\nIf you use X11 you can use xdotool to trigger special keys, there probabably exist something equal that can used for Wayland.\n\nFor example you can use something like:\n\n```\ncommand = \"xdotool key XF86AudioLowerVolume\"\n```\n\nTo control the volume, this will in some systems like Ubunto be picked up and a smal screen overlay will be displayed. \n\nxdotool can also send commands to specific application, for example to toggle the mic in the system and in zoom with the same command you could use:\n\n```\ncommand = \"xdotool key XF86AudioMicMute ; xdotool search --desktop 0 --class Zoom windowactivate key Alt+a ; echo ToggleMic\"\n```\n\nHere is a setup example setting up the lower knob on Loupedeck Live S to control the mic input volume that toggle mute of it (and in zoom app) when pressed:\n\n```\n[wheel.knobCL.left]\ncmd_type = \"shell\"\ncommand = \"amixer set Capture 5%- \u003e /dev/null 2\u003e\u00261 \u0026\u0026 results=$(amixer sget Capture | awk -F\\\"[][]\\\" '/Left:/ { print $2 }'); echo $results\"\n\n[wheel.knobCL.right]\ncmd_type = \"shell\"\ncommand = \"amixer set Capture 5%+ \u003e /dev/null 2\u003e\u00261 \u0026\u0026 results=$(amixer sget Capture | awk -F\\\"[][]\\\" '/Left:/ { print $2 }'); echo $results\"\n\n[button.knobCL]\ncmd_type = \"shell\"\ncommand = \"xdotool key XF86AudioMicMute ; xdotool search --desktop 0 --class Zoom windowactivate key Alt+a ; echo ToggleMic\"\n```\n\n---\nSee the below repo that the base library is capable of.  \nPowered by Loupedeck Node library\nUnofficial Node.js API for [Loupedeck Live](https://loupedeck.com/products/loupedeck-live/) \u0026 [Loupedeck Live S](https://loupedeck.com/products/loupedeck-live-s/) controllers.\n\n---\n![alt text](https://i.imgur.com/cg5ow2M.png \"instance.id\")","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finstance-id%2Floupedeck","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finstance-id%2Floupedeck","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finstance-id%2Floupedeck/lists"}