Skip to content

v2.0.6: thumbnail config management, Studio re-skin, clip metadata#25

Merged
nmbrthirteen merged 1 commit into
mainfrom
release/v2.0.6
Jun 19, 2026
Merged

v2.0.6: thumbnail config management, Studio re-skin, clip metadata#25
nmbrthirteen merged 1 commit into
mainfrom
release/v2.0.6

Conversation

@nmbrthirteen

@nmbrthirteen nmbrthirteen commented Jun 19, 2026

Copy link
Copy Markdown
Owner

Thumbnails

  • Fix blank settings fields + wrong render colours. Root cause: the Studio web server read/wrote the thumbnail config from a different path than the renderer (launcher data-dir divergence). The UI now routes config reads/writes through the CLI, so fields populate with the real config and generated thumbnails match the live preview.
  • Generic by default. With no user config, a neutral template is used; the branded look comes only from the user's own gitignored .podcli/thumbnail-config.json.
  • Export / import / reset everywhere:
    • CLI: podcli thumbnail-config show|export <path>|import <path>|reset
    • MCP: manage_thumbnail_config tool (show/export/import/reset)
    • Studio: Export / Import / Reset buttons on the Thumbnail template page

Studio UI

  • Align design tokens, fonts (Instrument Sans), and the 3D button treatment with the podcli landing site; add glass utilities.

Clips

  • Persist AI-generated titles / description / tags / hashtags onto the clip history entry and surface them on the clip detail page (previously generated then discarded).

Also

  • .gitignore: ignore tool caches (.cache, .vite, .turbo, *.tsbuildinfo, …).
  • Self-update (cli/internal/update) improvements.

Verification

  • go test ./internal/update/ — pass
  • npx vitest run — 47 pass
  • Root + client tsc --noEmit — clean
  • Studio bundle builds; thumbnail generation confirmed working in the bundled binary with correct colours.

Summary by CodeRabbit

Release Notes

  • New Features

    • AI-powered content generation for clips, including auto-generated titles, descriptions, tags, and hashtags
    • Thumbnail template management with export, import, and reset options
    • CLI self-update capability for streamlined binary updates
    • Enhanced thumbnail configuration management via CLI and UI
  • Style

    • Updated color palette and typography with new font families
  • Tests

    • Added validation tests for self-update failure messaging
  • Chores

    • Updated build cache exclusions in project configuration

Thumbnails:
- Fix Studio/renderer config path divergence: the Web UI now reads and
  writes the thumbnail template through the CLI, so the settings fields
  populate with real values and generated thumbnails match the preview
  (previously fields were blank and renders used default colours).
- Generic template by default; a brand look comes only from the user's
  own (gitignored) .podcli/thumbnail-config.json.
- Export / import / reset on all surfaces: `podcli thumbnail-config
  show|export|import|reset`, the manage_thumbnail_config MCP tool, and
  Export/Import/Reset buttons in the Studio.

Studio UI:
- Align tokens, fonts, and button treatment with the podcli landing
  design (palette, Instrument Sans, 3D buttons, glass utilities).

Clips:
- Persist AI-generated titles/description/tags/hashtags onto the clip
  history entry and surface them in the clip detail page.

Also: ignore tool caches; self-update improvements.
@coderabbitai

coderabbitai Bot commented Jun 19, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: b7bddc0d-321f-4ce9-9407-e2fadeb2d3e6

📥 Commits

Reviewing files that changed from the base of the PR and between 4625ee1 and e9740c5.

📒 Files selected for processing (13)
  • .gitignore
  • backend/cli.py
  • backend/services/clips_history.py
  • cli/internal/update/update.go
  • cli/internal/update/update_test.go
  • src/models/index.ts
  • src/server.ts
  • src/ui/client/ClipDetail.tsx
  • src/ui/client/EpisodeWorkspace.jsx
  • src/ui/client/ThumbnailTemplate.tsx
  • src/ui/client/index.html
  • src/ui/public/css/styles.css
  • src/ui/web-server.ts

📝 Walkthrough

Walkthrough

The PR adds thumbnail template config CRUD (Python CLI thumbnail-config command, web-server routes delegating to CLI, manage_thumbnail_config MCP tool, and ThumbnailTemplate export/import/reset UI), persists AI-generated clip metadata (generated_titles, description, tags, hashtags) through ClipHistoryEntry, the generate-content endpoint, and a new ClipDetail section. The Go CLI self-update gains phase-aware error reporting. The UI theme, fonts, and component styles are also updated.

Changes

Thumbnail Config Management & AI Clip Content

