AFSIM 2.9源码实战:从编译到插件扩展的多域仿真框架
简介AFSIM 2.9 是一款面向海陆空天及网络空间战场仿真的仿真引擎源码包适用于军事训练、作战推演、武器效能评估与电子战模拟等专业场景适合仿真开发人员、作战研究人员及军事院校师生深入研读。源码包共约2000个文件以848个hpp头文件与801个cpp实现文件为主辅以md说明、txt文档、Python与Shell脚本等覆盖显示叠加、战术界面、脚本语言上下文、地理形状文件等核心模块压缩包约439.9MB。已有2212人学习下载。该源码提供完整的仿真框架与模块化定制能力支持多系统互操作可帮助使用者理清仿真引擎内部机制并结合地形、气候及传感器数据扩展武器系统与战场环境模型为军事仿真课题研究与工程实践提供扎实基础。1. 仿真引擎 AFSIM 2.9 源码它不是三维渲染器而是想定驱动的多域仿真框架很多人看到“仿真引擎”四个字下意识会往三维可视化、游戏引擎那个方向想拿到仿真引擎 AFSIM 2.9 源码之后才意识到渲染只是它最不重要的那一层。这个源码包真正值钱的地方在于“想定驱动的仿真框架”你用一个文本文件描述平台位置、运动规律、传感器行为和通信逻辑仿真内核负责推进时间、触发事件、记录数据最后交给你的是结构化输出。对于要做多域体系仿真、传感器模型验证、指挥控制算法验证的开发者来说它比从零写一套仿真调度省太多事。下面我会按照“拆源码结构、本地编译、跑通最小想定、排查问题、扩展插件”这条路径把 2.9 源码的实际用法讲透。2. 拿到源码先拆骨架核心模块、文档树和三个必须认识的目录拿到 2.9 源码包之后我建议先别急着敲 cmake 命令而是花二十分钟把目录结构读一遍。这个动作看着慢实际上能帮你避开后面绝大多数编译和运行问题。源码包通常会把对外接口、内部实现、示例想定和构建脚本分开摆放搞清楚每一层在哪儿后续就算遇到报错也能快速判断问题出在框架还是你自己的配置上。2.1 include 比 src 更早读头文件暴露了引擎的边界AFSIM 这类 C 框架的源码一般分成 include 和 src 两个大区include 里放的是对外可见的头文件src 里放具体实现。先读 include 的原因很简单头文件是引擎对外承诺的接口边界能直接告诉你这个版本支持什么、扩展点在哪儿而 src 里的大量实现细节反而会把你淹没。拿到源码后我一般会先做三个快速动作# 1. 看顶层目录结构确认构建脚本、文档、示例的位置 ls -la # 2. 看 include 和 src 是否分离模块大概怎么分 find . -maxdepth 2 -type d | sort | head -40 # 3. 在头文件里搜核心概念看接口暴露在什么地方 grep -rl class.*Simulation include | head -20第一条命令帮你确认包里有没有 README、CMakeLists.txt、doc、examples 这些关键条目。第二条命令看目录层级大致分清哪些是核心库、哪些是可视化工具、哪些是示例数据。第三条命令最有用它让你知道“仿真”“平台”“输出”这些核心概念的头文件分别在哪里。你后续如果想改行为优先看这些头文件的注释而不是一头扎进 src 的实现代码。我见过不少开发者拿到源码直接打开 src 下面最大的那个 cpp 文件读了两小时也没搞清体系。原因就是 src 里的类通常依赖几十个头文件你没有一个入口概念。反过来先扫 include你能在半小时内拼出这个引擎的模块边界哪一层管实体管理哪一层管时间推进哪一层管数据输出哪一层是可视化客户端清清楚楚。2.2 目录里哪些模块能关掉从编译选项反推架构看构建脚本是理解架构的第二条捷径。2.9 源码的构建脚本里通常有一批以 AFSIM 开头的编译开关每一个开关对应一个独立模块。你不需要一个个看实现只看这些开关的默认值就能明白哪些模块是核心必选哪些是可选增强。我整理了一个常见的开关方向表具体开关名以你手上包内 CMakeLists.txt 为准但思路是一致的开关控制方向控制内容关闭后的影响核心库构建仿真内核、想定解析器、数据输出模块整个框架不可用不建议关闭可视化客户端SimDeck 图形界面相关的构建关闭后无法看三维场景命令仿真不受影响文档构建本地文档和示例说明的生成关闭后省编译时间新手不建议示例构建自带示例想定和演示场景关闭后少了参考新手不建议这个表格其实是在告诉你分层架构仿真内核、可视化、文档、示例彼此独立内核不依赖图形界面。这点对你日后的构建策略很关键——如果你的目标只是跑批量仿真、验证模型逻辑完全可以把可视化关掉只编内核和命令行工具。这样依赖少、编译快、部署也轻。从源码组织的反推你能得到一个重要结论这个引擎的“仿真能力”和“看的能力”是解耦的。很多人被“引擎”两个字带偏觉得必须要有图形界面才叫仿真实际上数据链路才是核心。编译时先把不需要的模块切掉是最高效的用法。2.3 先跑自带的 examples把“源码”和“能跑”串起来源码包里的 examples 目录是你和这个引擎之间的桥梁。不要上来就写自己的想定文件先找到自带的示例用编译好的程序跑一遍确认整条链路是通的再去改你的业务逻辑。常见的做法是在构建目录里找到 sim 这个命令行工具然后挑一个名字里带 tutorial 或 demo 的想定文件运行# 假设你已经完成构建且构建产物在 build/bin 下 ./bin/sim examples/tutorial/xxx.af运行成功之后日志里会出现想定解析、实体创建、仿真推进这些关键信息。这一步的目的不是看效果而是确认两件事一是编译产物本身没问题二是你对“想定文件如何被驱动”有了直观认知。如果连官方示例都跑不通问题大概率出在编译环节或依赖缺失这时候不要急着写自己的场景回头检查构建配置更实际。3. 在本地把 2.9 源码编出来CMake 依赖、Release 构建和两种启动方式编译这一步是劝退很多人的地方。AFSIM 2.9 源码的编译难度不在于代码本身而在于依赖环境。好在这个引擎的设计允许你按需裁剪先关闭不需要的模块把核心跑通再决定要不要把可视化编进来。我建议的编译顺序是从最小依赖开始确认命令行工具能跑再逐步打开其他模块。3.1 最小依赖清单没有可视化库也能编出 sim如果你只需要命令行仿真和离线数据那么依赖其实很少一个支持 C11 的编译器、CMake、以及标准 C 开发库就够了。可视化模块SimDeck才会引入 X11、OpenGL、图像解码这类依赖。在 Debian 系的发行版上常用的准备命令是这样的# 基础编译工具和 CMake sudo apt update sudo apt install build-essential cmake # 如果你想连可视化一起编译需要下面这些开发库 sudo apt install libx11-dev libgl1-mesa-dev libtiff-dev libjpeg-dev我的建议是先把可视化相关的库装齐这样一次配置可以覆盖两种构建。如果你确定不需要图形界面可以只装第一组。要注意的是不要跳过 build-essential因为源码里有些组件对编译器版本有隐性的要求用太老的 GCC 会在编译中段报出奇怪的模板错误。3.2 标准 CMake 构建流程从 configure 到 make installAFSIM 这类多模块项目我一般会建一个独立的构建目录而不是在源码根目录直接跑 cmake。这样源码目录保持干净后续切换 Release 和 Debug 构建也更方便。# 进入源码根目录后 mkdir -p build/release cd build/release # configure 阶段指定构建类型为 Release cmake ../../ -DCMAKE_BUILD_TYPERelease # 编译阶段并行编译加快速度 make -j$(nproc)这里有几个参数要说明。CMAKE_BUILD_TYPE 建议直接设为 Release因为仿真计算往往是长时程、高循环的Debug 版性能会差好几倍等你后续跑复杂想定会非常痛苦。-j$(nproc)是让 make 用满所有 CPU 核心如果机器内存不大可以改成-j4防止编译中被杀掉。configure 阶段如果报“找不到某个库”优先看是不是没装开发包而不是编译器问题。make 阶段的报错如果集中在 X11、OpenGL 相关文件说明你没有关闭可视化模块或者依赖头文件缺失。3.3 编译完成后检查哪些产物bin、lib、doc 各看什么编译成功不等于万事大吉你要检查产物是否完整。构建完之后我一般会看几个关键路径# 看构建产物目录 ls bin/ # 看命令行仿真工具版本 ./bin/sim --version # 看核心库产物 ls lib/bin 目录里通常会有 sim 和 simdeck 两类工具sim 是命令行仿真运行器simdeck 是可视化客户端。lib 下面放的是核心库和插件库后续你自己写的扩展插件也会以动态库形式出现在这里。如果 sim 能正常打印版本号说明核心链路已经通了。此时不要急着开 simdeck你先用 sim 跑一批离线想定把仿真逻辑验证扎实再碰图形界面。图形界面只是辅助工具它不会让你的模型变得更正确。4. 跑通第一个想定从空白 .af 到能在 sim 里看到平台运动AFSIM 的想定文件通常以 .af 结尾本质是文本格式的仿真描述。第一次写想定我建议用最朴素的结构一个 simulation 块控制时间和输出一个 platform 块描述一个运动实体。不要一开始就堆传感器、通信、复杂行为先把“时间推进 实体运动 数据落盘”这条主线打通。4.1 最小想定的三段结构simulation、platform、output下面这个是我常用的最小想定骨架。字段名在不同小版本里可能有细节差异你对照包内 tutorials 里的写法调整即可结构是通用的// 最小想定一个平台 有限仿真时间 文件输出 simulation { start_time 0 stop_time 100 output { file_output demo_out.txt { output_fields { time platform_name position_x position_y position_z } } } } platform DemoPlane { position 0 0 1000 velocity 50 0 0 }这个想定文件只有两个块信息量却不少。simulation 块设定了仿真从 0 时刻开始、到 100 时刻结束并挂接了一个文件输出把每个时刻的平台名称和三维坐标写进 demo_out.txt。platform 块声明了一个叫 DemoPlane 的平台初始位置在原点上方 1000速度是 X 方向每秒 50。这样写的好处是你只关注四件事仿真时长、输出字段、平台初始状态、运动初值。运行方式很简单用编译好的 sim 工具指向这个文件./bin/sim demo.af如果解析成功命令会输出仿真推进的日志结束时生成 demo_out.txt。打开文件你应该能看到多行数据每行对应一个时刻其中 position_x 会随时间增加说明平台确实在动。如果 position_x 始终不变说明平台没有接入运动模型或者输出配置有问题这个排查思路后面专门说。4.2 把坐标、单位、时钟三件事先串起来初次写想定的人最容易栽在三件事上坐标约定、单位制、时间步长。这三个概念看着基础错一个就会让整个仿真结果变得诡异。先说坐标。上面的代码默认用的是本地直角坐标X/Y/Z 有明确的几何意义方便验证运动。如果你做的是经纬高场景需要换成包内提供的经纬高坐标关键字并确认平台位置单位是度还是弧度。我一般会在一个场景里只用一种坐标体系混合使用坐标关键字是给自己埋雷。再说单位。AFSIM 很多字段自带默认单位而且默认单位未必是公制。你如果按习惯传了一个“米”的数字引擎可能按英尺来解释位置偏差就会大得离谱。所以写想定前先查文档里每个字段的单位说明或者显式声明单位不要在代码里留“我觉得是米”这种隐患。最后说时钟。simulation 块里的 start_time、stop_time 不是“秒”而是仿真时间轴上的离散时刻。后续加传感器、通信时才体会得到事件调度都挂在这个时间轴上。第一个想定建议把 stop_time 设得短一点跑通后再拉长缩短反馈周期。4.3 验证结果不看日志看数据输出文件怎么回放很多新手验证仿真结果的习惯是盯着命令行日志看但日志只是运行状态不是仿真结论。我一般会把输出文件拉进脚本里快速检查这样能直观看到实体轨迹。假设输出文件是制表符分隔的文本可以这样读import csv with open(demo_out.txt, r, encodingutf-8, errorsignore) as f: for row in f: parts row.split() if len(parts) 5: print(parts[0], parts[2], parts[3], parts[4])这段代码把时间、X、Y、Z 四列打印出来用手动扫一遍就能确认运动趋势。你不需要一开始就上复杂的数据分析工具先用最简单的文本处理确认“数据在变、平台在动”即可。如果输出的列顺序和我想定里声明的字段顺序不一致以实际文件的表头为准调整下标。5. 源码级调试与常见问题编译、解析、运行时三类翻车现场AFSIM 2.9 源码在落地时最容易遇到的问题集中在三个层面编译期依赖问题、想定解析问题、运行时行为问题。我把这几年常见的踩坑点按“现象、原因、解决”整理成下面几条基本上能覆盖从拿到源码到跑通第一个像模像样场景的全过程。5.1 编译期报错找不到 X11/OpenGL 头文件现象make 过程中出现fatal error: X11/Xlib.h: No such file or directory或者类似的 OpenGL 头文件缺失。原因源码的默认构建会尝试编译可视化客户端如果你的系统里没有安装对应的开发包编译就会在这个环节中断。注意是缺少开发包不是缺少运行库。运行库和头文件是两个包发行版里通常叫 libx11-dev、libgl1-mesa-dev 这类带 dev 后缀的名称。解决两种方式任选。第一种是装齐开发包把我在 3.1 节里列的那组命令跑一遍再重编。第二种是如果确定不需要可视化就回到 CMake 配置阶段把可视化相关开关关闭只保留内核和 sim 工具然后重新 configure。我建议桌面开发环境直接把开发包装齐省得后续想开图形界面时又要重新编译。5.2 想定解析失败.af 报错但看不出问题在哪现象sim 启动后立刻退出提示想定解析失败有时给出行号和片段但你自己看那段文本很正常找不出毛病。原因AFSIM 想定语言对块结构和字段名的敏感度很高最常见的有三种花括号不匹配、字符串引号缺失、字段名拼写错误。另外平台块里写了一个引擎不认识的字段时解析器报错位置可能离真正的问题很远误导排查。解决我的习惯是“二分注释法”。先注释掉一半内容AFSIM 想定支持 C 风格注释看解析还报不报错不报错就把问题范围缩小到被注释的那一半再反向二分。通常三四次就能定位到具体字段。新手写长想定之前先拿最小想定验证环境再加代码量。5.3 运行时实体不运动或者输出文件只有表头现象仿真跑完了日志正常但输出文件里只有表头没有任何数据行或者实体的坐标列始终不变。原因多数情况是平台没有配置运动模型。AFSIM 里平台运动需要明确的运动模型驱动velocity 字段给的只是初始速度不等于平台自动持续运动。另一个常见原因是 stop_time 设置得太短仿真推进的步数不足以产生可见变化。解决先确认 stop_time 数值足够大再把平台的运动模型配置补上参考包内 examples 里带运动模型的最小示例。不要靠猜直接对比官方示例里 platform 块和你自己写的 platform 块差异往往就是问题本身。5.4 单位错乱与随机种子两个参数级别的翻车点现象平台位置数值看起来合理但距离、速度计算结果整体偏移一个量级或者多次运行同一个想定结果却不一样。原因单位错乱通常是因为字段默认单位和你想的不一样比如默认英尺你传了米。随机种子问题则常见于传感器模型和噪声模型每次运行如果种子不同噪声序列就不同结果自然不稳定。解决单位问题只能靠查文档确认每个字段的单位约定并在想定里显式声明单位不要依赖记忆。随机种子问题相对好办在 simulation 块里显式指定固定种子保证单次调试时结果可复现。等所有逻辑稳定后再放开随机性做统计实验。6. 往源码里加自己的模型扩展插件的最小框架与验证习惯源码的价值不只是跑通更是改造成你自己能用的框架。但这里有个经验尽量不要直接改 src 下的核心代码而是用插件方式挂接你的逻辑。核心代码改动越多后续跟新版本比对越痛苦插件化之后你的代码和框架代码是分离的升级、出问题、回退都干净。我用的最小插件框架长这样// 插件入口示意具体 API 名称以 2.9 源码自带插件示例为准 extern C int afsim_plugin_init(PluginContext ctx) { ctx.register_builder(my_logic, MyLogicBuilder::create); return 0; }插件写好后编成动态库在想定文件里通过加载逻辑引用这个库并创建一个用 my_logic 作为逻辑类型的平台。这样的好处是仿真引擎代码一行不改你的业务逻辑全部长在框架的扩展点上。验证一个新插件的时候我会先建一个只包含一个平台的最小想定打印它每一帧的状态确认逻辑被引擎正确调度再逐步加参数、加交互。直接拿到大场景里调试出了问题你根本分不清是自己的逻辑还是环境中其他实体的干扰。另外说一个自己的教训早期为了省事直接改了核心库里的调度逻辑结果每次拿到新源码都要手动做一遍合并而且改动的副作用在半年后才暴露。后来所有扩展一律走插件源码保持和原始包一致问题收敛得极快。多做减法少改核心这是我在 AFSIM 2.9 源码上最值钱的一条经验希望帮到你。本文还有配套的精品资源点击获取

