{"id":16611895,"url":"https://github.com/pokey/wax_talon","last_synced_at":"2026-04-24T09:34:39.789Z","repository":{"id":133753084,"uuid":"525045687","full_name":"pokey/wax_talon","owner":"pokey","description":"Record your Talon sessions","archived":false,"fork":false,"pushed_at":"2024-01-09T15:09:39.000Z","size":73,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-10T19:50:21.590Z","etag":null,"topics":["talonvoice","voice-coding"],"latest_commit_sha":null,"homepage":"","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/pokey.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},"funding":{"github":"pokey","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":"pokey","issuehunt":null,"otechie":null,"custom":null}},"created_at":"2022-08-15T15:46:02.000Z","updated_at":"2023-02-20T20:34:24.000Z","dependencies_parsed_at":"2024-11-16T21:34:14.759Z","dependency_job_id":"418dda48-4761-4dfe-aa53-0e18d56fbb4a","html_url":"https://github.com/pokey/wax_talon","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pokey/wax_talon","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pokey%2Fwax_talon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pokey%2Fwax_talon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pokey%2Fwax_talon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pokey%2Fwax_talon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pokey","download_url":"https://codeload.github.com/pokey/wax_talon/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pokey%2Fwax_talon/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32216971,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T08:24:32.376Z","status":"ssl_error","status_checked_at":"2026-04-24T08:24:26.731Z","response_time":64,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["talonvoice","voice-coding"],"created_at":"2024-10-12T01:40:04.096Z","updated_at":"2026-04-24T09:34:39.774Z","avatar_url":"https://github.com/pokey.png","language":"Python","funding_links":["https://github.com/sponsors/pokey","https://liberapay.com/pokey"],"categories":[],"sub_categories":[],"readme":"# Wax Talon\n\nRecord your Talon sessions. Supports QuickTime, OBS, Cursorless, as well as capturing information about Talon commands, rules, phrase timing, etc. For an example of a video generated using this recorder and its associated [postprocessor](https://github.com/pokey/voice_vid), see https://pokey.github.io/videos/P2QKl-g4CGs/. For an example of the raw output of this recording code, see [the example](examples/2022-09-06T13-36-46/).\n\n**WARNING**: This code relies on undocumented and experimental Taon APIs, so it may break with future versions of Talon.\n\nNote that the OBS recorder currently only works on MacOS, as it relies on Mac accessibility APIs to start and stop recording.\n\n## Example\n\nAdd the following to a Talon file:\n\n```talon\nnot tag: user.wax_is_recording\n-\n^record start$:\n    cursorless_recorder = user.wax_cursorless_recorder()\n    quicktime_recorder = user.wax_quicktime_recorder()\n    obs_recorder = user.wax_obs_recorder()\n    user.wax_start_recording(cursorless_recorder, quicktime_recorder, obs_recorder)\n```\n\nAnd add the following to another Talon file:\n\n```talon\ntag: user.wax_is_recording\n-\n^record stop$: user.wax_stop_recording()\n```\n\nThese files will create commands `\"record start\"` and `\"record stop\"`. The `\"record start\"` command will do the following:\n\n- Start QuickTime screen recording. The location of this recording will depend on your default QuickTime directory, for example `~/Desktop`.\n- Start OBS recording (eg to capture face). The location of this recording will depend on your default OBS directory, for example `~/Movies`.\n- Create a subdirectory of `~/talon-recording-logs` to capture information about the current recording. See below for more on what we capture. The directory will be named for the current timestamp in UTC, eg `~/talon-recording-logs/2022-02-23T17-18-00/`\n- Create a `talon-log.jsonl` file within the above directory, where most information will be captured.\n- Capture git SHAs of all subdirectories of `~/.talon/user`. This information will appear in the above `talon-log.jsonl` file\n- Flash the screen purple. All timestamps captured below will be represented as seconds from this purple flash. This way all timestamps can be precisely reconciled to your screen recording.\n\nThen after each command phrase:\n\n- Cause Cursorless to capture each Cursorless command, including the editor state and the full json payload to VSCode, within a subdir of the above capture directory\n- Cause Talon to take a snapshot of VSCode editor state before and after executing every command phrase in the above directory\n- Dumps timing information about every command phrase including start and end times, which can be used to generate screenshots from the video or automatically edit the video\n- Capture links to the rules that were activated by the command phrase\n- Capture other information such as Talon tags, etc\n- Quickly flashes all Cursorless marks that were referred to during the command phrase and captures the timestamp of this moment. This information can be used to automatically highlight referenced marks in postprocessing\n\nYou can tweak the above Talonscript to remove any of the recorders, if eg you don't want to capture Cursorless commands, start QuickTime, etc.\n\n## Postprocessing\n\nSee https://github.com/pokey/voice_vid.\n\n## Making a custom recorder\n\nSee the examples in [`recorders`](recorders).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpokey%2Fwax_talon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpokey%2Fwax_talon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpokey%2Fwax_talon/lists"}