117 Commits
Author SHA1 Message Date
周小舟 a8cac39ef0 docs: add sixteen playable video demos to translated READMEs 2026-10-01 23:42:47 +08:00
周小舟 7d33f3c9d4 docs: review current behavior and remove stale README claims 2026-10-01 23:21:45 +08:00
周小舟 8f9416f21e docs: align eight READMEs with the 1.5.0 release 2026-10-01 23:14:47 +08:00
周小舟 52b20fac68 docs: record 1.5.0 latest release and issue closure 2026-10-01 22:49:56 +08:00
周小舟 9a130ee61a docs(1.5): record merged tag and final long-video acceptance 2026-10-01 22:07:56 +08:00
周小舟 1b02347c3e fix(studio): rank eligible clips per platform and settle empty queues 2026-10-01 21:47:54 +08:00
周小舟 0fe48c051e fix: settle observed AI cover results before replacement 2026-10-01 21:34:55 +08:00
周小舟 0147056d21 fix: complete 1.5 delivery telemetry and publish CLI MCP assets 2026-10-01 21:28:48 +08:00
周小舟 1d433ea1f5 docs(1.5): record cross-platform installed wheel acceptance 2026-10-01 21:07:26 +08:00
周小舟 ee73e594ff fix(render): select bundled CJK family across font providers 2026-10-01 20:58:33 +08:00
周小舟 e3e57236a6 fix(release): bundle face detector and verify installed portrait output 2026-10-01 20:50:46 +08:00
周小舟 e23dc999f2 fix(cli): apply Windows connection cleanup at headless startup 2026-10-01 20:25:07 +08:00
周小舟 5c0b82e0ee fix(ci): isolate runtime tests and sync quick-output docs 2026-10-01 20:07:59 +08:00
周小舟 d3e3cb1a84 fix(1.5): complete output acceptance and align CLI/MCP 2026-10-01 20:00:45 +08:00
周小舟andClaude Opus 5.5 723eefbd52 feat(studio): blur burned Chinese captions out of English versions; 1.4 AI covers off
- Detection also records where the burned captions sit. An English version
  of a source with non-English captions blurs that band before any layout,
  then is framed and captioned like a caption-free source.
- AI covers switched on by 1.4's first setup read as off after upgrading
  (1.5 would bill one per output in the background); the chosen model stays
  and one click turns them back on. Every 1.5 save marks the choice explicit.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 19:08:26 +08:00
周小舟andClaude Opus 5.5 ecd0dda509 fix: failures degrade instead of losing work; record the review
- cloud ASR retries a rate-limited or failing chunk with backoff and stops
  sending the rest once one fails for good; a bad concurrency env var is safe
- a stalled hardware encoder falls back to libx264; a bad input no longer
  disables hardware encoding
- a failed outro delivers the video without it; Windows font paths and
  apostrophes in paths work in the outro