相关新闻

FPSSample 完整上手指南:Unity 第一人称多人射击示例项目的克隆、AssetBundle 构建与联机运行

FPSSample 完整上手指南:Unity 第一人称多人射击示例项目的克隆、AssetBundle 构建与联机运行

游戏开发示例工程 【免费下载链接】FPSSample A first person multiplayer shooter example project in Unity 项目地址: https://gitcode.com/gh_mirrors/fp/FPSSample 点击查看 免费下载 本篇技术指南以 FPSSample 官方 README 为主体,结合仓库中的编…

2026/10/13 1:44:13 阅读更多 →
SpriteJS 3D 渲染对象(RenderTarget)实战:FrameBuffer 离屏渲染、纹理回读与双缓冲复用

SpriteJS 3D 渲染对象(RenderTarget)实战:FrameBuffer 离屏渲染、纹理回读与双缓冲复用

图形学3D渲染 【免费下载链接】spritejs A cross platform high-performance graphics system. 项目地址: https://gitcode.com/gh_mirrors/sp/spritejs 点击查看 免费下载 导读:在 SpriteJS 3D 扩展中,RenderTarget 是一块可绘制的 FrameBu…

2026/10/13 1:43:13 阅读更多 →
用Cucumber让自动化测试成为团队通用语言:从BDD到工程落地

