Skip to content

Release 1.3.0 - #3

Merged
LightCyan01 merged 4 commits into
masterfrom
agent/trainkit-v1-3-0
Oct 7, 2026
Merged

LightCyan01 merged 4 commits into
masterfrom
agent/trainkit-v1-3-0

Conversation

@LightCyan01

@LightCyan01 LightCyan01 commented Oct 7, 2026 •

Copy link
Copy Markdown
Owner

Summary

TrainKit 1.3.0 adds Claude and OpenAI captioning through users' own API keys, keeps local captioning as the default, updates supported dependencies, and fixes batch safety and desktop reliability issues.

Changelog

Added

  • API connections tab with masked key entry, session-only keys by default, optional OS-encrypted storage, editable vision model IDs, key removal, and a connection test that sends no images.
  • Caption provider dropdown that disables providers without a configured key. Select the provider and click Start captioning to run it.
  • Small top-right minimize and quit buttons on the setup window, with no text labels or visible borders. Quitting aborts setup, and minimizing keeps the main window minimized when it opens.
  • Anthropic Messages and OpenAI Responses captioning using resized, metadata-free JPEGs, bounded responses, cancellable requests, and sanitized errors. Paid requests are not automatically retried.

Changed

  • Local and cloud captioning share the existing collision policies, atomic output writes, and resumable manifests. Cloud batches stop on provider errors, refusals, and incomplete responses.
  • Removed dry-run controls from the desktop panels and centered the manifest checkbox with the collision selector. Simplified README wording.
  • Updated Electron 44, Forge 8, ESLint 10, Vitest 5, Lucide 1, and supported frontend/backend dependencies; refreshed both lockfiles and adapted Forge's CommonJS bundle paths. Node.js 22.17+ is required for development.
  • Removed unused slider/import-lint dependencies and redundant rename caching. TypeScript remains on 5.9 because the current ESLint parser does not support TypeScript 7.
  • Preserved existing local security boundaries and the Windows ZIP distribution. Configured keys are not returned to the renderer or written to jobs, logs, or manifests.

Fixed

  • Failed model switches retaining a cleaned-up cached service, queued cancellation starting a runner, duplicate submissions, and stale job state after reconnecting.
  • Caption loading/unloading controls, backend startup error reporting, shutdown after spawn failure, and empty API error responses.
  • New output paths and generated manifests escaping selected folders through junctions, including dangling folder links; failed atomic writes leaving temporary files.
  • Unreadable remembered API keys could not be removed without a replacement key.
  • Cloud uploads lost photo rotation and mirroring when image metadata was removed.
  • Cloud captioning hid local file-save failures behind a generic provider error.
  • Invalid rename inputs, unsupported images entering duplicate detection, and unstable natural-order ties.
  • Single-channel NCNN output and invalid tiled overlap.
  • Corrupt provider records discarding another remembered key, development setup removing test tools, and frontend watching Python environment files.

@LightCyan01
LightCyan01 marked this pull request as ready for review October 7, 2026 19:28
@greptile-apps

greptile-apps Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

RetriggerConfidence Score: 5/5

[High risk] Adds cloud captioning with API key handling and updates major dependencies.

The PR appears safe to merge; all four previous findings are addressed and no new actionable issue remains.

What we checked:

  • Dangling links cannot grant outside folders: lstatSync finds the link itself. realpathSync.native then rejects its missing target before isGranted can accept the path.
  • Provider errors still hide secrets: process_caption_batch hides unexpected cloud errors inside the call to caption_image. The separate file-write error can show its cause without receiving the provider key.
Summary

TrainKit 1.3.0 adds Claude and OpenAI captioning with users’ own API keys while keeping local captioning as the default.

  • Caption panels can use local models, Anthropic, or OpenAI.
  • The API tab lets people manage Anthropic and OpenAI keys.
  • Jobs keep their latest state when they start, stop, or reconnect.
  • New output files and manifests stay inside the chosen folders.
  • Rename batches use supported images and stable name ordering.
  • NCNN upscaling checks tiled overlap and handles single-channel output.
  • Backend startup and setup windows handle errors and controls cleanly.
  • Batch panels focus on running work and sharing collision options.
  • TrainKit 1.3.0 updates its release notes and development toolchain.
Diagram
%%{init: {'theme': 'neutral'}}%%
flowchart LR
  UI["Caption page"] --> Main["Main process: check selected paths"]
  Keys["Session or OS-encrypted API key"] --> Main
  Main --> Backend["Authenticated backend caption job"]
  Backend --> Plan["Check collisions and resume progress"]
  Plan --> Local["Local model"]
  Plan --> Cloud["Rotate, resize, and remove image metadata"]
  Cloud --> Provider["Claude or OpenAI"]
  Local --> Save["Write caption atomically"]
  Provider --> Save
  Save --> Progress["Update optional manifest and job progress"]
Loading

Reviews (2) · Last reviewed commit: "Fix Greptile path, key removal, and clou..." · Reviewed by Greptile

Comment thread src/path-grants.ts Outdated
Comment thread src/components/trainkit/panels/api-panel.tsx Outdated
Comment thread backend/service/cloud_captioning.py Outdated
Comment thread backend/service/image_captioning.py Outdated
@LightCyan01
LightCyan01 merged commit e6ce7d7 into master Oct 7, 2026
6 checks passed
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