ComfyUI自定义节点实战:数值转字符串转换器开发与类型映射解析
1. 为什么值得动手写这个节点最近在折腾ComfyUI工作流的时候我发现一个很实际的问题工作流里经常需要把数字类型的数据比如自定义步数、种子值、某个节点的评分输出转成字符串用作文件名后缀、提示词拼装或者API参数传递。ComfyUI自带的节点里字符串转换能力非常有限而很多场景下我们又必须拿到字符串格式的数据才能继续往下走。就拿最常见的例子来说我想根据不同的种子值自动生成不同的文件名但ComfyUI的Save Image节点只会用固定的命名规则想自定义逻辑就得自己处理字符串。这时候如果有一个专门的节点能把整数、浮点数和节点内部生成的数据统一转成字符串工作流会变得非常灵活。这个需求促使我去研究ComfyUI的自定义节点开发。说实话ComfyUI节点开发的门槛并不高核心思想就是定义输入输出类型然后写一个Python函数把数据处理好。但那段时间我在社区看到不少新手朋友卡在同一个地方不知道input怎么声明、返回值怎么匹配、类型映射怎么处理。于是我就想写一个很小的节点一次性把这些概念讲清楚。这篇文章会从一个完整的可运行节点开始拆解整数、浮点数、自生成数据这三种输入类型下的字符串转换实现。适合刚接触ComfyUI节点开发的人也适合想彻底搞懂ComfyUI内部输入输出机制的老手。2. ComfyUI节点开发的核心机制输入类型、输出类型和入口函数2.1 先搞懂ComfyUI是怎么识别节点的ComfyUI的自定义节点本质上就是一个Python类这个类会注册到系统里然后出现在节点菜单中。ComfyUI通过规定好的类方法和属性来识别节点INPUT_TYPES一个类方法定义节点的输入端口。返回值里的required表示必须连接的输入optional是可选输入。RETURN_TYPES定义输出类型可以是一个元组。FUNCTION节点执行时调用的入口函数名。CATEGORY节点在菜单中显示的路径。RETURN_NAMES给输出端口命名的元组。这几个属性缺一不可。很多新手在自定义节点时报错“module has no attribute”或者节点不显示基本就是这里出了问题。需要注意一个关键的映射规则FUNCTION里写的函数名函数的参数名必须和INPUT_TYPES中定义的输入名完全一致。ComfyUI在调用节点时实际上是用关键字参数的方式调用那个函数所以如果参数名对不上运行时会直接报错说缺参数。2.2 类型系统ComfyUI内置数据类型与Python类型的对照关系ComfyUI有一个自己的类型注册机制。常见的内置类型包括ComfyUI类型Python对应说明INTint整数FLOATfloat浮点数STRINGstr字符串IMAGEtorch.Tensor图像张量LATENTdict潜空间数据MODELcomfy.model相关对象模型VAEvae对象VAE模型CONDITIONINGlist条件数据自定义节点可以定义自己的类型也可以使用这些内置类型。RETURN_TYPES中返回的类型必须是ComfyUI能识别的类型名称。在转换逻辑中INT会映射成Python的intFLOAT会映射成float。STRING可以是单行文本框也可以配置成多行甚至可以配置成下拉列表。2.3 入口函数如何工作当我们创建节点并执行时ComfyUI会根据FUNCTION字段的值在当前类的实例上调用对应的成员函数。整个流程大概是用户在工作流中把上游节点的输出连接到当前节点的某个输入端。ComfyUI从上游拿到数据做类型检查和数据准备。调用当前节点的入口函数传入所有输入值。入口函数返回一个元组每个元素对应RETURN_TYPES中的一个类型。ComfyUI把返回值包装好供下游节点继续使用。理解了这套机制写自定义节点就不再是玄学。3. 设计我们的数据类型转换节点3.1 需求拆解为什么需要三种数据来源场景分别是什么我设计的这个节点要处理三种输入来源整数最常用比如步数、种子、批次数、图像尺寸等。这类数据在工作流中到处都是转成字符串后可以直接拼进提示词或文件名。浮点数比如CFG值、Denoise强度、某些模型的置信度分数。浮点数转字符串有个精度问题直接str(0.1000000001)会得到一长串所以要有可配置的小数位处理逻辑。自生成数据这个“自生成”我指的是节点内部自己产生的数据。比如让节点生成一个随机种子或者基于当前时间生成一个时间戳字符串。这样可以避免工作流里额外拖一个随机数节点进来。这三种数据源加上一个可选的字符串格式化方式就构成了一个完整且实用的节点。3.2 节点输入输出声明从零到可运行的边界定义我决定做一个支持全部三种数据源的节点但每次只处理一个值。这样逻辑清晰也不会把节点做得太重。输入部分设计为data_type一个下拉列表可选“INT”、“FLOAT”、“RANDOM”用于告诉节点当前要处理的数据源类型。int_value整数输入默认值为0。float_value浮点数输入默认值为0.0。decimal_places浮点数保留的小数位默认2位。random_min、random_max随机数范围默认0到1000。format_string可选的自定义格式模板留空时直接转字符串。输出设计为一个STRING类型名称为string。这里的关键是data_type虽然是控制参数但它本身在ComfyUI里也属于强制输入。ComfyUI有把简单参数做成选择器的方法就是把STRING类型配置成列表。3.3 为何选择单一节点而不是三个独立节点在动手编码之前我认真想过到底是写三个独立节点一个处理整数、一个处理浮点数、一个处理随机数还是一个多功能节点。最终选了单一节点类原因是三个节点会有大量重复代码维护起来麻烦。ComfyUI节点库本来就在膨胀做一个更精简的节点对工作流加载速度也有微小帮助。在实际工作流里有一个统一入口的转换节点配合节点命名和分组功能会更容易理解和复用。这个思路也符合ComfyUI社区目前流行的“少而精”节点哲学。我们不是追求功能大而全而是让一个节点聚焦一类场景提高复用性。4. 实操拆解完整代码与关键步骤4.1 开发环境准备我用的环境是ComfyUI官方源码启动的Python版本3.10。自定义节点的目录一般在ComfyUI/custom_nodes/下。每个自定义节点是一个独立的文件夹文件夹内至少要有一个Python文件通常是__init__.py或者任意命名的.py文件。为了统一管理我建议一个节点类一个文件配合一个__init__.py做注册。我这边的目录结构是custom_nodes/ └── comfy-data-to-string/ ├── __init__.py ├── data_to_string.py └── README.md__init__.py里做导入注册把节点类暴露给ComfyUI的节点加载机制。需要说明一下ComfyUI在启动时会扫描custom_nodes目录下的所有文件夹和.py文件凡是定义了NODE_CLASS_MAPPINGS和NODE_DISPLAY_NAME_MAPPINGS的模块都会自动注册到节点菜单。4.2 节点类代码逐段解读先看完整代码Pythonimport random import time import torch import numpy as np class DataToStringNode: def __init__(self): pass classmethod def INPUT_TYPES(cls): return { required: { data_type: ([INT, FLOAT, RANDOM], {default: INT}), int_value: (INT, {default: 0, min: -1000000, max: 1000000}), float_value: (FLOAT, {default: 0.0, min: -1000000.0, max: 1000000.0}), decimal_places: (INT, {default: 2, min: 0, max: 10}), random_min: (INT, {default: 0, min: -1000000, max: 1000000}), random_max: (INT, {default: 1000, min: -1000000, max: 1000000}), format_string: (STRING, {default: , multiline: False}), } } RETURN_TYPES (STRING,) RETURN_NAMES (string,) FUNCTION convert_to_string CATEGORY utils/Conversion def convert_to_string(self, data_type, int_value, float_value, decimal_places, random_min, random_max, format_string): if data_type INT: result self._convert_int_to_string(int_value, format_string) elif data_type FLOAT: result self._convert_float_to_string(float_value, decimal_places, format_string) elif data_type RANDOM: result self._generate_random_string(random_min, random_max, format_string) else: raise ValueError(fUnsupported data_type: {data_type}) return (result,) def _convert_int_to_string(self, value, format_string): if format_string and format_string.strip() ! : try: return format_string.format(value) except Exception: return str(value) return str(value) def _convert_float_to_string(self, value, decimal_places, format_string): formatted_float f{value:.{decimal_places}f} if format_string and format_string.strip() ! : try: return format_string.format(formatted_float) except Exception: return formatted_float return formatted_float def _generate_random_string(self, min_val, max_val, format_string): if max_val min_val: min_val, max_val max_val, min_val random_value random.randint(min_val, max_val) if format_string and format_string.strip() ! : try: return format_string.format(random_value) except Exception: return str(random_value) return str(random_value) NODE_CLASS_MAPPINGS { DataToStringNode: DataToStringNode, } NODE_DISPLAY_NAME_MAPPINGS { DataToStringNode: Data To String, }我们一步步拆解这段代码。INPUT_TYPES类方法里定义了所有输入参数。data_type是这样声明的([INT, FLOAT, RANDOM], {default: INT})。这个语法表示它是一个组合列表节点加载后会在端口上显示一个下拉菜单下拉项就是列表里的三个字符串。int_value和float_value分别对应整数和浮点数端口。ComfyUI的类型定义元组里第二个元素可以带配置例如{default: 0, min: -1000000, max: 1000000}这会在UI上显示一个带滑动范围和默认值的输入框。这里min和max不限制用户输入范围只是UI上滑块的边界。decimal_places控制浮点数保留位数。random_min和random_max控制随机数生成范围。format_string用于自定义输出格式比如输入“seed: {}”最后输出就是“seed: 42”。RETURN_TYPES是(STRING,)表示输出一个字符串端口。RETURN_NAMES给这个端口起名为string方便在预览界面辨识。入口函数命名为convert_to_string。这个函数接收的参数名必须和INPUT_TYPES里定义的键完全一致包括data_type、int_value、float_value、decimal_places、random_min、random_max、format_string一个都不能少。函数内部根据data_type分支处理。INT和FLOAT分支分别调用对应转换函数RANDOM分支则生成一个随机数再转字符串。关于RETURN_TYPES为什么是元组这是ComfyUI的约定。即使只有一个输出也必须返回包含一个元素的元组。入口函数返回值也必须是元组。4.3 为什么FUNCTION的参数名不能随便改这是新手最容易踩的坑。FUNCTION convert_to_string声明了入口函数名但ComfyUI在调用时不光检查函数是否存在还按照INPUT_TYPES定义里的键名去匹配函数的关键字参数。比如INPUT_TYPES里有一个键叫data_typeComfyUI会把它当作data_typexxx传给函数。如果函数里写的是dataType运行时就会报错TypeError: convert_to_string() got an unexpected keyword argument data_type我最早开发节点时就这样翻车过一次。排查了半天后来仔细核对参数名才恍然大悟。所以新手写节点时第一件事就是把输入键和函数参数名统一起来。4.4 自生成数据的两种路径RANDOM与时间戳代码里已经有了RANDOM路径。但我在实际使用中还经常需要时间戳。比如批量生成图片时我习惯在文件名后面加一个精确到分钟的时间戳避免重名。因此我在自己用的版本里又加了一个data_type选项TIMESTAMP。实现很简单elif data_type TIMESTAMP: result self._generate_timestamp_string(format_string)对应函数是def _generate_timestamp_string(self, format_string): timestamp time.strftime(%Y%m%d_%H%M%S) if format_string and format_string.strip() ! : try: return format_string.format(timestamp) except Exception: return timestamp return timestamp如果你不需要时间戳可以去掉这个分支。保留RANDOM分支本身已经能满足“自生成数据”的需求。不过多说一句自生成随机数值时必须注意范围。如果把random_min设成负数而random_max设成正数生成的值可能是负数这在某些场景比如作为种子传回采样器会导致问题。所以我在代码里加了边界交换逻辑确保random_max不小于random_min。这个细节虽然小但能让节点更稳。5. 注册节点与前端显示5.1NODE_CLASS_MAPPINGS与NODE_DISPLAY_NAME_MAPPINGS的配置每个自定义节点模块文件被ComfyUI加载的主要Python文件都必须定义两个全局变量NODE_CLASS_MAPPINGS字典键是节点的类名值是节点类本身。NODE_DISPLAY_NAME_MAPPINGS字典键是类名值是菜单里显示的名称。ComfyUI加载节点时会检查这两个变量是否存在。如果缺失它可能会跳过这个模块节点就永远不出现。在使用单一Python文件的方案时直接在文件底部定义这两个变量。如果用了包结构则需要把注册逻辑放到__init__.py中确保在导入时执行。5.2 节点在菜单中的位置与显示效果CATEGORY utils/Conversion决定节点出现在菜单中的路径。启动ComfyUI后在utils分组下能看到Conversion子分组里面出现名为“Data To String”的节点。在UI里节点的输入端口从上到下依次是data_type下拉框、int_value、float_value、decimal_places、random_min、random_max、format_string。由于输入比较多节点整体看起来可能比较长。如果你只想要一个精简的单输入版本可以把不用的输入隐藏。不过ComfyUI原生不支持按条件隐藏参数所以简化做法是拆成多个节点类继承同一个基类各自重写INPUT_TYPES。这里有一个前端显示细节format_string默认定义为单行文本框。如果想让用户输入多行文本比如拼接提示词可以改成{default: , multiline: True}。对于纯格式化场景单行足够。6. 测试与验证从启动到工作流实测6.1 启动ComfyUI后节点加载失败的常见排查点第一次接好代码启动ComfyUI时控制台可能出现两类信息正常情况会打印类似“Loading nodes from /custom_nodes/comfy-data-to-string/data_to_string.py”的日志。如果没有任何日志说明文件没被扫描到。如果文件被扫描到但有语法错误或变量缺失日志会显示IMPORT FAILED或module相关错误。遇到节点加载失败我通常按这个顺序排查检查Python代码语法用python -m py_compile data_to_string.py验证。检查是否有其他自定义节点占用了同名类或同名输入类型。检查ComfyUI版本是否过旧某些字段比如dropdown类型声明在不同版本中写法有差异。清空ComfyUI的user/default/workflows中的缓存文件特别是object_info.json。这个文件缓存了节点信息改代码后不刷新会导致节点信息过期。6.2 实际工作流中的验证步骤节点加载成功后我在工作流中搭了一条链路来测试在空白处右键选择utils Conversion Data To String。把data_type设为INTint_value设为123。在Preview Text节点上显示输出应该看到字符串123。把data_type切换为FLOAT设float_value为3.14159decimal_places为2输出应该是3.14。把data_type切换为RANDOM设置random_min10、random_max20反复执行节点每次输出在10到20之间变化。我这边的测试结果符合预期。另外用format_string测试了一下输入seed: {}整数111输出为seed: 111。格式模板里的大括号{}是Python字符串格式化的占位符如果用户输入了不规范模板比如少一个括号代码里catch异常后又回到直接转字符串不会导致节点崩溃。这种容错处理是必须的因为用户输入的格式模板不可控。6.3 字符串与提示词拼接的应用场景测试完成后我把节点接到了一个实际工作流中在采样器后面加一个Data To String节点把采样器的seed端口连到int_value上data_type选INTformat_string填seed is {}。然后把这个输出接到正向提示词的前缀部分写一些描述性文字拼接。这样就能让每次生成的提示词带上种子信息方便回溯生成结果。实测下来工作流运行稳定没有类型冲突。这里需要提醒一下ComfyUI的节点连线是有类型匹配的。如果把Data To String节点的string输出类型STRING接到期望IMAGE类型的端口会直接报类型不匹配。这是正常的因为我们的节点输出本来就是字符串。7. 踩坑实录与常见问题速查表开发过程中我还遇到过不少问题整理成一个表格方便大家对照排查。问题现象可能原因解决方案节点菜单中找不到自己的节点模块文件没放对位置或NODE_CLASS_MAPPINGS缺失确认在custom_nodes下且文件导出了NODE_CLASS_MAPPINGS节点显示但执行报错unexpected keyword argument入口函数参数名与INPUT_TYPES键名不一致逐一核对键名保持完全一致输出连接到下游端口报类型不匹配RETURN_TYPES定义错误确认返回的是(STRING,)而非其他类型下拉框不显示选项data_type声明格式不对使用( [A,B], {default: A} )这种元组嵌套格式修改代码后节点状态不变ComfyUI缓存了节点信息重启ComfyUI或删除object_info.json缓存随机数每次执行不变某些环境开启了确定性模式确认没有设置固定种子或检查上游是否固定了随机种子浮点数输出多了很多位小数直接用了str()转换使用f{value:.{decimal_places}f}控制精度第2个问题是最常见的我在社区里看到很多人贴报错截图几乎都是参数名不匹配。第5个问题也值得一提。ComfyUI的Web界面通过/object_info接口获取节点信息而服务端会缓存这个信息。如果改了INPUT_TYPES有时刷新页面没用必须重启后端进程。在长期开发中我是把重启ComfyUI当作一个必选项的。8. 从单一节点类到进阶开发的想法写完了这个节点我对ComfyUI自定义开发的理解又深了一层。这个看似简单的节点背后其实涉及了几个核心机制类型声明、函数绑定、返回值包装。这三个机制吃透了写更复杂的节点也不会虚。后续如果你想继续扩展有几个方向可以考虑把节点改造成支持多个输入同时转换的版本比如接收一个列表统一输出字符串列表。把format_string做成预设模板下拉菜单方便工作流风格统一。加入国际化支持让菜单名称跟随语言切换。我个人在实际使用中的体会是ComfyUI的节点开发不要求多么高深的编程能力但一定要细心——细心检查参数名、细心核对类型、细心处理用户输入容错。这个节点虽然小但它在工作流里发挥的作用一点也不小尤其是当你需要把数值信息带进提示词、文件名或API参数时一个顺手可靠的转换节点真的是刚需。最后分享一个小技巧如果你发现自己经常在不同工作流里重复搭同样的转换逻辑完全可以把自己沉淀的一套小工具节点整理成个人仓库每次换新环境直接复制过去就能用。开发自己用得顺手的节点比到处找合用的第三方节点靠谱得多也更符合自己的使用习惯。

