Skip to content

feat: post-processing profiles with their own shortcuts - #2149

Closed
VitoMakarevich wants to merge 1 commit into
cjpais:mainfrom
VitoMakarevich:feature/post-process-profiles-upstream
Closed

VitoMakarevich wants to merge 1 commit into
cjpais:mainfrom
VitoMakarevich:feature/post-process-profiles-upstream

Conversation

@VitoMakarevich

@VitoMakarevich VitoMakarevich commented Sep 26, 2026 •

Copy link
Copy Markdown

Before Submitting This PR

Please confirm you have done the following:

If this is a feature or change that was previously closed/rejected:

  • I have explained in the description below why this should be reconsidered
  • I have gathered community feedback (link to discussion below)

Human Written Description

Adds post-processing profiles: add/delete/update profiles, each identical to what was there before (keybinding / backend / prompts) — no changes to how post-processing itself works. The name of the profile being used is shown while post-processing, all new text is localized, and retrying a history entry falls back to no post-processing if its profile was deleted.

Profiles are managed with a tabs interface on the Post Processing page: + adds a tab, × deletes it, and double-clicking a tab title renames it.

So the process of using multiple profiles is:

  1. Set up multiple profiles (e.g. one for local inference, and as many custom others as you wish).
  2. Assign a separate keybinding to each.

E.g. I use one for local qwen, one for gpt-6-luna and one for gpt-6-sol, and assign F5/F6/F7 to them.

Why this should be reconsidered

TODO (author): similar requests were closed before (#334, #1606, see below). Explain in your own words why this should be reconsidered and link the discussion with community support.

Migration

The current setup moves into an undeletable Default profile:

  • Settings (schema 2 → 3): the old flat post_process_* settings (provider, base URL, API keys, models, prompts, selected prompt) become the Default profile, which keeps the existing "Transcribe with post-processing" shortcut, so nothing needs reconfiguring. --toggle-post-process and SIGUSR1 trigger Default.
  • History (migration 5): adds post_process_profile_id; existing post-processed entries are assigned to Default. Deleting a profile clears the id on its entries (app-level ON DELETE SET NULL, since profiles live in the settings store), and retrying such an entry skips post-processing instead of sending it to another provider.

Related Issues/Discussions

Previously closed:

Related discussions:

Discussion: TODO (author): link the discussion with community support.

Community Feedback

TODO (author): link community feedback.

Testing

  • cargo test: 290 passing, including new tests for the settings migration, profile add/rename/delete invariants, recovery from a malformed profile, profile resolution by shortcut, the history migration backfill, ON DELETE SET NULL, and retry routing.
  • tsc, eslint, check:translations (all locales), prettier / cargo fmt clean.
  • Manually on macOS (Apple silicon) with an existing 0.9.x settings store: the Default profile kept the Custom provider, base URL, model, prompts, API keys and shortcut; three profiles on F5/F6/F7 each post-processed with their own provider/model (confirmed in the logs); settings and history migrations verified on real data.
  • Not tested on Windows or Linux.

Screenshots/Videos (if applicable)

TODO (author): screenshot of the profile tabs.

AI Assistance

  • No AI was used in this PR
  • AI was used (please describe below)

If AI was used:

  • Tools used: Claude Code
  • How extensively: Implementation, tests and translations written with Claude Code, following my spec and review; I tested the feature by hand.

One post-processing setup is limiting when different tasks want different
models, e.g. a local model for quick cleanup and cloud models for heavier
rewriting. Profiles make each setup a tab with its own global shortcut.

- Each profile is a full copy of the existing post-processing settings
  (provider, base URL, API key, model, prompts); the pipeline is unchanged.
- Tabs on the Post Processing page: + adds, x deletes, double-click renames.
- The existing configuration migrates into an undeletable Default profile
  that keeps the original shortcut (settings schema 3).
- The processing overlay names the profile in use.
- History records the profile (migration 5 backfills Default); retry reuses
  it, and skips post-processing if that profile was deleted.
- New strings translated for all locales.
@VitoMakarevich
VitoMakarevich deleted the feature/post-process-profiles-upstream branch September 26, 2026 14:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant