Release highlights since 1.4.5:
- Transcript: OpenRouter and Google model fetchers now store token
limits even when the API omits a max-output figure, so the model
parameters panel prefills real values.
- Settings: removed the duplicate standalone "Max tokens" field; the
"Model parameters" panel is the single token-limit control on every
provider.
- Model/provider notices reworded to "output budget" so the figure is
honestly labelled as a derived value, not a hidden setting.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The standalone "Max tokens" field was removed, but the model- and
provider-change notices still announced "Max tokens updated to N",
implying a setting the user could go look at. N is a derived value
(max output x (1 - reserve)). Reword the notices to "Output budget:
N tokens (max output minus reserve)" so the number is honestly
labelled as a computed result, not a hidden field.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The comment described updating a field that was deleted with the
standalone Max tokens field. The this.display() call it precedes is
unchanged and still correct.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
With the standalone Max tokens field removed, the panel is the sole
token-limit control and its fields are always prefilled. The old
"Optional: registry defaults apply when these are blank" text was
inaccurate — the fields are never blank. Reword to describe the panel
as the model's prefilled, editable token limits.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
fetchGoogleModels only stored a model's limits when the API returned
both context and output token limits. Mirror the OpenRouter fetcher:
store an entry whenever a context window is present, deriving max
output (8k, capped to context) when the API omits it, so the model
parameters panel prefills real values instead of the 128/16 fallback.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The "Model parameters" override panel and a separate "Max tokens"
field both controlled output tokens, shown together for any model
outside the small static registry — confusingly, on every provider.
Remove the standalone field and its isCustomModel / maxTokensField /
refreshMaxTokensField plumbing; the panel is now the single source.
settings.maxTokens stays correct via the existing getEffectiveMaxTokens
calls in the dropdown and panel onChange handlers.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
fetchOpenRouterModels only recorded a model's limits when the API
returned both context_length and top_provider.max_completion_tokens.
OpenRouter leaves max_completion_tokens null for many models, so
those got no customModelLimits entry and the model-parameters panel
fell back to the generic 128/16 placeholder — making it look like the
overrides never updated when switching OpenRouter models.
Now store an entry whenever context_length is present, deriving max
output (8k, capped to context) when the API omits it.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Docs-only release: refreshes the README on the Obsidian community
plugins page. The demo poster now links to a publicly accessible
user-attachments video URL (the prior one came from an unsubmitted
issue draft and was not public). Plugin code unchanged from 1.4.4.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The previous user-attachments URL came from an unsubmitted issue
draft, so it was only accessible to the uploader. Re-uploaded via a
posted issue (#2) on the public repo; the new asset URL is publicly
accessible. The poster thumbnail now links to it.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Docs-only release: refreshes the README on the Obsidian community
plugins page. The demo section now uses the clickable poster
thumbnail (works on both GitHub and the community page) instead of
the GitHub-only inline embed. Plugin code unchanged from 1.4.3.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The bare user-attachments URL only embeds inline on GitHub; on the
Obsidian community page it shows as a raw link. The poster thumbnail
works as a clickable image on both surfaces and links to the same CDN
video. Keep the thumbnail, drop the bare-URL embed.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Patch release: fix the settings info icons (ScrapeCreators, Supadata,
OpenRouter, and section headings) which rendered on a centred line
below the title. inline-flex places them immediately after the title.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
.tubesage-settings-info-icon used display:flex, making the icon span
block-level so it dropped to its own centred line below the setting
title. Switch to inline-flex (+ small left margin, vertical-align)
so it sits immediately after the title text, as intended. Affects
the ScrapeCreators / Supadata / OpenRouter key settings and the
section-heading info icons.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Docs-only release: refreshes the README on the Obsidian community
plugins page (which updates on release, not on main). Plugin code is
unchanged from 1.4.1 — README demo section cleaned up to a single
inline video embed.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The bare user-attachments URL already renders an inline video player
on GitHub; the poster image below it made the page look like it had
two videos. Keep just the single inline embed.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The user-attachments embed plays inline on GitHub but the Obsidian
community plugins page can't render it. Add the poster image back as
a clickable thumbnail (linking to the same CDN video URL) so that
page still has a visual demo.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Replace the poster-thumbnail link with a github.com/user-attachments
asset URL. GitHub renders a bare user-attachments URL as an inline
video player, sidestepping the repo-blob size limit entirely.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
7.5MB still tripped GitHub's blob-size limit. Re-encode from the
original (recovered from git history, to avoid stacking compression)
at ~330 kbps -> ~4.7MB, frame size unchanged (860x720).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Patch release: fix the mobile example-template viewer, which 1.4.0
shipped collapsed to ~2 lines. flex-shrink:0 stops the mobile modal's
flex column from squeezing the content box below its set height.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Extract a poster frame (the TubeSage settings panel) and use it as a
clickable thumbnail linking to the walkthrough video. Absolute
raw.githubusercontent.com URL so the image also renders on the
Obsidian community plugins page, which sanitizes inline video.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Two-pass H.264 re-encode at ~550 kbps, frame size unchanged
(860x720, 114s). The previous 22MB file exceeded GitHub's ~10MB
inline-video limit ("can't show files this big"); 7.5MB plays
inline in the blob view.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The 1.4.0 mobile fix set height:50vh on the template content box, but
the mobile modal content is a flex column and the box (default
flex-shrink:1) was squeezed back down to ~2 lines by its siblings.
Add flex-shrink:0 so the set height actually holds.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The superpowers specs/plans are internal workflow scaffolding, not
distributable project docs. Untrack them and add docs/superpowers/
to .gitignore. Files are kept locally. This also clears a GitHub
secret-scanning false positive: a spec quoted YouTube's public
InnerTube key, which matches the AIzaSy* Google-API-key pattern.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
State explicitly that TubeSage only writes to the clipboard (Obsidian
-> clipboard, via Copy template) and never reads it, so it cannot
expose content copied from outside Obsidian.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Highlights since 1.3.3:
- Transcript extraction reworked onto the YouTube iOS InnerTube
player API; the four broken free local fallbacks removed.
- OpenRouter model-list refresh with a vendor-grouped dropdown.
- Service-URL info icons for ScrapeCreators, Supadata, OpenRouter.
- Desktop processing no longer leaves a blank popup.
- Mobile example-template viewer enlarged so content is visible.
- UI primitives migrated to native Obsidian components (Tier A).
- README network/base64 disclosures completed.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Static analysis flags atob()/btoa() calls in the bundle. Disclose in
Privacy & Security that they all originate in bundled libraries and
are routine base64 operations, not obfuscation.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The Privacy & Security > Network requests list omitted the two
optional paid transcript APIs the plugin contacts when a key is
configured. Add them so the disclosure is complete.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Delete the four obsolete local transcript methods, their six helper
methods, the YouTubeConfig interface, and the now-unused statics. The
iOS player method added earlier is the sole local fallback.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
fetchTranscript now uses a three-rung ladder (ScrapeCreators, iOS
player, Supadata). getVideoMetadata is sourced from the iOS player
response instead of the watch-page HTML scrape.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add fetchIosPlayerData and fetchViaIosPlayer, built from the YouTube
iOS player approach. Not yet wired into the fallback ladder.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The template-viewer content box used only max-height, so on mobile it
collapsed to a blank single line. Add a mobile size override for the
modal and a definite height for the content container inside the
existing max-width:768px media query. Desktop is unchanged.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Info (i) icons with service URLs on the ScrapeCreators, Supadata,
and OpenRouter settings.
- fetchOpenRouterModels: refresh the full OpenRouter model list from
the public API, vendor-grouped dropdown, auto-stored token limits.
- Desktop processing no longer shows a blank popup: the modal closes
on desktop (status-bar spinner only); mobile keeps the in-modal spinner.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Tier A of the UI native-component audit, no intended look-and-feel change:
- info icon and icon buttons -> setIcon / ExtraButtonComponent
- text buttons -> ButtonComponent (Process uses setCta)
- create-note modal URL/title inputs -> TextComponent, video-count
select -> DropdownComponent
Deferred: MarkdownRenderer for README/license modals, FuzzySuggestModal
for the pickers (both visibly change look).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Releases the current state as a stable before/after boundary:
- Copy template button restored (mobile users cannot scroll the
template example), plus a mobile touch-scroll hint.
- Settings info-icon tooltips fixed: native Obsidian setTooltip
replaces the flaky custom hover tooltip; OpenRouter reliability
note added to the LLM tooltip.
- Workflow and data-flow mermaid diagrams refreshed to current
architecture.
- README links made absolute so they resolve on the community site;
demo video linked.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>