相关新闻

input按钮onclick事件的可靠性设计与实战避坑指南

input按钮onclick事件的可靠性设计与实战避坑指南

1. 这个看似简单的onclick到底在解决什么问题?“input按钮中的onclick事件”——光看标题,很多人第一反应是:“这有什么好讲的?不就是点一下触发个函数吗?”但我在一线带过几十个前端新人、参与过十几个中大型系统重构…

2026/10/17 14:39:23 阅读更多 →
开源前端商城模板生产化改造指南

开源前端商城模板生产化改造指南

简介:这是一套面向前端初学者与中小型电商项目开发者的开源HTMLCSSJS商城模板,专为快速搭建响应式电商页面设计,解决从零编码耗时长、交互功能实现难、移动端适配不统一等实际问题。资源包共65个文件,含22个JavaScript文件&#x…

2026/10/17 14:39:23 阅读更多 →
Unity WheelCollider载具物理从入门到精通:参数调优与避坑指南

Unity WheelCollider载具物理从入门到精通:参数调优与避坑指南

1. 为什么我放弃了刚体加力,转向WheelCollider刚接触Unity做载具那会儿,我试过最直觉的方案:给车壳挂一个Rigidbody,用AddForce推着走,转向靠直接改transform的rotation。平地上跑起来看着还行,但只要速度一…

