Manage Elgato Prompter scripts through a local web GUI or CLI: import text and Markdown, export text, rename, delete, reorder, and create library backups.
Site: https://prompterkit.app/ Repo: https://github.com/snapsynapse/prompter-kit
Maintenance-only, reviewed September 2026. No feature development or Camera Hub compatibility tracking is planned. Security reports receive best-effort review, with no guaranteed response or fix timeline. Forks are welcome. Safeguards reduce some write risks; they do not guarantee compatibility or recovery. See SECURITY.md and ROADMAP.md.
Based on spieldbergo/elgato_prompter_text_importer (MIT).
- Python 3.10+; Flask is required for the GUI.
- Elgato Camera Hub installed on macOS or Windows.
- Automated tests use sanitized fixtures. The June 2026 macOS live eval passed, but did not record the Camera Hub version. This is not certification of all Camera Hub 2.x releases or of the version currently installed on your machine.
- Close Camera Hub before writes. Test against a copied data directory first when compatibility is uncertain. Do not run simultaneous writers.
The assistant guide provides structured setup actions and approval gates. Explain and approve commands individually; do not upload local scripts or backups to an assistant. Guide 1.4.0 targets the GuideCheck 0.7.1 profile and publishes a manifest and hash record. The repository checks copy and hash consistency, not full GuideCheck conformance. Use the verifier to assess conformance; neither conformance nor matching hashes establish software safety. Level 4 is the guide-file target, not an achieved claim here. Level 5 requires a separate enforcing runtime. The corrected guide passed local Level 3 checks on 2026-09-05 with no blocking findings or warnings. Public Level 4 requires the v1.0.3 guide release and matching live provenance; consult the hosted verifier and release notes for dated results. It installs the reviewed app 1.0.2 with script hash checks. See publishing and DNS steps.
On macOS or a POSIX shell, from the parent directory where you want the repo: Literal
git clone https://github.com/snapsynapse/prompter-kit.git
cd prompter-kit
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install -r requirements-gui.txtOn Windows, activate with .venv\Scripts\activate instead.
Close Camera Hub, then launch from the activated environment:
Literal
python3 prompter_kit_gui.pyThe GUI opens on loopback address 127.0.0.1, port 5000. It supports
import, export, rename, delete, and an explicit Normalize indexes command.
It does not automatically normalize indexes or provide arbitrary reorder.
GUI Export all produces a ZIP of text files, not a backup accepted by restore.
The separate Homebrew tap installs the CLI; its packaged version may lag the source release. Literal
brew install snapsynapse/tap/prompter-kit
prompter-kit doctorRun from the activated environment in the repository. Inspect commands with: Literal
python3 prompter_kit.py --help
python3 prompter_kit.py import --helpReplace: SCRIPT_PATH -> path to your UTF-8 .txt or .md file Replace: SCRIPT_NAME -> desired display name Customize
python3 prompter_kit.py import "SCRIPT_PATH" --name "SCRIPT_NAME"| Command | Behavior |
|---|---|
import / push |
Import text; .md formatting is stripped. --restart stops and restarts Camera Hub. |
export / pull |
Export by --name or --guid; --all exports a directory; --list lists scripts. |
rename / delete |
Change a friendly name or remove a script and its registration. |
reindex |
Set order from names/GUIDs, or normalize current order when none are given. |
edit |
Open chapters in $EDITOR. |
backup |
Archive registered readable scripts plus the full AppSettings.json. |
restore |
Replace library and settings from a backup; --merge adds unregistered GUIDs. |
doctor |
Inspect paths, registration, missing scripts, and process state. |
camerahub stop / start |
Control the local application. |
Most data commands accept --base-dir after the command name. The GUI uses
PROMPTERKIT_BASE_DIR; set PROMPTERKIT_OPEN_BROWSER=0 to suppress auto-open.
Single-file export overwrites its chosen destination. Export-all avoids names
already present in the destination directory and assigns distinct filenames
within each run, including case-only collisions. Concurrent exports are unsupported.
UTF-8 .txt imports preserve literal punctuation, Markdown markers, and spaces on nonblank lines. .md imports strip common Markdown formatting using a simple line-based converter, not a complete Markdown parser. Use .txt for literal text. Both formats normalize CRLF/CR to LF, treat blank or whitespace-only lines as chapter separators, collapse repeated separators, and discard empty chapters.
Export places a blank line between chapters and preserves single newlines inside them. Export and re-import preserve chapters that follow this convention; they do not preserve empty chapters or blank lines embedded within a chapter. Export adds a final newline. Use JSON backups when text conversion would lose structure you need to retain. Before 1.0.2, .txt imports also stripped Markdown.
Close Camera Hub before backup to avoid capturing files while they change. Choose a new archive path; an existing archive at that path is overwritten. Replace: BACKUP_PATH -> new path for your backup ZIP Customize
python3 prompter_kit.py backup --output "BACKUP_PATH"Backups contain the full AppSettings.json and registered script JSON files
that can be read and parsed. Missing or corrupt script files, unregistered
files, and other Camera Hub data are excluded. Backups can contain private
scripts and settings; keep them local and protected.
Replace restore replaces the entire Texts/ directory and the full settings
file, including unrelated Camera Hub settings. Unregistered files in that
directory are removed and are not covered by the automatic snapshot. Preserve
an independent copy of the entire data directory before using replace restore.
Merge restore keeps registered GUIDs, but can overwrite an unregistered file
whose GUID matches an incoming script. Check doctor warnings first.
- Import, rename, delete, reindex, and edit check known schema fields before mutation. Missing and unparseable script files are tolerated. This cannot detect every future format change. Read operations may also fail on unknown data.
- These operations normally create registered-library snapshots in
PrompterKitBackups/, with a retention limit of 20. Snapshots can be disabled withPROMPTERKIT_AUTO_BACKUP=0and have the exclusions described above. - Restore bypasses the live schema check and uses a best-effort snapshot so corrupt live data does not block recovery. Use a trusted, compatible archive.
- JSON file replacement is atomic per file, not across the library. Immediate verification detects some failures but cannot prevent later Camera Hub writes.
- Import removes its new script file when settings registration fails. Replace restore stages files and attempts rollback on swap or verification failure. Merge restore attempts file rollback on write failure before settings commit. Filesystem failures can also prevent rollback; recovery is not guaranteed.
| Platform | Path |
|---|---|
| macOS | ~/Library/Application Support/Elgato/Camera Hub/ |
| Windows | %APPDATA%\Elgato\Camera Hub\ |
PrompterKit falls back to the legacy CameraHub directory if only it exists.
See ARCHITECTURE.md for the supported data shape.
Install test dependencies using CONTRIBUTING.md, then: Literal
python3 -m pytest tests/ -q
python3 scripts/check_agent_surfaces.pyThe suite covers conversion, CRUD, restore failures, GUI routes, and fixtures. The GUI smoke eval uses a disposable copy: Literal
scripts/gui_smoke_eval.shThe optional live eval backs up registered data, temporarily imports and deletes a script, and stops/restarts Camera Hub. Inspect the script before using it: Literal
scripts/manual_live_eval.shNo new features or compatibility updates are planned. Forks are welcome; review of reports and contributions is best-effort. License: MIT.