用Cucumber让自动化测试成为团队通用语言:从BDD到工程落地

你们有没有经历过这种尴尬:自动化测试代码写完了,用例也跑起来了,结果一到评审会,业务方盯着满屏的assertEquals和元素定位表达式,问了一句“这到底验证的是什么业务规则?”整个会议室瞬间安静。这不是我编…

2026/10/13 1:43:13 阅读更多 →

最新新闻

绿联NAS部署Hermes Agent教程:搭建专属自进化AI智能体

绿联NAS部署Hermes Agent教程:搭建专属自进化AI智能体

Hermes Agent 是由 Nous Research 推出的开源自主 AI 智能体框架,具备持久记忆、自动技能创建和多平台通信等核心能力,能从任务中自动提炼技能并跨会话持久记忆用户偏好,真正实现“越用越强”。截至 2026 年 4 月,该项目在 GitHub…

2026/10/13 2:29:30 阅读更多 →
FastReport中文排版修正:字体映射、标点避头尾与换行算法源码级解析

FastReport中文排版修正:字体映射、标点避头尾与换行算法源码级解析

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

2026/10/13 2:29:30 阅读更多 →
你的第一个Helmor Workspace:从接入Git仓库到合并Agent生成的PR只需4步

你的第一个Helmor Workspace:从接入Git仓库到合并Agent生成的PR只需4步