2026/10/17 14:39:23 阅读更多 →

最新新闻

自适应滤波器毕设全流程:LMS与RLS算法从设计到答辩

自适应滤波器毕设全流程:LMS与RLS算法从设计到答辩

简介:这份资源是南京航空航天大学电子信息工程学院硕士课程「自适应滤波器设计及应用」的完整论文文档,面向通信、电子与通信工程等专业学生及需要完成相关毕业设计的学习者,帮助系统梳理自适应滤波器的理论基础、算法实现与MATLAB仿真验证。…

2026/10/17 15:38:06 阅读更多 →
memcached平滑升级实战:从滚动重启到数据预热,避免缓存雪崩

memcached平滑升级实战:从滚动重启到数据预热,避免缓存雪崩

1. 为什么“平滑升级”是缓存运维里最容易被低估的硬骨头做过线上服务的人大多有个共识:缓存这东西,平时不出事的时候你几乎感觉不到它存在,一旦它出问题,整个系统的响应时间会像被人抽掉了地基一样瞬间塌方。而“升级”这个动作&…

2026/10/17 15:38:06 阅读更多 →
无标题项目如何落地:从需求拆解到技术选型的完整路径

无标题项目如何落地:从需求拆解到技术选型的完整路径

经常逛技术社区的人,大概见过那种点进去正文一片空白的帖子,标题栏就挂着一个【无标题】。以前我总觉得这是发帖人没把问题说清楚,直到自己接过几个从零开始的项目后才意识到,很多项目不是没内容,而是主人还没想好该把…

