GitHub每日热评|Tibo-Please 源码分析:用 Remotion 制作一段 Codex 风格动画,需要哪些工程化设计?TaoToken 统一 Key 通道配置实录
1. 从 Tibo-Please 源码看 Remotion 动画工程化到底难在哪Tibo-Please 这个仓库最近在 GitHub 上被反复讨论核心看点不是它做了多炫的动画而是它把一段 Codex 风格开场动画拆成了可维护的工程结构。如果你正在用 Remotion 做程序化视频或者团队需要批量渲染统一风格的开场动画这个项目的组织方式值得逐层拆开看。它用 TypeScript React 描述画面用帧驱动动画用 Zod 校验输入参数把字体、时间轴、动画主体分别抽成独立模块——这套思路解决的是「动画能跑」到「动画能批量跑、能回归验证」之间的工程化落差。我先把结论放在前面Remotion 做单条动画不难难的是当你有 20 条不同文案、3 种分辨率、2 套字体、还要保证每次渲染结果一致时代码结构会迅速失控。Tibo-Please 的价值在于它给出了一个「轻量但分层清晰」的参考src/Root.tsx负责注册 Compositionsrc/TiboPlease.tsx负责动画主体和文本时间分配lib/fonts.ts管字体资源lib/remotion-timing.ts管设计帧率与输出帧率的换算。这套分层让动画逻辑、资源加载、时间抽象各归其位。本文面向需要批量渲染 Codex 风格开场动画的前端团队交付三样东西可复制的 Remotion 项目目录结构、Codex 风格时间轴参数与渲染脚本、以及把 API endpoint 统一改到 TaoToken 后的 Key 通道验证动作。适合谁适合已经会 React、想用代码生成视频、但被「字体闪烁」「帧率对不上」「渲染结果不一致」折磨过的开发者。接下来我会按「问题场景 → 前置准备 → 可复制配置 → 验证请求 → 错排查 → 统一通道」的顺序展开每一步都给可跟做的命令和参数。2. TaoToken 统一 Key 通道前置准备与 Remotion 环境搭建在拆动画工程之前先把运行环境和一个容易被忽略的环节说清楚当你的动画项目需要调用模型生成文案、生成配音脚本、或者做批量内容生产时API Key 的管理会变成新的工程负担。Tibo-Please 本身是纯前端渲染项目但真实团队用它做批量开场动画时往往要接一个文本生成环节——这时候把 API endpoint 统一到 TaoToken 就能省掉多套 Key 来回切换的麻烦。TaoToken 是什么它是一个统一的大模型 API 通道你可以用一套 Key 访问多种模型适合需要批量调用、又不想在代码里散落多个厂商 Key 的场景。官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 。注意 API 地址不带 UTM 参数配置时直接用这个基址。环境准备分两步。第一步是 Remotion 项目初始化第二步是 TaoToken Key 的准备。先建项目。Remotion 官方推荐用模板起步但为了对齐 Tibo-Please 的结构我建议手动建目录这样你能清楚每个文件为什么存在mkdir tibo-remotion cd tibo-remotion npm init -y npm install remotion remotion/cli remotion/fonts react react-dom zod typescript types/react types/react-dom装完后确认版本Remotion 4.x 和 3.x 的 API 有差异本文按 4.x 写npx remotion versions你应该看到类似remotion: 4.x.x、remotion/cli: 4.x.x的输出。如果版本低于 4建议升级因为remotion/fonts的loadFont在 4.x 才稳定。第二步准备 TaoToken Key。登录后进入控制台在 API Keys 页面创建一个新 Key。创建时建议按用途命名比如remotion-batch-text这样后面排查哪个项目在用哪个 Key 会清楚很多。Key 创建后只显示一次复制到本地.env文件# .env TAOTOKEN_API_KEYsk-你的实际key TAOTOKEN_BASE_URLhttps://taotoken.net/api这里有个坑要提前说不要把.env提交到 Git。在.gitignore里加上.env和.env.local。我见过团队因为把 Key 写进remotion.config.ts然后推到公开仓库导致 Key 泄露被迫轮换。第三步确认 Node 版本。Remotion 渲染依赖 ChromiumNode 版本太低会导致无头浏览器启动失败。建议 Node 18 LTS 或 20 LTSnode -v # 期望输出 v18.x 或 v20.x如果你的项目要跨环境渲染本地预览 服务器无头渲染把 Node 版本写进.nvmrc或package.json的engines字段避免「本地能渲染、服务器报错」这类问题。这一步看起来琐碎但它是后面所有验证动作的基础。3. 可复制配置Remotion 目录结构、时间轴参数与 TaoToken 接入片段这一节是全文最核心的部分直接给可复制的配置。先看目录结构这是对齐 Tibo-Please 分层思路的最小版本tibo-remotion/ ├── src/ │ ├── Root.tsx # 注册 Composition │ ├── TiboPlease.tsx # 动画主体组件 │ └── compositions/ │ └── CodexIntro.tsx # Codex 风格开场动画 ├── lib/ │ ├── fonts.ts # 字体资源统一管理 │ ├── remotion-timing.ts # 设计帧率/输出帧率换算 │ └── schema.ts # Zod 输入校验 ├── scripts/ │ └── render-batch.ts # 批量渲染脚本 ├── remotion.config.ts # Remotion 全局配置 ├── package.json └── tsconfig.json这个结构的关键在于lib/目录。Tibo-Please 把字体和时间工具抽出来不是为了让文件变多而是为了让动画组件只关心「画什么」不关心「字体从哪加载」「帧率怎么换算」。先写lib/remotion-timing.ts这是时间抽象的核心// lib/remotion-timing.ts export const DESIGN_FPS 30; export const OUTPUT_FPS 60; export function toOutputFrames(designFrames: number): number { return Math.round((designFrames / DESIGN_FPS) * OUTPUT_FPS); } export function toDesignDuration(seconds: number): number { return Math.round(seconds * DESIGN_FPS); } export function useDesignFrame(currentFrame: number): number { return Math.round((currentFrame / OUTPUT_FPS) * DESIGN_FPS); }为什么要区分DESIGN_FPS和OUTPUT_FPS因为设计阶段用 30fps 算时间更直观输出用 60fps 更流畅。如果直接混用改输出帧率时全项目都要手动调帧数。有了这层换算动画组件里只写「延迟 0.5 秒、持续 1.2 秒」具体帧数交给工具函数。接着写lib/fonts.ts字体独立管理// lib/fonts.ts import { loadFont } from remotion/fonts; import { staticFile } from remotion; export const ONDA_DISPLAY_FONT OndaDisplay; export const ONDA_BODY_FONT OndaBody; export const ondaFontsReady Promise.all([ loadFont({ family: ONDA_DISPLAY_FONT, url: staticFile(fonts/OndaDisplay.woff2), weight: 700, }), loadFont({ family: ONDA_BODY_FONT, url: staticFile(fonts/OndaBody.woff2), weight: 400, }), ]);字体文件放在public/fonts/下staticFile会自动解析路径。ondaFontsReady这个 Promise 的作用是在渲染前await它确保字体加载完成再开始计算文本布局避免首帧字体闪烁。然后是 Codex 风格的时间轴参数。Codex 风格的特点是简洁、克制、文字逐词出现、颜色过渡平滑。在src/compositions/CodexIntro.tsx里定义时间轴// src/compositions/CodexIntro.tsx import { useCurrentFrame, useVideoConfig, interpolate, Easing, AbsoluteFill } from remotion; import { toDesignDuration, useDesignFrame } from ../../lib/remotion-timing; export type WordTiming { word: string; startFrame: number; endFrame: number; }; export function buildWordTimings( text: string, startFrame: number, perWordFrames: number ): WordTiming[] { const words text.split(/\s/).filter(Boolean); return words.map((word, i) ({ word, startFrame: startFrame i * perWordFrames, endFrame: startFrame i * perWordFrames perWordFrames, })); }buildWordTimings是 Tibo-Please 里最值得借鉴的函数。它把文本内容转成结构化时间数据渲染组件只根据当前帧判断每个词的状态当前帧小于startFrame就不显示落在区间内就按插值算透明度超过endFrame就保持完成态。这比在 JSX 里堆固定数字好维护得多。Codex 风格的时间轴参数建议这样设每个词间隔 6 设计帧约 0.2 秒单词淡入持续 8 设计帧整段文字结束后停留 30 设计帧再进入下一场景。这些参数写进remotion.config.ts或单独的常量文件// lib/timeline-params.ts export const CODEX_TIMELINE { wordIntervalFrames: 6, wordFadeInFrames: 8, holdAfterTextFrames: 30, colorTransitionFrames: 12, };现在接入 TaoToken。如果你的动画项目需要调用模型生成文案在scripts/render-batch.ts里这样配置// scripts/render-batch.ts const TAOTOKEN_BASE_URL process.env.TAOTOKEN_BASE_URL ?? https://taotoken.net/api; const TAOTOKEN_API_KEY process.env.TAOTOKEN_API_KEY; async function generateIntroText(prompt: string): Promisestring { const res await fetch(${TAOTOKEN_BASE_URL}/v1/chat/completions, { method: POST, headers: { Content-Type: application/json, Authorization: Bearer ${TAOTOKEN_API_KEY}, }, body: JSON.stringify({ model: claude-sonnet-4-20250514, messages: [{ role: user, content: prompt }], max_tokens: 200, }), }); if (!res.ok) { throw new Error(TaoToken request failed: ${res.status} ${await res.text()}); } const data await res.json(); return data.choices[0].message.content; }注意这里的三件套Base URL 是https://taotoken.net/apiKey 从环境变量读Model ID 用claude-sonnet-4-20250514。这三个值必须同时正确缺一个就会报错。如果你用 Claude Code 做代码润色配置方式类似在 settings 里指定 Base URL 和 Key 即可。4. 验证请求渲染脚本执行与 TaoToken 通道连通性测试配置写完必须验证两件事Remotion 能不能渲染出视频TaoToken 通道能不能通。先验证 TaoToken因为如果 Key 配错后面批量生成文案会全部失败。写一个最小验证脚本scripts/verify-taotoken.ts// scripts/verify-taotoken.ts import dotenv/config; async function main() { const baseUrl process.env.TAOTOKEN_BASE_URL ?? https://taotoken.net/api; const apiKey process.env.TAOTOKEN_API_KEY; if (!apiKey) throw new Error(TAOTOKEN_API_KEY 未设置); const res await fetch(${baseUrl}/v1/chat/completions, { method: POST, headers: { Content-Type: application/json, Authorization: Bearer ${apiKey}, }, body: JSON.stringify({ model: claude-sonnet-4-20250514, messages: [{ role: user, content: 只回复两个字连通 }], max_tokens: 20, }), }); console.log(status:, res.status); const data await res.json(); console.log(reply:, data.choices?.[0]?.message?.content); } main().catch((e) { console.error(验证失败:, e.message); process.exit(1); });运行npx tsx scripts/verify-taotoken.ts期望输出status: 200 reply: 连通如果看到status: 200和模型回复说明 Base URL、Key、Model ID 三件套都正确。这一步通过后再验证 Remotion 渲染。Remotion 渲染分两步先预览再导出。预览用npx remotion studio浏览器打开http://localhost:3000你应该能看到 Composition 列表。点进CodexIntro拖动时间轴检查文字是否逐词出现、字体是否正确、颜色过渡是否平滑。重点看第 0 帧有没有字体闪烁——如果首帧文字用了默认字体然后突然切换说明ondaFontsReady没有被正确 await。导出视频用npx remotion render CodexIntro out/codex-intro.mp4 --fps60--fps60对应OUTPUT_FPS。渲染完成后检查out/codex-intro.mp4的时长和帧率npx remotion ffprobe out/codex-intro.mp4期望看到60 fps和正确的时长。如果时长不对回去检查durationInFrames和toOutputFrames的换算。批量渲染时把文案生成和渲染串起来// scripts/render-batch.ts 补充部分 import { execSync } from child_process; async function renderOne(text: string, index: number) { const props JSON.stringify({ text }); execSync( npx remotion render CodexIntro out/intro-${index}.mp4 --props${props} --fps60, { stdio: inherit } ); }--props把文案传进 Composition配合 Zod 校验字段缺失会直接报错而不是渲染出空白视频。实测下来这套流程跑通后批量渲染 20 条开场动画只需要改文案数组不用动动画代码。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth这一节对照真实报错给排查路径。这些错误我在接入过程中都遇到过按出现频率排序。401 Unauthorized。最常见原因是 Key 没读到或格式不对。先确认.env被加载node -e require(dotenv).config(); console.log(process.env.TAOTOKEN_API_KEY?.slice(0,8))如果输出undefined说明dotenv没装或没在脚本顶部 import。如果输出前 8 位但请求仍 401检查 Key 是否有多余空格或者是否用了已删除的 Key。注意Authorization头必须是Bearer sk-xxx格式少Bearer前缀也会 401。local proxy failed。这个报错通常出现在无头渲染环境原因是 Chromium 启动时网络配置有问题。Remotion 渲染本身不需要外网但如果你的动画组件在渲染时调用了外部 API比如在组件里 fetch 文案无头环境可能因为网络策略失败。解决办法是把 API 调用移到渲染前的脚本里渲染时只传静态 props。这样渲染过程完全离线不受网络影响。reading choices。报错形如Cannot read properties of undefined (reading choices)说明响应体结构和你预期的不一样。可能原因请求返回了错误对象而不是正常响应或者你访问的路径不对。加一层防御const data await res.json(); if (!data.choices || !data.choices[0]) { console.error(响应结构异常:, JSON.stringify(data).slice(0, 300)); throw new Error(choices 字段缺失); }打印完整响应体通常能看到error字段说明具体原因比如模型名写错、额度不足。OAuth 相关报错。如果你用 Claude Code 或类似工具接入可能遇到 OAuth token 过期。这类工具通常有自己的认证流程和 API Key 是两套机制。排查时先确认你用的是 API Key 模式还是 OAuth 模式两者不能混用。如果用 API Key在配置里明确指定apiKey字段不要留 OAuth 的配置项。字体加载失败。报错形如Failed to load font检查public/fonts/下文件是否存在staticFile路径是否和实际文件名一致。注意staticFile的路径是相对于public/的不要写成public/fonts/xxx.woff2。帧率对不上。渲染出的视频时长和预期不符检查DESIGN_FPS和OUTPUT_FPS是否和--fps参数一致。如果remotion.config.ts里设了OUTPUT_FPS 60但渲染命令写--fps30结果会差一倍。CC Switch / Cline MCP / Codex auth.json 场景。如果你用这些工具做代码辅助配置时同样要写全三件套Base URL 填https://taotoken.net/apiKey 填你的 TaoToken KeyModel ID 填具体模型名。以 Codex 的auth.json为例确保字段名和工具要求一致不要自己造字段名。Cline 的 MCP 配置里如果涉及 API 调用同样指定 Base URL 和 Key不要留空。6. 语义一致 CTA把统一 Key 通道接进你的动画工程回到 Tibo-Please 的工程化思路它把字体、时间、动画主体分层本质是让每个模块只做一件事。TaoToken 统一 Key 通道解决的是同一类问题——当你的动画项目需要调用模型生成文案、配音脚本、多语言版本时不用为每个厂商维护一套 Key 和 endpoint一套 Key 走通所有调用。具体怎么接三个入口按场景选如果你在排查接入问题、需要看完整的 API 配置和错误码说明去 API Keys 页面创建和管理 Key配合接入文档对照字段API Keys 入口是 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_campaignrewrite 文档入口是 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_campaignrewrite 。这两个页面能解决 401、字段缺失、模型名写错这类问题。如果你想先验证模型输出质量再决定用哪个模型做文案生成用模型对话页面直接试https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_campaignrewrite 。输入你的 prompt对比不同模型的输出风格选定后再写进render-batch.ts。如果你的团队要长期做批量动画生产、需要 Agent 辅助编码和内容生成用 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_campaignrewrite 。它适合把模型调用纳入日常开发流程配合 Remotion 的批量渲染脚本形成「生成文案 → 校验参数 → 渲染视频」的流水线。最后给一个实用技巧把 TaoToken 的 Base URL 和 Key 写进项目的.env.example但值留空让团队成员自己填。这样既统一了配置格式又不会泄露 Key。配合 Zod 校验在脚本启动时检查环境变量是否存在缺失就报明确错误而不是等到请求发出才 401。这套组合下来你的 Remotion 动画工程就从「能跑一条」变成「能稳定批量跑」这才是 Tibo-Please 源码分析真正值得带走的东西。