Layer / File(s) Summary
AI clip metadata model and schema
backend/services/clips_history.py, src/models/index.ts
ClipHistoryEntry gains optional generated_titles, description, tags, and hashtags fields in both the TypeScript interface and the Python module-level schema docs.
Generate-content endpoint persistence and ClipDetail UI
src/ui/web-server.ts, src/ui/client/ClipDetail.tsx
POST /api/generate-content now patches the resolved ClipHistoryEntry with returned metadata before responding. ClipDetail.tsx gains generateContent, a copy helper, and a rendered "Titles & description" section with per-field copy controls.
Thumbnail config Python CLI command
backend/cli.py
cmd_thumbnail_config implements show/export/import/reset against the renderer config path, registered as a thumbnail-config subparser and dispatched from main().
Thumbnail config web routes and MCP tool
src/ui/web-server.ts, src/server.ts
Web-server thumbnail-config GET/PUT/reset endpoints now delegate to the Python CLI via temp-file handoff. manage_thumbnail_config MCP tool exposes all four actions, calling the Web UI API with connection-failure guidance.
ThumbnailTemplate export/import/reset UI
src/ui/client/ThumbnailTemplate.tsx
Adds exportCfg, importCfg, and reset actions; busy state becomes a discriminated string/null for per-action spinners; action area expands to four buttons with a hidden file input via useRef.
UI theme, fonts, and styling
src/ui/client/index.html, src/ui/public/css/styles.css, src/ui/client/EpisodeWorkspace.jsx, .gitignore
Switches Google Fonts to Instrument Sans/DM Sans/JetBrains Mono, refreshes :root palette and design tokens, restyles .btn/.btn-go, adds .title-option and .copy-btn, adjusts active-clip highlight colors, and adds tool-cache entries to .gitignore.

CLI Self-Update Phase-Aware Errors

Layer / File(s) Summary
Phase error types, update logic, and tests
cli/internal/update/update.go, cli/internal/update/update_test.go
Adds updatePhase enum and phaseError wrapper; Run calls apply(tag) and dispatches printSelfUpdateFailure with a phase-specific message on failure. Two new tests assert package-manager fallback wording is absent and download-phase message is correct.

Sequence Diagram(s)

sequenceDiagram
  rect rgba(100, 120, 200, 0.5)
    Note over ClipDetail.tsx,ClipsHistory: AI Content Generation & Persistence
  end
  participant ClipDetail.tsx
  participant WebServer as web-server.ts
  participant ClipsHistory as ClipHistoryEntry store

  ClipDetail.tsx->>WebServer: POST /api/generate-content (clip id, timestamps, transcript)
  WebServer->>WebServer: execute Python generator
  WebServer->>ClipsHistory: patch entry with titles/description/tags/hashtags
  WebServer-->>ClipDetail.tsx: return generated data
  ClipDetail.tsx->>ClipDetail.tsx: load(), render Titles & description section
Loading
sequenceDiagram
  rect rgba(80, 160, 120, 0.5)
    Note over ThumbnailTemplate,PyCLI: Thumbnail Config CRUD
  end
  participant ThumbnailTemplate as ThumbnailTemplate.tsx
  participant WebServer as web-server.ts /api/thumbnail-config
  participant PyCLI as backend/cli.py thumbnail-config
  participant MCP as manage_thumbnail_config (server.ts)

  ThumbnailTemplate->>WebServer: PUT /api/thumbnail-config (import JSON)
  WebServer->>PyCLI: write temp file, thumbnail-config import <tmp>
  PyCLI-->>WebServer: ok
  WebServer-->>ThumbnailTemplate: { ok: true }

  MCP->>WebServer: GET /api/thumbnail-config (show)
  WebServer->>PyCLI: thumbnail-config show
  PyCLI-->>WebServer: JSON config
  WebServer-->>MCP: config JSON
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • nmbrthirteen/podcli#5: Introduced the /thumbnail-config editor UI in ThumbnailTemplate.tsx; this PR extends it with export/import/reset actions.
  • nmbrthirteen/podcli#7: Changed services.thumbnail_html._load_config() to read the config file as UTF-8, directly affecting the config-loading path now invoked by the new thumbnail-config show CLI command.

Poem

🐇 Hop, hop — new buttons appear,
Export, Import, Reset, and cheer!
AI titles spring from the ground,
Phase errors now properly found.
The fonts got a fresh bunny coat,
And .gitignore guards every note! 🥕

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch release/v2.0.6

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 golangci-lint (2.12.2)

level=error msg="[linters_context] typechecking error: pattern ./...: directory prefix . does not contain main module or its selected dependencies"


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@nmbrthirteen nmbrthirteen merged commit 4402588 into main Jun 19, 2026
4 of 5 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