2026/10/17 15:38:06 阅读更多 →
Oracle项目实战:开放式基金交易平台的数据库设计与实现

Oracle项目实战:开放式基金交易平台的数据库设计与实现

简介:围绕Oracle项目实战的基金交易平台数据库设计文档,面向数据库初学者、Oracle开发人员以及需要完成课程设计或毕业设计的学生,可用于理解真实业务场景下的数据建模与表结构规划。文档以招商银行某分行的开放式基金交易平台为案例&#xf…

2026/10/17 15:38:06 阅读更多 →
Bootstrap响应式工具类实战指南:从间距到弹性布局,告别自定义CSS

Bootstrap响应式工具类实战指南:从间距到弹性布局,告别自定义CSS

Bootstrap 出来这么多年,很多人把它当成“套模板”的工具,逮到一个现成的样式就往上堆,布局歪了、对齐乱了就硬调 CSS。其实 Bootstrap 真正耐用的部分不是它那些成组组件,而是藏在文档角落里的一整套响应式实用工具类。用好这套东…

2026/10/17 15:38:06 阅读更多 →
Debug下所有年份都成闰年?汇编LOOP循环CX寄存器未初始化陷阱解析

Debug下所有年份都成闰年?汇编LOOP循环CX寄存器未初始化陷阱解析

简介:面向北京交通大学“汇编与接口”课程的一份Debug调试实验文档,以leapYear.exe闰年判断程序为例,完整呈现汇编程序从编译、链接到运行调试的流程。文档从整体逻辑与逐句逐段分析两条线展开,既说明闰年判定规则(能被…

2026/10/17 15:37:05 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →