{"id":16538708,"url":"https://github.com/spyoungtech/voice-commander-elite","last_synced_at":"2026-06-07T00:32:32.127Z","repository":{"id":242766607,"uuid":"810254411","full_name":"spyoungtech/voice-commander-elite","owner":"spyoungtech","description":"Elite Dangerous extension for the voice-commander framework","archived":false,"fork":false,"pushed_at":"2024-06-05T02:24:20.000Z","size":12,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-04T00:44:46.504Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/spyoungtech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2024-06-04T10:46:45.000Z","updated_at":"2024-06-05T02:24:23.000Z","dependencies_parsed_at":null,"dependency_job_id":"da459a6c-7928-4944-af78-7f1331136bbe","html_url":"https://github.com/spyoungtech/voice-commander-elite","commit_stats":null,"previous_names":["spyoungtech/voice-commander-elite"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/spyoungtech/voice-commander-elite","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spyoungtech%2Fvoice-commander-elite","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spyoungtech%2Fvoice-commander-elite/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spyoungtech%2Fvoice-commander-elite/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spyoungtech%2Fvoice-commander-elite/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/spyoungtech","download_url":"https://codeload.github.com/spyoungtech/voice-commander-elite/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spyoungtech%2Fvoice-commander-elite/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27446909,"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","status":"online","status_checked_at":"2025-12-02T02:00:06.387Z","response_time":54,"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":[],"created_at":"2024-10-11T18:46:28.814Z","updated_at":"2025-12-02T06:02:45.757Z","avatar_url":"https://github.com/spyoungtech.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# voice-commander-elite\n\nElite dangerous extension for the [voice-commander](https://github.com/spyoungtech/voice-commander) framework.\n\n**Key features:**\n\n- Provides predefined actions for all available Elite Dangerous keybinds\n- Analyzes your local Elite Dangerous keybinds settings file to ensure actions are portable and always work, even if you change your keybinds\n\n## Installation\n\n```bash\npip install voice-commander-elite\n```\n\n## Usage\n\nAs Python code:\n```python\nfrom voice_commander.triggers import VoiceTrigger\n\nfrom voice_commander_elite.actions import SupercruiseAction, LandingGearToggleAction\nfrom voice_commander_elite.conditions import EliteDangerousIsActive\nfrom voice_commander.profile import Profile\n\np = (Profile('elite-example')\n    .add_trigger(\n        VoiceTrigger(\"supercruise\")\n        .add_condition(EliteDangerousIsActive())\n        .add_action(SupercruiseAction()))\n    .add_trigger(\n        VoiceTrigger('retract landing gear', 'lower landing gear')\n        .add_condition(EliteDangerousIsActive())\n        .add_action(LandingGearToggleAction())\n))\n\np.run()\n```\n\n### Loading from serialized JSON\n\nIf saved to a profile JSON file, the above example produces substantially the following JSON:\n\n```json\n{\n    \"configuration\": {\n        \"profile_name\": \"elite-example\",\n        \"schema_version\": \"0\",\n        \"triggers\": [\n            {\n                \"trigger_type\": \"voice_commander.triggers.VoiceTrigger\",\n                \"actions\": [\n                    {\n                        \"action_type\": \"voice_commander_elite.actions.SupercruiseAction\",\n                        \"action_config\": {}\n                    }\n                ],\n                \"conditions\": [\n                    {\n                        \"condition_type\": \"voice_commander_elite.conditions.EliteDangerousIsActive\",\n                        \"condition_config\": {}\n                    }\n                ],\n                \"trigger_config\": {\n                    \"*trigger_phrases\": [\n                        \"supercruise\"\n                    ]\n                }\n            },\n            {\n                \"trigger_type\": \"voice_commander.triggers.VoiceTrigger\",\n                \"actions\": [\n                    {\n                        \"action_type\": \"voice_commander_elite.actions.LandingGearToggleAction\",\n                        \"action_config\": {}\n                    }\n                ],\n                \"conditions\": [\n                    {\n                        \"condition_type\": \"voice_commander_elite.conditions.EliteDangerousIsActive\",\n                        \"condition_config\": {}\n                    }\n                ],\n                \"trigger_config\": {\n                    \"*trigger_phrases\": [\n                        \"retract landing gear\",\n                        \"lower landing gear\"\n                    ]\n                }\n            }\n        ]\n    }\n}\n```\n\nTo load and use this profile later in Python code, you can do the following:\n\n```python\nfrom voice_commander.profile import load_profile\n# import the extension package before loading the profile!\n# THIS IS IMPORTANT!\n# The import triggers the reading of your keybind file and ensures that all actions/conditions are properly initialized.\nimport voice_commander_elite  # noqa\n\nprofile = load_profile('./elite-example.vcp.json')\nprofile.run()\n```\n\n### Serialization notes\n\nWhen serialized to JSON, by default, the `action_type` will refer to the fully qualified names within this extension package. \nThis _may_ cause the produced JSON to be incompatible with certain vanilla `voice-commander` features (since the specification for extensions is not yet defined).\nSpecifically: invoking profiles from the command line, since there's no mechanism built into `voice-commander` to ensure the extension module is imported, the `action_type` will not resolve \nproperly. Though there are hacks to _make_ this work, until there is a formal extensions feature, we offer a better solution for this use case.\nBecause the actions and conditions in this package are just subclasses of regular `voice-commander` actions, you can choose to serialize using those standard `action_type`s as well \nby using the `.with_simplified_serialization` alternate constructor (or the `.wss` alias). This means that your profile will contain static bindings, so it won't be portable, but it \nwill be compatible with vanilla `voice-commander` without the need to install or specify any extension (once generated, obviously).\n\nTL;DR if you want to use the `voice-commander` CLI with profiles generated using `voice-commander-elite` actions, do the following:\n\n```diff\n-    .add_action(LandingGearToggleAction())\n+    .add_action(LandingGearToggleAction.with_simplified_serialization()) # or .wss()\n```\n\nAgain, remember that the generated profile will have static bindings and will not necessarily be portable or continue to work if you change your keybinds (you'll have to manually update your profile json).\n\nIf you apply this change to use `.wss()` to invoke all the actions/conditions, the following JSON file will be produced:\n\n```json\n{\n    \"configuration\": {\n        \"profile_name\": \"elite-example\",\n        \"schema_version\": \"0\",\n        \"triggers\": [\n            {\n                \"trigger_type\": \"voice_commander.triggers.VoiceTrigger\",\n                \"actions\": [\n                    {\n                        \"action_type\": \"voice_commander.actions.AHKPressAction\",\n                        \"conditions\": [],\n                        \"action_config\": {\n                            \"key\": \"s\"\n                        }\n                    }\n                ],\n                \"conditions\": [\n                    {\n                        \"condition_type\": \"voice_commander.conditions.AHKWindowIsActive\",\n                        \"condition_config\": {\n                            \"title\": \"Elite - Dangerous (CLIENT)\"\n                        }\n                    }\n                ],\n                \"trigger_config\": {\n                    \"*trigger_phrases\": [\n                        \"supercruise\"\n                    ]\n                }\n            },\n            {\n                \"trigger_type\": \"voice_commander.triggers.VoiceTrigger\",\n                \"actions\": [\n                    {\n                        \"action_type\": \"voice_commander.actions.AHKPressAction\",\n                        \"conditions\": [],\n                        \"action_config\": {\n                            \"key\": \"l\"\n                        }\n                    }\n                ],\n                \"conditions\": [\n                    {\n                        \"condition_type\": \"voice_commander.conditions.AHKWindowIsActive\",\n                        \"condition_config\": {\n                            \"title\": \"Elite - Dangerous (CLIENT)\"\n                        }\n                    }\n                ],\n                \"trigger_config\": {\n                    \"*trigger_phrases\": [\n                        \"retract landing gear\",\n                        \"lower landing gear\"\n                    ]\n                }\n            }\n        ]\n    }\n}\n```\n\nAs you can notice the resulting JSON has **no references to the extension package!** - it also has static keybindings present in the JSON (which were previously pulled from my personal elite dangerous bindings).\n\nHopefully, this will not be necessary in the not-too-far future and eventually this constructor will be obsoleted.\n\n## List of known possible actions\n\nAs of 4.1, these are the known keybinds. You will only be able to import these names if you have a proper mouse button or keyboard key assigned to the keybind. This may not be possible for some of these actions. So-called 'buggy' keybinds are omitted from this list.\n\nIf new keybinds are added to the game in a future version that are (obviously) not known at time of writing, they will still be detected and usable dynamically.\n\n- `BackwardKeyAction`\n- `BackwardThrustButtonAction`\n- `BackwardThrustButton_LandingAction`\n- `BlockMouseDecayAction`\n- `CamPitchDownAction`\n- `CamPitchUpAction`\n- `CamTranslateBackwardAction`\n- `CamTranslateDownAction`\n- `CamTranslateForwardAction`\n- `CamTranslateLeftAction`\n- `CamTranslateRightAction`\n- `CamTranslateUpAction`\n- `CamTranslateZHoldAction`\n- `CamYawLeftAction`\n- `CamYawRightAction`\n- `CamZoomInAction`\n- `CamZoomOutAction`\n- `ChargeECMAction`\n- `CommanderCreator_RedoAction`\n- `CommanderCreator_Rotation_MouseToggleAction`\n- `CommanderCreator_UndoAction`\n- `CycleFireGroupNextAction`\n- `CycleFireGroupPreviousAction`\n- `CycleNextHostileTargetAction`\n- `CycleNextPageAction`\n- `CycleNextPanelAction`\n- `CycleNextSubsystemAction`\n- `CycleNextTargetAction`\n- `CyclePreviousHostileTargetAction`\n- `CyclePreviousPageAction`\n- `CyclePreviousPanelAction`\n- `CyclePreviousSubsystemAction`\n- `CyclePreviousTargetAction`\n- `DecreaseSpeedButtonMaxAction`\n- `DeployHardpointToggleAction`\n- `DeployHeatSinkAction`\n- `DisableRotationCorrectToggleAction`\n- `DownThrustButtonAction`\n- `DownThrustButton_LandingAction`\n- `EjectAllCargoAction`\n- `EngineColourToggleAction`\n- `ExplorationFSSCameraPitchDecreaseButtonAction`\n- `ExplorationFSSCameraPitchIncreaseButtonAction`\n- `ExplorationFSSCameraYawDecreaseButtonAction`\n- `ExplorationFSSCameraYawIncreaseButtonAction`\n- `ExplorationFSSDiscoveryScanAction`\n- `ExplorationFSSEnterAction`\n- `ExplorationFSSMiniZoomInAction`\n- `ExplorationFSSMiniZoomOutAction`\n- `ExplorationFSSQuitAction`\n- `ExplorationFSSRadioTuningX_DecreaseAction`\n- `ExplorationFSSRadioTuningX_IncreaseAction`\n- `ExplorationFSSShowHelpAction`\n- `ExplorationFSSTargetAction`\n- `ExplorationFSSZoomInAction`\n- `ExplorationFSSZoomOutAction`\n- `ExplorationSAAChangeScannedAreaViewToggleAction`\n- `ExplorationSAAExitThirdPersonAction`\n- `ExplorationSAANextGenusAction`\n- `ExplorationSAAPreviousGenusAction`\n- `FStopDecAction`\n- `FStopIncAction`\n- `FireChaffLauncherAction`\n- `FixCameraRelativeToggleAction`\n- `FixCameraWorldToggleAction`\n- `FocusCommsPanelAction`\n- `FocusCommsPanel_HumanoidAction`\n- `FocusLeftPanelAction`\n- `FocusRadarPanelAction`\n- `FocusRightPanelAction`\n- `ForwardKeyAction`\n- `ForwardThrustButtonAction`\n- `ForwardThrustButton_LandingAction`\n- `FreeCamSpeedDecAction`\n- `FreeCamSpeedIncAction`\n- `FreeCamToggleHUDAction`\n- `FreeCamZoomInAction`\n- `FreeCamZoomOutAction`\n- `FriendsMenuAction`\n- `GalaxyMapHomeAction`\n- `GalaxyMapOpenAction`\n- `GalaxyMapOpen_HumanoidAction`\n- `GalnetAudio_ClearQueueAction`\n- `GalnetAudio_Play_PauseAction`\n- `GalnetAudio_SkipBackwardAction`\n- `GalnetAudio_SkipForwardAction`\n- `HMDResetAction`\n- `HeadLookPitchDownAction`\n- `HeadLookPitchUpAction`\n- `HeadLookResetAction`\n- `HeadLookToggleAction`\n- `HeadLookYawLeftAction`\n- `HeadLookYawRightAction`\n- `HumanoidBackwardButtonAction`\n- `HumanoidBatteryAction`\n- `HumanoidClearAuthorityLevelAction`\n- `HumanoidConflictContextualUIButtonAction`\n- `HumanoidCrouchButtonAction`\n- `HumanoidEmoteSlot1Action`\n- `HumanoidEmoteSlot2Action`\n- `HumanoidEmoteSlot3Action`\n- `HumanoidEmoteSlot4Action`\n- `HumanoidEmoteSlot5Action`\n- `HumanoidEmoteSlot6Action`\n- `HumanoidEmoteSlot7Action`\n- `HumanoidEmoteSlot8Action`\n- `HumanoidEmoteWheelButtonAction`\n- `HumanoidForwardButtonAction`\n- `HumanoidHealthPackAction`\n- `HumanoidHideWeaponButtonAction`\n- `HumanoidItemWheelButtonAction`\n- `HumanoidItemWheelButton_XLeftAction`\n- `HumanoidItemWheelButton_XRightAction`\n- `HumanoidItemWheelButton_YDownAction`\n- `HumanoidItemWheelButton_YUpAction`\n- `HumanoidJumpButtonAction`\n- `HumanoidMeleeButtonAction`\n- `HumanoidOpenAccessPanelButtonAction`\n- `HumanoidPingAction`\n- `HumanoidPitchDownButtonAction`\n- `HumanoidPitchUpButtonAction`\n- `HumanoidPrimaryFireButtonAction`\n- `HumanoidPrimaryInteractButtonAction`\n- `HumanoidReloadButtonAction`\n- `HumanoidRotateLeftButtonAction`\n- `HumanoidRotateRightButtonAction`\n- `HumanoidSecondaryInteractButtonAction`\n- `HumanoidSelectEMPGrenadeAction`\n- `HumanoidSelectFragGrenadeAction`\n- `HumanoidSelectNextGrenadeTypeButtonAction`\n- `HumanoidSelectNextWeaponButtonAction`\n- `HumanoidSelectPreviousGrenadeTypeButtonAction`\n- `HumanoidSelectPreviousWeaponButtonAction`\n- `HumanoidSelectPrimaryWeaponButtonAction`\n- `HumanoidSelectSecondaryWeaponButtonAction`\n- `HumanoidSelectShieldGrenadeAction`\n- `HumanoidSelectUtilityWeaponButtonAction`\n- `HumanoidSprintButtonAction`\n- `HumanoidStrafeLeftButtonAction`\n- `HumanoidStrafeRightButtonAction`\n- `HumanoidSwitchToCompAnalyserAction`\n- `HumanoidSwitchToRechargeToolAction`\n- `HumanoidSwitchToSuitToolAction`\n- `HumanoidSwitchWeaponAction`\n- `HumanoidThrowGrenadeButtonAction`\n- `HumanoidToggleFlashlightButtonAction`\n- `HumanoidToggleMissionHelpPanelButtonAction`\n- `HumanoidToggleNightVisionButtonAction`\n- `HumanoidToggleShieldsButtonAction`\n- `HumanoidToggleToolModeButtonAction`\n- `HumanoidUtilityWheelCycleModeAction`\n- `HumanoidWalkButtonAction`\n- `HumanoidZoomButtonAction`\n- `HyperSuperCombinationAction`\n- `HyperspaceAction`\n- `IncreaseEnginesPowerAction`\n- `IncreaseSpeedButtonMaxAction`\n- `IncreaseSystemsPowerAction`\n- `IncreaseWeaponsPowerAction`\n- `LandingGearToggleAction`\n- `LeftThrustButtonAction`\n- `LeftThrustButton_LandingAction`\n- `MicrophoneMuteAction`\n- `MouseResetAction`\n- `MoveFreeCamBackwardsAction`\n- `MoveFreeCamDownAction`\n- `MoveFreeCamForwardAction`\n- `MoveFreeCamLeftAction`\n- `MoveFreeCamRightAction`\n- `MoveFreeCamUpAction`\n- `MultiCrewCockpitUICycleBackwardAction`\n- `MultiCrewCockpitUICycleForwardAction`\n- `MultiCrewPrimaryFireAction`\n- `MultiCrewPrimaryUtilityFireAction`\n- `MultiCrewSecondaryFireAction`\n- `MultiCrewSecondaryUtilityFireAction`\n- `MultiCrewThirdPersonFovInButtonAction`\n- `MultiCrewThirdPersonFovOutButtonAction`\n- `MultiCrewThirdPersonPitchDownButtonAction`\n- `MultiCrewThirdPersonPitchUpButtonAction`\n- `MultiCrewThirdPersonYawLeftButtonAction`\n- `MultiCrewThirdPersonYawRightButtonAction`\n- `MultiCrewToggleModeAction`\n- `NightVisionToggleAction`\n- `OpenCodexGoToDiscoveryAction`\n- `OpenOrdersAction`\n- `OrbitLinesToggleAction`\n- `OrderAggressiveBehaviourAction`\n- `OrderDefensiveBehaviourAction`\n- `OrderFocusTargetAction`\n- `OrderFollowAction`\n- `OrderHoldFireAction`\n- `OrderHoldPositionAction`\n- `OrderRequestDockAction`\n- `PauseAction`\n- `PhotoCameraToggleAction`\n- `PhotoCameraToggle_HumanoidAction`\n- `PitchCameraDownAction`\n- `PitchCameraUpAction`\n- `PitchDownButtonAction`\n- `PitchDownButton_LandingAction`\n- `PitchUpButtonAction`\n- `PitchUpButton_LandingAction`\n- `PlayerHUDModeToggleAction`\n- `PrimaryFireAction`\n- `QuickCommsPanelAction`\n- `QuickCommsPanel_HumanoidAction`\n- `QuitCameraAction`\n- `RadarDecreaseRangeAction`\n- `RadarIncreaseRangeAction`\n- `RecallDismissShipAction`\n- `ResetPowerDistributionAction`\n- `RightThrustButtonAction`\n- `RightThrustButton_LandingAction`\n- `RollCameraLeftAction`\n- `RollCameraRightAction`\n- `RollLeftButtonAction`\n- `RollLeftButton_LandingAction`\n- `RollRightButtonAction`\n- `RollRightButton_LandingAction`\n- `SAAThirdPersonFovInButtonAction`\n- `SAAThirdPersonFovOutButtonAction`\n- `SAAThirdPersonPitchDownButtonAction`\n- `SAAThirdPersonPitchUpButtonAction`\n- `SAAThirdPersonYawLeftButtonAction`\n- `SAAThirdPersonYawRightButtonAction`\n- `SecondaryFireAction`\n- `SelectHighestThreatAction`\n- `SelectTargetAction`\n- `SelectTargetsTargetAction`\n- `SetSpeed100Action`\n- `SetSpeed25Action`\n- `SetSpeed50Action`\n- `SetSpeed75Action`\n- `SetSpeedMinus100Action`\n- `SetSpeedMinus25Action`\n- `SetSpeedMinus50Action`\n- `SetSpeedMinus75Action`\n- `SetSpeedZeroAction`\n- `ShipSpotLightToggleAction`\n- `ShowPGScoreSummaryInputAction`\n- `SteerLeftButtonAction`\n- `SteerRightButtonAction`\n- `StoreCamZoomInAction`\n- `StoreCamZoomOutAction`\n- `StoreEnableRotationAction`\n- `StoreToggleAction`\n- `SupercruiseAction`\n- `SystemMapOpenAction`\n- `SystemMapOpen_HumanoidAction`\n- `TargetNextRouteSystemAction`\n- `TargetWingman0Action`\n- `TargetWingman1Action`\n- `TargetWingman2Action`\n- `ToggleAdvanceModeAction`\n- `ToggleButtonUpInputAction`\n- `ToggleCargoScoopAction`\n- `ToggleDriveAssistAction`\n- `ToggleFlightAssistAction`\n- `ToggleFreeCamAction`\n- `ToggleReverseThrottleInputAction`\n- `ToggleReverseThrottleInputFreeCamAction`\n- `ToggleRotationLockAction`\n- `TriggerFieldNeutraliserAction`\n- `UIFocusAction`\n- `UI_BackAction`\n- `UI_DownAction`\n- `UI_LeftAction`\n- `UI_RightAction`\n- `UI_SelectAction`\n- `UI_ToggleAction`\n- `UI_UpAction`\n- `UpThrustButtonAction`\n- `UpThrustButton_LandingAction`\n- `UseAlternateFlightValuesToggleAction`\n- `UseBoostJuiceAction`\n- `UseShieldCellAction`\n- `VanityCameraEightAction`\n- `VanityCameraFiveAction`\n- `VanityCameraFourAction`\n- `VanityCameraNineAction`\n- `VanityCameraOneAction`\n- `VanityCameraScrollLeftAction`\n- `VanityCameraScrollRightAction`\n- `VanityCameraSevenAction`\n- `VanityCameraSixAction`\n- `VanityCameraTenAction`\n- `VanityCameraThreeAction`\n- `VanityCameraTwoAction`\n- `VerticalThrustersButtonAction`\n- `WeaponColourToggleAction`\n- `WingNavLockAction`\n- `YawCameraLeftAction`\n- `YawCameraRightAction`\n- `YawLeftButtonAction`\n- `YawLeftButton_LandingAction`\n- `YawRightButtonAction`\n- `YawRightButton_LandingAction`\n- `YawToRollButtonAction`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspyoungtech%2Fvoice-commander-elite","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspyoungtech%2Fvoice-commander-elite","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspyoungtech%2Fvoice-commander-elite/lists"}