{"id":38654161,"url":"https://github.com/plule/theremotion","last_synced_at":"2026-01-17T09:25:23.634Z","repository":{"id":54652996,"uuid":"517424718","full_name":"plule/theremotion","owner":"plule","description":"An instrument inspired by the Theremin","archived":false,"fork":false,"pushed_at":"2024-03-25T09:03:50.000Z","size":4565,"stargazers_count":43,"open_issues_count":8,"forks_count":2,"subscribers_count":4,"default_branch":"main","last_synced_at":"2024-03-25T10:26:50.809Z","etag":null,"topics":["rust"],"latest_commit_sha":null,"homepage":"https://plule.github.io/theremotion","language":"Rust","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/plule.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}},"created_at":"2022-07-24T20:02:31.000Z","updated_at":"2024-03-18T09:13:59.000Z","dependencies_parsed_at":"2023-10-23T08:28:39.684Z","dependency_job_id":"2d7a7a02-4567-43b3-b3b7-5e88a3b4988c","html_url":"https://github.com/plule/theremotion","commit_stats":null,"previous_names":[],"tags_count":32,"template":false,"template_full_name":"emilk/eframe_template","purl":"pkg:github/plule/theremotion","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plule%2Ftheremotion","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plule%2Ftheremotion/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plule%2Ftheremotion/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plule%2Ftheremotion/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/plule","download_url":"https://codeload.github.com/plule/theremotion/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plule%2Ftheremotion/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28505549,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T06:57:29.758Z","status":"ssl_error","status_checked_at":"2026-01-17T06:56:03.931Z","response_time":85,"last_error":"SSL_read: 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":["rust"],"created_at":"2026-01-17T09:25:22.588Z","updated_at":"2026-01-17T09:25:23.183Z","avatar_url":"https://github.com/plule.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Theremotion\n\n[![Github](https://img.shields.io/badge/github-plule%2Ftheremotion-8da0cb?style=flat-square)](https://github.com/plule/leaprs)\n\n👐 Theremotion is a virtual instrument inspired by the Theremin.\n\nJust like a Theremin, the position of your hand in the air controls the pitch\nand volume of the sound. However, you can also control much more dimensions of\nthe sound with specific motions.\n\nWith specific hand positions, you can control a low pass filter, a supersaw\nsound, a guitar sound and more. You can even make the instrument \"stick\" to a\nscale, making it much easier to control than a Theremin.\n\n![Screenshot](./site/doc/capture.png)\n\n## Instructions\n\nHead over to the [Theremotion website](https://plule.github.io/theremotion/) for\ninstructions on usage and installation.\n\n## Tools\n\n[![Leap Motion Controller](site/doc/ultraleap.png)](https://www.ultraleap.com/product/leap-motion-controller/) [![Faust](site/doc/faust.png)]((https://faust.grame.fr/)) [![Rust](site/doc/rust.png)](https://www.rust-lang.org)\n\nThe hand tracking is provided by Ultraleap's [Leap Motion Controller](https://www.ultraleap.com/product/leap-motion-controller/).\n\nThe sound generation is created with Grame's [Faust](https://faust.grame.fr/).\n\nThe UI is built with [Slint](https://slint.dev).\n\nThe program is built with [Rust](https://www.rust-lang.org).\n\n## Development\n\nIn order to build Theremotion, you need to install\n[Rust](https://www.rust-lang.org) and [Ultraleap's tracking\nsoftware](https://developer.leapmotion.com/tracking-software-download). If you\nwish to modify the sound generation, you also need to install\n[Faust](https://faust.grame.fr/).\n\nBuild with `cargo build`. When modifying the DSP, set the environment variable\n`THEREMOTION_REGEN_DSP` to any value in order to regenerate the DSP code when\nrunning `cargo build`.\n\nIf using the Orion version of Ultraleap, build with `cargo build\n--no-default-features`.\n\nIf the tracking software is installed at a custom path, set the environment\nvariable `LEAPSDK_LIB_PATH` to the absolute path of the\n`Ultraleap/LeapSDK/lib/x64` before running the build.\n\n### Linux\n\nBuilding on Linux requires to install some development libraries including:\n\n- `libasound2-dev`\n\n### Crates\n\nThe source code is divided into 3 crates:\n\n- **theremotion** is the main crate\n- **theremotion-dsp** contains the DSP producing the audio, generated with Faust\n- **theremotion-ui** contains the user interface, generated with Slint\n\n### Architecture\n\nTheremotion is run by 4 main threads:\n\n- `conductor` receives the updates from all the other threads and transmits\n  them. It contains all the movement definitions and holds the settings\n- `leap` provides the hand tracking messages\n- `dsp_controller` manages reads the parameter messages and manages the DSP state\n- `dsp` produces the sounds based on the DSP state\n- `ui` is the main thread and provides the user interface\n\n```mermaid\nflowchart TD\nleap --\u003e|hand tracking| conductor\nui --\u003e|user input| conductor\nconductor --\u003e|ui update| ui\nconductor --\u003e|parameter update| dsp_controller\ndsp_controller --\u003e |dsp state| dsp\n```\n\n## License\n\nWith the exception of any third-parties (such as the Rust, Faust and Ultraleap\nlogos, the Ultraleap redistributables, the Noto Emoji fonts), Theremotion is\ndistributed under the GPLv3 license. Its DSP (\"theremotion-dsp\") is distributed\nunder the BSD license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplule%2Ftheremotion","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fplule%2Ftheremotion","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplule%2Ftheremotion/lists"}