Skip to content

Commit ac71d5d

Browse files
chore: sync public assets from main@e968d57
1 parent 5bae833 commit ac71d5d

3 files changed

Lines changed: 54 additions & 7 deletions

File tree

Plugin/background.js

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6105,19 +6105,39 @@ async function extractCurrentPageLinkPayload() {
61056105
location.hostname.replace(/^www\./i, ''),
61066106
]);
61076107
const richWechatSnapshot = buildWechatRichHtmlDocument(root);
6108+
const wechatImageEntries = richWechatSnapshot.imageMap.slice(0, 80);
61086109
const localizedWechatImageMap = [];
6109-
if (richWechatSnapshot.imageMap.length > 0) {
6110-
for (const entry of richWechatSnapshot.imageMap.slice(0, 80)) {
6111-
const dataUrl = await fetchBinaryAsDataUrl(entry.url);
6110+
if (wechatImageEntries.length > 0) {
6111+
const maxInlineImages = 12;
6112+
const maxInlineChars = 4 * 1024 * 1024;
6113+
const inlineCandidates = await Promise.all(
6114+
wechatImageEntries.slice(0, maxInlineImages).map(async (entry) => ({
6115+
token: entry.token,
6116+
sourceUrl: entry.url,
6117+
dataUrl: await fetchBinaryAsDataUrl(entry.url),
6118+
}))
6119+
);
6120+
const inlineByToken = new Map();
6121+
let inlineChars = 0;
6122+
for (const candidate of inlineCandidates) {
6123+
const dataUrl = candidate.dataUrl || '';
6124+
if (dataUrl && inlineChars + dataUrl.length <= maxInlineChars) {
6125+
inlineByToken.set(candidate.token, dataUrl);
6126+
inlineChars += dataUrl.length;
6127+
} else {
6128+
inlineByToken.set(candidate.token, candidate.sourceUrl);
6129+
}
6130+
}
6131+
for (const entry of wechatImageEntries) {
61126132
localizedWechatImageMap.push({
61136133
token: entry.token,
6114-
url: dataUrl || entry.url,
6134+
url: inlineByToken.get(entry.token) || entry.url,
61156135
});
61166136
}
61176137
}
61186138

6119-
const images = localizedWechatImageMap.length > 0
6120-
? localizedWechatImageMap.map((item) => item.url).filter(Boolean).slice(0, 8)
6139+
const images = richWechatSnapshot.imageMap.length > 0
6140+
? richWechatSnapshot.imageMap.map((item) => item.url).filter(Boolean).slice(0, 8)
61216141
: collectImageUrls(root);
61226142
const excerpt = metaDescription || content.slice(0, 180);
61236143
const looksLikeArticle = content.length >= 280 || root.matches?.('article, main, [role="main"]');

Plugin/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"manifest_version": 3,
33
"name": "RedBox Capture",
44
"description": "将网页、链接、选中文字、图片、小红书、抖音、Bilibili、快手、TikTok、Reddit、X、Instagram 和 YouTube 内容保存到 RedBox。",
5-
"version": "2.1.0",
5+
"version": "2.2.1",
66
"icons": {
77
"16": "icons/icon16.png",
88
"32": "icons/icon32.png",

README.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,33 @@
143143

144144
## 更新日志
145145

146+
### v2.2.1 (2026-05-30)
147+
148+
RedBox 2.2.1 重点修复浏览器插件文章采集入库,尤其是微信公众号文章。长文、多图公众号文章现在可以更稳定地保存到 app,知识库也能正确按链接文章、公众号文章、知乎回答和知乎文章分类展示。
149+
150+
#### 插件采集与知识库
151+
152+
- 修复微信公众号文章保存链路,避免多图文章因为请求体过大保存失败。
153+
- 公众号文章保留富文本阅读快照,正文图片继续进入知识库素材,方便后续复用。
154+
- 修复链接文章和公众号文章在知识库里的分类映射,保存后可以稳定在对应分类中看到。
155+
- 确认通用网页链接、微信公众号文章、知乎回答、知乎专栏文章都使用 app 端正式 Knowledge API 类型入库。
156+
157+
#### 工作台与稳定性
158+
159+
- 自由创作改为默认工作区视图,进入 app 后更快回到核心创作任务。
160+
- 拆分媒体生成任务队列,减少不同创作入口之间的状态互相影响。
161+
- 强化媒体任务超时处理、团队成员唤醒和官方微信登录 session 同步。
162+
- 补齐 TTS 模型能力识别,减少模型和音色选择不一致导致的失败。
163+
164+
#### 下载
165+
166+
v2.2.1 已发布为正式版,提供 macOS 与 Windows 安装包:
167+
168+
- [查看 v2.2.1 Release](https://github.com/Jamailar/RedBox/releases/tag/v2.2.1)
169+
- macOS:`RedBox_2.2.1_aarch64.dmg``RedBox_2.2.1_x64.dmg`
170+
- Windows:`RedBox_2.2.1_x64-setup.exe`
171+
- 浏览器插件:`RedBox_Browser_Extension_2.2.1.zip`
172+
146173
### v2.2.0 (2026-05-22)
147174

148175
RedBox 2.2.0 重点增强面向东南亚、欧洲和跨境电商平台的多国家、多语言商品详情页创作。现在可以围绕品牌、商品、平台版本和目标语言组织素材,由 AI Agent 生成适合不同市场的详情页图片,并把生成结果继续沉淀到商品素材工作区复用。

0 commit comments

Comments
 (0)