- no AI cover without permission to send the frame (no invented face
  under the guest's nameplate)
- handoff doc: review results, open decisions, deferred findings

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 18:58:06 +08:00
周小舟andClaude Opus 5.5 3b8088c8a4 fix(studio): backups render only once prepared; review fixes
- A backup clip being framed and packaged is 'preparing', invisible to the
  render dispatcher, so it can no longer ship raw; claiming it is atomic.
  A failed preparation settles the generation, retry prepares it again, and
  one interrupted by a restart becomes retryable.
- The results page keeps polling while outputs are preparing or rendering.
- AI cover redesign: no false success on timeout, nothing after unmount.
- Saved post copy shows at once; title lines keep their place while typing.
- Generated-image downloads refuse local/private hosts (each redirect too)
  and stop at 40 MB.
- Docs: cloud ASR numbers, CHANGELOG entries for this round.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 18:37:01 +08:00
周小舟andClaude Opus 5.5 1317b5d4b8 docs(handoff): demos rebuilt; note 9:16 AI cover padding
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 18:06:09 +08:00
周小舟andClaude Opus 5.5 ed14a34953 docs: 1.5.0 fast-output handoff, kept current as work lands
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 18:01:05 +08:00
周小舟andClaude Opus 5.5 53ececdcb2 test(bench): fast-output regression set with per-stage timing
- 17 fixed real inputs (owner's picks: long interviews, short sources,
  keynotes with screen demos, Chinese sources with burned captions, auto-
  caption-only and once-360p sources) in benchmarks/fast_output/cases.json.
- scripts/fast_output_benchmark.py imports each through the product API and
  reports per-stage time, model calls, tokens and cost, clips and renders,
  source resolution, subtitle source, burned captions and packaging
  fallbacks; --baseline prints deltas.
- Stage wall times (download, transcribe, clip finder, boundaries, framing,
  packaging, post copy, render) are recorded next to token usage.
- Changelog: publish kit, outro, caption strategy, low-resolution fix.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 14:53:19 +08:00
周小舟andClaude Opus 5.5 05b33bfad4 docs: measured cost and time per video link
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 14:12:51 +08:00
周小舟andCursor 0ee5633ca6 docs: rewrite README around real outputs and V2 speed/cost numbers
Lead with an animated wall of untouched outputs and the measured
before/after table (1h43m interview: 7.5 min, ¥0.09), then features,
a subscription-tool comparison and the existing install paths. Sponsors
move below the quick start in a compact table.

DESIGN.md records the homepage stage band and number-proof rules
approved for the website redesign.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-01 14:02:36 +08:00
周小舟andClaude Opus 5.5 355ee9bb84 docs: record pipeline V2 progress and regression numbers
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 13:23:30 +08:00
周小舟andClaude Opus 5.5 f02be3e0d2 feat(studio): render the top 10 clips automatically, the rest on demand
A two-hour talk yields 30+ clips; rendering all of them up front was most of
the run while people publish a handful. Automatic output now frames,
packages and renders the 10 highest-scored clips; the others are listed as
backup clips (status on_demand, no model or render cost) and are framed,
packaged and rendered when the user clicks 'Generate this one'. Adding a
platform keeps each moment's choice. Generation completes once the
automatic versions finish; analytics count on-demand versions separately.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 13:11:11 +08:00
周小舟andClaude Opus 5.5 5aa5f0fdb9 feat(pipeline): find clips in one pass over the whole transcript
Fast output no longer runs outline -> timeline -> scoring -> titles over
5000-character chunks. One call per ~60-minute window (parallel, with
overlap) reads compact id|time|text rows and returns finished clips with
rows, Chinese title, reason and score; picks are validated, deduplicated
across windows, snapped by refine_timeline and selected by select_clips, in
the legacy titled-clip shape. Short-video lengths (60-300 s, ideally
90-180 s) replace the podcast-era 90 s floor that padded answers into the
next question. Any failure falls back to the legacy steps.

MrBeast 2h06m: ~35 min / 128 calls / 500K tokens -> 38 s / 4 calls / 93K.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 12:53:21 +08:00
周小舟andClaude Opus 5.5 822886e7f6 docs: fix the fast-output workflow and what was trimmed
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 11:49:57 +08:00
周小舟andClaude Opus 5.5 088dde840e docs: record boundary snapping and mood looks
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 03:50:07 +08:00
周小舟andClaude Opus 5.5 506beb7291 feat(analytics): observe automatic generation and template packaging
Automatic output has no confirmation step and no client export, so the
screening and production watches never settled and the only terminal event
depended on the results page staying open. Screening now ends as
auto_started once production begins, and a persisted studio-generation
watch reports studio_generation_finished once with aggregate counts
(variants, templates, speaker framing, packaging fallbacks, trims, burned
captions) and backend-timed duration. The backend keeps the analysis run_id
across phases, records generation.finished_at and marks automatic framing
as framing_source=auto.

Draft save/export carry template, style, tags switch and fallback; variant
downloads, shares and ratings carry the platform, template, style and
framing plus flow context. All new fields are allowlisted enums, counts or
booleans; no titles, captions, names or tags leave the app.

Also fix two issues found while rendering demos: deriving a draft for
another platform now resets the title template version (Xiaohongshu after
Douyin failed validation), and English caption segments and long model
titles no longer force a packaging fallback.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 23:49:46 +08:00
周小舟andClaude Opus 5.5 f006b08fdc Merge origin/main into worktree-project-diagnosis
Resolve conflicts with main's onboarding/Studio delivery analytics, download
recovery, 1080p60 export and SenseVoice changes:
- analytics allowlist and operation names are the union of both sides;
  layout adds 'window'; import properties keep flow ids plus platform count
  and outro flag
- Studio download keeps recovery and writes a temporary info.json to read
  the listing title/channel for nameplates
- 1080p60 stays an export-only preset next to the platform projections, and
  keeps the outro frame-rate fix
- locale catalogs merged key by key (no key changed on both sides)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 23:28:59 +08:00
周小舟andClaude Opus 5.5 910d1c8690 feat(studio): two-line caption screens and template styles
Vertical captions stacked up to five lines: libass lays SRT out on a 288 px
canvas, so Fontsize 20 became ~133 px on a 1920 px frame. Scale the legacy
force_style for portrait and split every row into consecutive screens of at
most two lines, breaking on punctuation and natural joints, sharing time by
width and keeping the original translation in step. Template captions use
the same layout.

Add styles on top of the golden defaults (interview: classic, caption bar,
spotlight; podcast: word pop, caption bar, cinematic) with the same layout
contract and DESIGN.md palette; Studio can switch style on a packaged draft.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 23:07:25 +08:00
Naman Aroraand周小舟 8968916b70 feat(cli): 支持 opencode MCP 一键接入(autoclip mcp install opencode) (#229)
* feat(cli): 支持 opencode MCP 一键接入(autoclip mcp install opencode)

新增 autoclip mcp install opencode:自动探测启动命令(autoclip / autoclip-mcp / python -m backend.mcp_server),把 mcp.autoclip 合并写入 opencode 配置(全局 ~/.config/opencode/opencode.json,或 --scope project 写项目 opencode.json)。

不覆盖用户已有配置:写入前备份 opencode.json.bak;JSONC 注释配置默认不动,--force 才先备份再重写;无法解析的配置永不覆盖。新增 backend/services/opencode_setup.py(仅标准库)与 7 个单元测试;新增 docs/OPENCODE.md / docs/OPENCODE.en.md,并更新 CLI_AND_MCP、README、mcp_server.py docstring。

* docs: 文档中心收录 opencode 接入指南

* fix(cli): opencode 接入修复 [P2]:重装保留自定义字段、jsonc 优先级与冲突拒绝

重装只更新 type / command,按 key 合并 environment(模块回退写 PYTHONPATH),保留 timeout / enabled 等用户字段;只有 opencode.jsonc 时写 jsonc,两份配置都有且 jsonc 含 mcp 段时写入前直接拒绝;解析兼容 UTF-8 BOM。回归测试 16 passed。

* fix(cli): honor explicit OpenCode config and refresh fallback paths

---------

Co-authored-by: 周小舟 <christine_zhouye@163.com>
2026-09-30 22:03:11 +08:00
Kris K 70e4f42495 docs: refresh contribution guide and GitHub community entrypoints (#246) 2026-09-30 22:00:30 +08:00
Kris K 7fd70c9919 refactor: 整理旧运维入口与过时仓库文档 (#245)
* refactor: consolidate repository launchers and retire stale tooling

* test: wait for source smoke broker and correct desktop entry docs

* chore: exclude runtime PID metadata from repository and images
2026-09-30 21:43:41 +08:00
Kris K e9e6c90b42 feat: add SenseVoiceSmall as a local subtitle transcription option (#244)
* feat: add optional isolated SenseVoice local transcription

* test: verify local transcription selector switches SenseVoice and Whisper

* docs: set realistic disk space expectation for SenseVoice preparation

* docs: reconcile issue 67 delivery with historical ASR plans
2026-09-30 21:16:00 +08:00
周小舟andClaude Opus 5.5 84f0877136 feat(studio): skip our subtitles when the source already has them
Sources such as WIRED interviews ship with captions burned into the picture,
and automatic output stacked a second, often misrecognized, track on top.
Detect burned captions locally from twelve lower-frame samples (bright glyphs
with dark outlines whose shape changes over time, so static logos do not
count). When found, automatic variants keep subtitles off and vertical crop
layouts fall back to the full frame so the original lines are not cut.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 20:44:11 +08:00
周小舟andClaude Opus 5.5 25cb051010 fix(studio): render every automatic variant with bounded CPU
Real-source acceptance showed a 17-minute talk producing 8 variants and a
39-minute talk producing 15, but the per-project cap of three active exports
failed the whole generation on the fourth submit. Remove the cap so the source
alone decides how many outputs exist, and queue all variants on a dedicated
single-worker render executor. ffmpeg decode, filter and encode threads are
capped at a third of the cores and run at low priority so the machine stays
usable.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 20:22:34 +08:00
Kris K 35758311f2 fix: unblock desktop packaging of on-demand Whisper dependencies (#242)
* fix: allow on-demand Whisper numpy in desktop dependency guard

* docs: record installer failure and corrected recovery build
2026-09-30 20:06:35 +08:00
周小舟andClaude Opus 5.5 06c945bb76 feat(publish): route publishing through completed output variants
Upload-Post and Bilibili accept an optional output_variant_id and reuse the
finished immutable MP4 instead of re-exporting. Landscape variants are refused
for vertical-only targets, Bilibili only accepts bilibili variants, and the
result card links each completed variant to the publish page.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 19:55:57 +08:00
Kris K 4addf2a04f fix: recover compatible timelines and report actual failure causes (#240)
* fix: recover compatible timelines and preserve actual failure causes

* fix: preserve failure codes and transcription context in feedback

* test: verify Whisper with the installed portable Windows runtime
2026-09-30 19:47:44 +08:00
周小舟andClaude Opus 5.5 1dc9532788 feat(studio): preview completed output variants
Show completed immutable render jobs directly in the quick-output result cards while keeping queued and failed states actionable.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 19:26:45 +08:00
Kris K 5bae59629a feat: verify 1080p60 exports and installed Windows video pipeline (#239)
* feat: add verified 1080p60 export and installed Windows video acceptance

* fix: support older installed settings and wrap preset labels on narrow screens

* test: launch installed desktop app for Windows video acceptance

* fix: save Windows acceptance report outside installed resources
2026-09-30 19:15:55 +08:00
Kris K 0c84b11b81 fix: recover timeline candidates and scoring, align project cards (#237) 2026-09-30 18:18:52 +08:00
Kris K eaef5b0e86 feat: add 88API sponsor provider and setup guides (#235) 2026-09-30 17:55:06 +08:00
周小舟andClaude Opus 5.5 b213975929 feat(analytics): observe quick output outcomes
Track bounded platform generation outcomes and reuse events without content identifiers, and explain ineligible platform outputs on the results page.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 16:33:50 +08:00
Kris K 48a943574d Fix Whisper recovery, processing settings and bounded video imports (#236)
* fix: recover incomplete Whisper models and show project failure details

* fix: recover broken ASR runtimes and honor pipeline settings

* ci: use job-supported workspace context for recovery tests

* fix: bound video download retries and recover format and subtitle failures

* fix: recover PyAV 19 transcription failures found on Windows

* test: verify clean Windows ASR and existing PyAV 19 recovery

* test: isolate PyAV acceptance dependencies on Windows
2026-09-30 16:15:48 +08:00
周小舟andClaude Opus 5.5 3bcc7365e8 feat(studio): append and retry output variants
Reuse saved automatic drafts to produce additional platform versions without rerunning content analysis, and retry failed output variants independently from completed clips.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 16:08:11 +08:00
周小舟andClaude Opus 5.5 9d53fa60e3 feat(render): append optional AutoClip outro
Finalize automatic platform variants with a one-second Made with AutoClip outro while preserving legacy manual exports. Separate branded output caching and cover video/audio preservation with ffmpeg regressions.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 15:41:09 +08:00
周小舟andClaude Opus 5.5 a77cbdc96d feat(studio): make platform output the default flow
Let users choose destinations at import, start generation immediately, and view automatic output variants without passing through manual plan confirmation. Preserve Studio for deliberate edits.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 14:35:22 +08:00
周小舟andClaude Opus 5.5 6b196f745d feat(studio): auto-generate platform variants
Allow opted-in imports to produce isolated platform output variants and queue existing renders without the confirmation page. Preserve legacy confirmation behavior and aggregate variant terminal states.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 13:50:01 +08:00
周小舟andClaude Opus 5.5 c689954ebe feat(studio): add platform generation contract
Persist platform and branding choices in a versioned workspace contract while preserving the existing confirmation flow. Fix async analysis failures so error state survives exception cleanup.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 13:29:43 +08:00