【免费下载链接】helmor Open-source local workbench for multi-agent software development. 项目地址: https://gitcode.com/gh_mirrors/he/helmor 点击查看 免费下载 Helmor 是一款开源的本地多 Agent 开发工作台(local workbench)&…

2026/10/13 2:29:30 阅读更多 →
中文OCR技术选型与精度优化实战:从版面分析到多模态大模型

中文OCR技术选型与精度优化实战:从版面分析到多模态大模型

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

2026/10/13 2:29:30 阅读更多 →
PMD 项目 Kotlin 使用策略解读:ADR-2 架构决策记录的技术内涵与仓库实证

PMD 项目 Kotlin 使用策略解读:ADR-2 架构决策记录的技术内涵与仓库实证

静态分析代码质量 【免费下载链接】pmd An extensible multilanguage static code analyzer. 项目地址: https://gitcode.com/gh_mirrors/pm/pmd 点击查看 免费下载 本文围绕 PMD 官方架构决策记录 ADR 2 - Policy on the use of Kotlin for development&#xff0…

2026/10/13 2:29:30 阅读更多 →
银行电话营销预测:Python机器学习完整项目实战与避坑指南

银行电话营销预测:Python机器学习完整项目实战与避坑指南

简介:这份资源面向希望进入金融风控与客户行为预测领域的数据科学学习者,提供一套完整的银行客户认购产品预测实战方案。项目以Python为工具,覆盖从数据清洗、特征工程到模型训练与评估的全流程,帮助理解哪些客户特征会影响金融产…

2026/10/13 2:28:30 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →