{"id":47632871,"url":"https://github.com/rambip/sttui","last_synced_at":"2026-04-01T23:51:47.433Z","repository":{"id":344387026,"uuid":"1181564014","full_name":"rambip/sttui","owner":"rambip","description":"Modern speech to text in your terminal. Use for scripting, writing, vibe coding and more !","archived":false,"fork":false,"pushed_at":"2026-03-22T20:20:01.000Z","size":299,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-23T06:21:19.699Z","etag":null,"topics":["productivity","python","speech-to-text","tui","vibe-coding"],"latest_commit_sha":null,"homepage":"","language":"Python","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/rambip.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":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-14T10:09:38.000Z","updated_at":"2026-03-22T20:20:04.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/rambip/sttui","commit_stats":null,"previous_names":["rambip/sttui"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/rambip/sttui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rambip%2Fsttui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rambip%2Fsttui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rambip%2Fsttui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rambip%2Fsttui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rambip","download_url":"https://codeload.github.com/rambip/sttui/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rambip%2Fsttui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31293123,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T21:15:39.731Z","status":"ssl_error","status_checked_at":"2026-04-01T21:15:34.046Z","response_time":53,"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":["productivity","python","speech-to-text","tui","vibe-coding"],"created_at":"2026-04-01T23:51:43.973Z","updated_at":"2026-04-01T23:51:47.420Z","avatar_url":"https://github.com/rambip.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"logo.png\" alt=\"sttui logo\" width=\"300\" /\u003e\n\n  # `sttui`: Speech To Text in your terminal\n  \n  **No browser. No Web UI. Fast speech-to-text with the best models**\n\n\n  [![PyPI version](https://badge.fury.io/py/sttui.svg)](https://badge.fury.io/py/sttui)\n\u003c/div\u003e\n\n\nhttps://github.com/user-attachments/assets/252ba77e-d3f3-4689-bcc1-77f536f10c60\n\n\n# Setup\n\n```bash\npip install sttui\n```\n\n(or if you have `uv` installed, `uvx sttui`)\n\nThen, you must have an account on [openrouter](enrouter.ai/), and get an API key.\n\nTo register it, run:\n\n```bash\nsttui auth\n```\n\n\u003cdetails\u003e\n  \u003csummary\u003eStorage of your key\u003c/summary\u003e\n\n  Your key will be stored inside ~/.config/sttui/auth.json\n  \n  Make sure you don't commit this file !\n\u003c/details\u003e\n\n# Config\n\nWhen you first start the app, a config file is created at: `~/.config/sttui/config.toml`\n\nYou can specify the default model (without the `openrouter` prefix), the prompt, and the maximum audio length.\n```toml\n[transcription]\nmodel = \"mistralai/voxtral-small-24b-2507\"\nprompt = \"\"\"\nYou are a helpful assistant that can hear audio and write text.\nReturn a transcription of the user audio as json. If the user request is empty, return null.\n\u003cformat\u003e\n{\n  \"transcription\": \"\"\n}\n\u003c/format\u003e\n\u003cformat\u003e\n{\n  \"transcription\": null\n}\n\u003c/format\u003e\n\"\"\"\nmax_seconds = 600\n```\n\n⚠️ Make sure that the prompt asks the model to answer in this json format, it's the one expected by `sttui`\n\n# Commands\n\n```bash\n\n# Start interactive dictation TUI\nsttui\n\n# Equivalent explicit run command\nsttui run\n\n# Show CLI help\nsttui --help\n\n# Set or update API key\nsttui auth\n\n# TUI + write transcript to stdout on Enter\nsttui --stdout\n\n# Override model and recording cap for this run\nsttui --model google/gemini-2.5-flash --max-seconds 120\n\n# Use a custom config file\nsttui --config ~/.config/sttui/config.toml\n\n# Record, transcribe, and send to an HTTP endpoint\nsttui send --post https://example.com --body '{\"text\": $0}'\n\n# Send transcript to a shell command\nsttui send --command 'xargs -I {} notify-send \"{}\"'\n\n# Chain multiple sends (with 1s delay between them)\nsttui send --post https://example.com/foo --body '{\"a\": $1}' \\\n           --post https://example.com/bar --body '{}' \\\n           --delay 1000\n\n# Background lifecycle (no TUI)\nsttui background start\nsttui background stop\nsttui background toggle\n\n# Same with desktop notifications\nsttui background --notify start\n```\n\n## Send Command Templates\n\nIn `--body` templates, use `$0` for the full transcript, `$1`/`$2`/etc. for individual parts.\n\nValues are JSON-escaped automatically when a `--body` template is provided.\n\nAll recordings and transcripts are stored in `~/.local/share/sttui/recordings/`.\n\n# Contributing\n\nThis is a side-project of mine. I must admit there is mostly AI-generated code, but I try to review and ensure good practices.\n\nI don't have strong opinions about how this project should evolve. If you find it useful, feel free to contribute !\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frambip%2Fsttui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frambip%2Fsttui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frambip%2Fsttui/lists"}