Skip to content

v0.10.0「挑得准一点」/ "Pick better"

Choose a tag to compare

@github-actions github-actions released this 05 Aug 07:19
· 52 commits to main since this release

v0.10.0「挑得准一点」/ "Pick better"

这版不加新按钮,只做一件事:让 AI 挑出来的片段更像人挑的。三个改动都来自「现在效果很差」的实际反馈。

✂️ 多片段拼接:相隔十几分钟的两处,终于能摆在一起

真正的爆款切片经常不是一段连续录像。最典型的「前后打脸」——主播开场说「这个价格绝对不会再降」,十几分钟后真降了——必须把两处摆在一起才成立,而此前 HotClip 的数据模型只有一个连续区间,表达不了这种片段;硬用一个大区间去框,中间十几分钟无关内容会被全剪进去、时长超标后整条候选被丢掉,挑出来的爆点等于白挑。

  • 候选可以由 2~3 段不连续的源片拼成,成片时长按各段之和算(跨度不算数)
  • 拼接复用既有的跳剪机器:段间空隙当成强制剪除区间,于是字幕、双语译文、EDL、封面选帧、出片质检全部自动对齐,没有第二套时间轴
  • 审阅台专门为拼接片改了:波形轨换成段清单(每段时码 + 原文 + 单独试听),中间标出「跳过了多少秒」,点播放会按成片顺序自动跳段——发之前你能先确认「拼起来还是不是原话的意思」
  • 复评环节对拼接片用更严的标准:文本里出现「……」就重点查有没有靠跳过中间内容制造出原本不存在的矛盾
  • 顺带:剪映 7.8 的 AI 切片也只做连续区间,拼接是自动化工具的共同空白

📺 直播品类判据:照平台真实分区重排

上一版的品类列表是拍脑袋列的。这版拉了 B站直播官方分区接口(11 个一级分区实拉)、对了抖音与斗鱼的公开分区,按真实分类重排——补上此前整块缺失的品类:

虚拟主播 / VTuber(人脸表情信号在这类完全无效,脸是模型)、电台 / 纯语音(根本没有画面)、萌宠(主角不会说话)、美食 / 吃播赛事解说运动 / 健身手工 / 绘画颜值 / 交友连麦一起看 / 电子榨菜 / 自习室

其中「一起看」类单独写了硬约束:屏幕上放的是别人的版权,绝对不能把影视画面本身切成片,只能取主播自己的反应;自习室类正确答案通常是「一条都不给」。这不是选得好不好的问题,是会被判搬运下架。

旧的品类设置会自动迁移,本机偏好不会失效。

🎯 信号驱动候选:跳舞、萌宠、户外终于能出片

原来的链路是「AI 引用原话 → 反查时间轴」。这对带货、讲课成立,但跳舞直播的文字稿是空的、萌宠的主角不会说话、户外收音差且峰值时刻常常只有两个字——引不出原话,就一条候选都出不来,判据写得再好也救不回来。

新增一条并行通道:把七路视听信号(响度 / 镜头切换 / 视觉模型 / 人脸表情 / 语气 / 笑声掌声 / 弹幕)按品类权重融合成时间轴热度曲线,直接从曲线上取窗口。时间由信号给定,AI 只负责挑哪几个值得发、起什么标题,完全不需要引用原话。

  • 两套权重是相反的:画面类(舞见/萌宠/美食/手工)以画面与弹幕为主,反应类(游戏/户外/VTuber/电台/赛事)以语气爆发与弹幕为主
  • 单路信号覆盖超过一半就按覆盖率打折——全程都亮的信号没有区分度,不打折会把曲线压平、峰值退化成随机
  • 三个触发条件任一成立即启用:品类本身靠反应/画面、说话占比低于 35%(素材自己说明了文字稿没内容,兜住没枚举到的品类)、或文本通道产出太少
  • 信号候选不送文本复评——复评的四个维度全按「读文本」打分,拿去评一段跳舞必然全判死刑,那正是这条通道要救的品类

😄 笑声不再当成爆点本身

笑话的结构是「铺垫 → 包袱 → 笑声」,笑声是滞后结果,引爆它的那句在笑声之前;而且只回溯到包袱还不够,梗离开铺垫不成立。现在笑声/掌声信号被明确写成「锚点」而不是「区间」:往前找到那句包袱、连同铺垫一起选,笑声只留一点点做收尾,绝不只切观众在笑的那几秒(那里根本没人说话)。

🔌 其他

  • 语气与笑声掌声两路新证据(复用已装的语音模型,不下载任何新模型,没装就静默跳过)
  • 自动运镜:固定机位的竖屏成片叠一层缓慢推拉,幅度克制不裁构图
  • 剪重录:口播说错重来的废稿自动删掉,只留最后一遍;只认紧挨着的重复,隔得远的话术循环不动
  • 录播姬 / blrec Webhook:除了盯文件夹,现在也能直接接录播软件的回调,录完即切;默认只绑 127.0.0.1、可设 token、路径白名单之外一律拒绝
  • LLM 多供应商预设:DeepSeek 官方(deepseek-v4-flash)、阿里云百炼、智谱 GLM、月之暗面 Kimi、硅基流动、OpenRouter、OpenAI,base_url 全部对着各家官方文档核过
  • 模型清单一键拉取:模型 id 会随厂商换代失效(deepseek-chat 已于 2026-07-24 下线),与其猜一个名字,不如直接问端点要真实清单