相关新闻

ESP-Mosaico深度解析:ESP32-S3与FPGA异构计算平台实战指南

ESP-Mosaico深度解析:ESP32-S3与FPGA异构计算平台实战指南

提到 ESP32,玩嵌入式的朋友基本都不陌生;但说到 ESP-Mosaico,很多人还处于“听过名字、没搞清楚它到底能干嘛”的状态。这是乐鑫在异构计算方向上放出的一个平台:把一颗 ESP32-S3 MCU 和一颗 Gowin 的 FPGA 封装在同一个方案里&am…

2026/10/9 2:00:20 阅读更多 →
ponytail技能插件实战:安装配置与典型任务全记录

ponytail技能插件实战:安装配置与典型任务全记录

“ponytail skill”“ponytail 插件”“插件 ponytail 如何使用”……这几个词最近在我几个技术群里被转了好几轮。最开始看到“ponytail”这个命名,说实话我没太当回事,还以为是哪个发型教程的标签。直到一位朋友发来一张截图,说他的终端里红…

2026/10/9 2:00:20 阅读更多 →
让AI直接读取功耗数据:MCP协议实现边缘侧实时传感接入

让AI直接读取功耗数据:MCP协议实现边缘侧实时传感接入

1. 项目概述:为什么需要让 AI “自己看” 功耗计?“让 AI 自己看功耗计:给 IoT Power 写一个 MCP 服务端”——这个标题乍看像一句技术玩笑,实则直击当前边缘智能落地中最常被忽视的“感知鸿沟”。我做 IoT 系统集成和边缘 AI 部署…

