{"id":19252186,"url":"https://github.com/provismet/lilypanel","last_synced_at":"2026-06-16T08:31:16.531Z","repository":{"id":199601934,"uuid":"703290231","full_name":"Provismet/LilyPanel","owner":"Provismet","description":"Simple VMC application that gives a control panel for vtuber toggles.","archived":false,"fork":false,"pushed_at":"2024-02-07T01:15:23.000Z","size":47,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-23T16:51:48.441Z","etag":null,"topics":["inochi2d","virtual-motion-capture","vmc"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Provismet.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":"2023-10-11T01:06:36.000Z","updated_at":"2024-05-28T02:47:11.000Z","dependencies_parsed_at":"2023-10-11T05:29:49.486Z","dependency_job_id":"2cf1e20a-b383-44c3-a009-cd373c3ec005","html_url":"https://github.com/Provismet/LilyPanel","commit_stats":null,"previous_names":["provismet/lilypanel"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/Provismet/LilyPanel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Provismet%2FLilyPanel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Provismet%2FLilyPanel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Provismet%2FLilyPanel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Provismet%2FLilyPanel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Provismet","download_url":"https://codeload.github.com/Provismet/LilyPanel/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Provismet%2FLilyPanel/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34398405,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-16T02:00:06.860Z","response_time":126,"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":["inochi2d","virtual-motion-capture","vmc"],"created_at":"2024-11-09T18:25:47.081Z","updated_at":"2026-06-16T08:31:16.511Z","avatar_url":"https://github.com/Provismet.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LilyPanel\nA simple Python GUI that sends VMC data to make toggles easier in [Inochi Session](https://github.com/Inochi2D/inochi-session). Should be compatible with any VMC application, but this program is tailored for Inochi Session.\n\n## License\nAll *source-code* (does not include assets) is licensed BSD-2.\n\n## Executing from Source\nIf you want to execute the program from the Python source, you will need to install the `pythonosc` library. This can be done through the console command:  \n```\npip install pythonosc\n```\n\n## Setup\nAll settings are set via editing the file `lilypanel.json`.\n\n### Connection\nThe IP defaults to 127.0.0.1 (localhost).  \nThe port defaults to 39540.\n\nTo change either of these, find the `ip` and `port` fields at the top of the settings file.\n```json\n{\n    \"ip\": \"127.0.0.1\",\n    \"port\": 39540\n}\n```\nThe ip must be enclosed in \"quotes\" or 'apostrophes'.  \nThe port must be an integer.\n\n#### Inochi Session\nDo not change the IP address, Inochi Session expects to receive data via localhost.  \nIf your Virtual Space does not already have one, add a VMC receiver to it with the corresponding port. (Multiple VMC applications may share the same port, as such you may skip this step if already using PuppetString.)\n\n### Layout\nTo change how the control panel is layed out, modify the layout object.\n\nDefault:\n```json\n\"layout\": {\n    \"buttons\": {\n        \"columns\": 2,\n        \"xPadding\": 3,\n        \"yPadding\": 1\n    },\n    \"sliders\": {\n        \"columns\": 2,\n        \"xPadding\": 3,\n        \"yPadding\": 1,\n        \"orientation\": \"vertical\"\n    },\n    \"xPadding\": 20,\n    \"yPadding\": 5\n}\n```\n\n- Columns refers to the number of columns per button/slider. When no columns are left, a new row is created on the user interface.\n- xPadding refers to have much space should be between individual elements along the x-axis.\n- yPadding refers to have much space should be between individual elements along the y-axis.\n- Slider orientation accepts either `\"vertical\"` or `\"horizontal\"`.\n- The overall padding affects the distance between the button side and the slider side. (Also affects distance between them and the borders of the program.)\n\n### BlendShapes\nAn unlimited number of blendshapes can be registered to the program. All blendshapes should be given unique names and not clash with those of other programs.  \nBy default, 6 example blendshape are provided. These serve as a guide on how to add your own and should be removed.\n\nAll blendshapes should be a json object added to the `\"blends\"` array.\n\n#### Toggles\nToggles require 4 fields. The button will default to the off state.  \nValues may be integers or contain decimals.\n\nTo add a toggle:\n```json\n{\n    \"name\": \"Name of your blendshape\",\n    \"type\": \"toggle\",\n    \"offValue\": 0,\n    \"onValue\": 1\n}\n```\n\n#### Sliders\nSliders require 5 fields, the slider will default to `\"minValue\"` value and it will only move in multiples of `\"step\"`.  \n`\"minValue\"` is only the default value, it *can* be smaller than `\"maxValue\"`.\n\nTo add a slider:\n```json\n{\n    \"name\": \"Name of your blendshape\",\n    \"type\": \"slider\",\n    \"step\": 0.5,\n    \"minValue\": 0,\n    \"maxValue\": 1\n}\n```\nThis example will create a slider that starts at 0, ends at 1, and only accepts the values: 0, 0.5, 1.\n\n#### Durations\nDurations take up the same section as toggle buttons, they send a sequence of BlendShapes then deactivate. This can be used to play an animation once without looping or to create specialised toggle with a custom speed.\n\nTo add a duration:\n```json\n{\n    \"name\": \"Name of your blendshape\",\n    \"type\": \"duration\",\n    \"defaultValue\": 0,\n    \"interval\": 50,\n    \"sticky\": false,\n    \"checkpoints\": {\n        \"5\": 0.2,\n        \"15\": 0.5,\n        \"20\": 1\n    }\n}\n```\nThe default value is the value emitted when the duration is inactive. For sticky durations, this is instead the initial value; the start and end checkpoints become the default values in this case.  \nDurations output a single value each step, the duration of a step (in milliseconds) is the interval.\n\nThe `sticky` parameter controls how the duration works on repeated use. A sticky duration will play in reverse every other activation. This allows for a \"slow toggle\" ability.\n\nThe checkpoints are the values that must be sent at certain steps. The values fpr steps in-between checkpoints are scaled between the previous checkpoint and the next one.  \nIn this example:\n- Output starts at 0.\n- Increases every step, reaching 0.2 at step 5.\n- Slowly increases each step, reaching 0.5 at step 15.\n- Quickly increases, reaching 1 at step 20.\n- Duration ends, instantly resetting back to 0 (the default value).\n\nThe example executes 20 steps, each with a duration of 50ms (1 second in total).\n\nDurations are not overly intuitive, and I do recommend experimenting with the examples as well as visualising them in Inochi Session.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprovismet%2Flilypanel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprovismet%2Flilypanel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprovismet%2Flilypanel/lists"}