⬆️ 升级方式

Releases 下载新安装包覆盖安装即可。已下载的模型、词表、偏好原位保留,不会重新下载任何东西。


This release adds no new buttons. It does one thing: make the AI's picks look more like a human's. All three changes came from "the results are bad right now" feedback.

✂️ Multi-part stitching: two moments ten minutes apart, finally side by side

A genuinely viral clip is often not one continuous take. The classic "caught contradicting himself" — the host says "this price will never drop", then drops it fifteen minutes later — only works when both moments sit side by side, and HotClip's data model previously had a single continuous range and simply could not express it. Framing it as one big range cut everything in between into the clip, blew past the length limit, and the candidate was dropped entirely — the hook was found and then thrown away.

  • A candidate can be stitched from 2–3 non-contiguous source parts; duration is the sum of the parts, not the span
  • Stitching reuses the existing jump-cut machinery: inter-part gaps become forced-cut spans, so captions, bilingual subtitles, EDL, cover selection and output QA all align automatically — there is no second timeline
  • The review pane was reworked for stitched clips: the waveform track becomes a part list (timecode + transcript + play each part), the skipped duration is labelled between parts, and playback auto-jumps in output order — so you can confirm the stitched meaning is still what was actually said before publishing
  • Stage-2 review holds stitched clips to a stricter bar: a "……" in the text triggers a check for contradictions manufactured by skipping what sat in between
  • For context: CapCut's AI clipping also only does continuous ranges — stitching is a common blind spot in automated tools

📺 Stream-genre criteria, rebuilt against real platform taxonomies

The previous genre list was made up. This release pulled Bilibili Live's official category API (all 11 top-level areas), cross-checked Douyin's and Douyu's public categories, and rebuilt against them — adding categories that were missing entirely:

VTuber (facial-emotion signals are meaningless here — the face is a rigged model), radio / audio-only (there is no picture at all), pets (the subject cannot talk), food / mukbang, esports commentary, sports / fitness, crafts / drawing, just-chatting / social, and co-watching / study-with-me.

Co-watching carries an explicit hard constraint: the content on screen is someone else's copyright — never clip the film or show itself, only the host's own reaction. For study-with-me, the correct answer is usually to return nothing. That is not a quality question; it is a takedown question.

Existing genre settings migrate automatically.

🎯 Signal-driven candidates: dance, pets and outdoor streams finally produce clips

The original pipeline was "the AI quotes a line → reverse-match it onto the timeline". That works for live selling and lectures, but a dance stream's transcript is empty, a pet stream's subject cannot talk, and outdoor audio is poor with peak moments often reduced to two words — with nothing to quote, not a single candidate came out, no matter how good the criteria were.

A parallel path now fuses seven audio-visual signals (loudness / scene cuts / vision model / facial emotion / vocal tone / laughter & applause / live chat) into a timeline heat curve, weighted by genre, and takes windows straight off the curve. Timing comes from the signals; the AI only picks which ones are worth posting and titles them — it never needs to quote anything.

  • The two weight sets are inverted: visual genres lean on picture and chat; reaction genres lean on vocal bursts and chat
  • Any single signal covering more than half the timeline is discounted by its coverage — a signal that is always on has no discriminative power, and without the discount the curve flattens and peaks degrade to noise
  • Triggers on any of: a reaction/visual genre, speech ratio below 35% (the footage itself says the transcript is empty — this catches genres nobody enumerated), or too few candidates from the text path
  • Signal candidates skip the text-based review — its four dimensions all score by reading text, and running it on a dance clip would reject everything, which is precisely the category this path exists to serve

😄 Laughter is no longer treated as the highlight

A joke is setup → punchline → laughter. Laughter lags; the line that triggered it lands before it, and walking back only to the punchline is not enough because the joke does not stand without its setup. Laughter/applause is now written into the prompt as an anchor, not a region: walk back to the punchline, include its setup, keep only a beat of laughter as the tail — never clip just the laughing seconds, where nobody is speaking.

🔌 Also in this release

  • Vocal-tone and laughter/applause as two new evidence paths (reuses the already-installed speech model; downloads nothing new, silently skipped if absent)
  • Auto-zoom: a restrained slow push/pull over vertical output so locked-off camera footage stops feeling static
  • Retake cutting: botched takes redone on the spot are removed, keeping only the last pass; only adjacent repeats count, so distant script loops are left alone
  • BililiveRecorder / blrec webhooks: besides watching a folder, HotClip can now take the recorder's callback directly and clip as soon as recording ends; binds 127.0.0.1 by default, supports a token, and rejects anything outside the path allowlist
  • Multi-provider LLM presets: DeepSeek (deepseek-v4-flash), Alibaba Model Studio, Zhipu GLM, Moonshot Kimi, SiliconFlow, OpenRouter, OpenAI — every base_url checked against the vendor's own docs
  • One-click model-list fetch: model ids rot as vendors ship new generations (deepseek-chat was retired on 2026-07-24) — rather than guessing a name, ask the endpoint for the real list

⬆️ Upgrading

Download the new installer from Releases and install over the top. Downloaded models, glossaries and preferences stay where they are — nothing is re-downloaded.