2026/10/9 2:00:20 阅读更多 →

最新新闻

SSR 前端项目 Docker 本地部署实战:从 Dockerfile 到 compose 编排

SSR 前端项目 Docker 本地部署实战:从 Dockerfile 到 compose 编排

如果你写过或者接手过 SSR 前端项目,大概都有过这种经历:本地npm run dev跑得飞起,可真要让项目在另一台电脑上跑起来,或者部署到服务器上验证,就开始连环翻车——Node 版本不对、系统库缺失、环境变量没配、数据库连不…

2026/10/9 6:05:01 阅读更多 →
波士顿房价预测实战:正规方程原理、矩阵推导与代码实现

波士顿房价预测实战:正规方程原理、矩阵推导与代码实现

波士顿房价预测这个项目,入门机器学习的朋友基本都绕不过去。而我更想说的是,越是那种“代码实现看起来只有几行”的项目,越值得把原理抠明白。拿正规方程(Normal Equation)来解线性回归,很多时候代码就是矩…

2026/10/9 6:05:01 阅读更多 →
微服务分布式事务与幂等设计:从原理到Seata实战

微服务分布式事务与幂等设计:从原理到Seata实战

半夜两点被电话叫起来,运营语气很急:商品A的库存变成负数了。打开数据库一看,下单记录两条——用户点了一次下单按钮,前端超时后自动重试了一次,网关层的重试机制又补了一刀,三笔请求最终都执行了库存扣减&…

2026/10/9 6:05:01 阅读更多 →
MySQL Host not allowed连接错误的原理与全场景排查指南

MySQL Host not allowed连接错误的原理与全场景排查指南

1. 问题本质与真实场景还原:这不是连接失败,而是权限拦截的明确信号“Host xxx.xx.xx-xx.xx.com is not allowed to connect to this MySQL server”——这行报错在某高校数据库运维组、某SaaS公司后端团队、某外包项目交付现场,几乎每周都会…

2026/10/9 6:05:01 阅读更多 →
AI论文写作全流程工具链:从选题到答辩的效率革命

AI论文写作全流程工具链:从选题到答辩的效率革命

从选题卡壳到终稿交上,我带着两届本科生的论文打磨经验,把AI工具按“全链路”重新趟了一遍。这篇不讲虚的,直接告诉你:哪个环节用哪款工具、怎么提问才能拿到能用的话、哪些坑踩了会出事。不管你是刚开题还是deadline逼近&#xf…

2026/10/9 6:05:01 阅读更多 →
AI系统扩容避坑指南:横向扩容还是纵向扩容?从原理到决策框架

AI系统扩容避坑指南:横向扩容还是纵向扩容?从原理到决策框架

1. 扩容决策的起点:两个方向,两种代价先聊一个我经常被问的问题:AI系统跑不动了——推理延迟飙升、训练任务排队、GPU显存告急——到底该加机器还是换大机器?这个问题听起来简单,但每次认真回答完,对方都会…

2026/10/9 6:04:00 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 13:34:55 阅读更多 →