ComfyUI "OSError: [WinError 38] 已到文件结尾" 报错解决方案
错误现象
运行过程中(通常在预览视频、音频或大图时)控制台报错:
Traceback (most recent call last):
File "H:\PythonProjects1\Win_ComfyUI.venv\Lib\site-packages\aiohttp\web_protocol.py", line 602, in start
resp, reset = await task
^^^^^^^^^^
File "H:\PythonProjects1\Win_ComfyUI.venv\Lib\site-packages\aiohttp\web_protocol.py", line 535, in _handle_request
resp, reset = await self.finish_response(request, resp, start_time)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "H:\PythonProjects1\Win_ComfyUI.venv\Lib\site-packages\aiohttp\web_protocol.py", line 713, in finish_response
await prepare_meth(request)
File "H:\PythonProjects1\Win_ComfyUI.venv\Lib\site-packages\aiohttp\web_fileresponse.py", line 288, in prepare
return await self._prepare_open_file(request, fobj, st, file_encoding)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "H:\PythonProjects1\Win_ComfyUI.venv\Lib\site-packages\aiohttp\web_fileresponse.py", line 418, in _prepare_open_file
return await self._sendfile(request, fobj, offset, count)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "H:\PythonProjects1\Win_ComfyUI.venv\Lib\site-packages\aiohttp\web_fileresponse.py", line 147, in _sendfile
await loop.sendfile(transport, fobj, offset, count)
File "D:\A\envs\py312\Lib\asyncio\base_events.py", line 1232, in sendfile
return await self._sendfile_native(transport, file,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\A\envs\py312\Lib\asyncio\proactor_events.py", line 768, in _sendfile_native
return await self.sock_sendfile(transp._sock, file, offset, count,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\A\envs\py312\Lib\asyncio\base_events.py", line 919, in sock_sendfile
return await self._sock_sendfile_native(sock, file,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\A\envs\py312\Lib\asyncio\proactor_events.py", line 756, in _sock_sendfile_native
await self._proactor.sendfile(sock, file, offset, blocksize)
File "D:\A\envs\py312\Lib\asyncio\windows_events.py", line 803, in _poll
value = callback(transferred, key, ov)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\A\envs\py312\Lib\asyncio\windows_events.py", line 462, in finish_socket_func
return ov.getresult()
^^^^^^^^^^^^^^
OSError: [WinError 38] 已到文件结尾。
关键报错信息:
**OSError: [WinError 38] 已到文件结尾。**
Traceback 指向 aiohttp 的 sendfile 调用链(web_fileresponse.py → proactor_events.py)。

错误本质
Windows 系统下 asyncio 的 sendfile 在发送静态文件(output 中的 mp4、wav、长图等)时出现问题:
- 文件刚生成完,句柄尚未完全释放。
- 文件被杀毒软件/云盘同步工具短暂锁定。
- 大文件或低内存环境下 Windows proactor 实现不稳定。
重要:该错误仅影响浏览器实时预览,图片/视频/音频文件本身生成正常(output 文件夹里完整可用)。
解决方案(按推荐顺序)
-
最简单:直接忽略
生成结果不受影响,手动去
ComfyUI\output文件夹查看文件即可。很多用户长期如此使用。 -
避免触发
- 使用 VHS_VideoCombine 等节点时,勾选 "skip video/audio preview" 或不连接预览节点。
- 生成后手动刷新 output 文件夹。
-
排除外部干扰
- 将 ComfyUI 整个文件夹(尤其是
output子文件夹)加入杀毒软件(360、火绒、Windows Defender)白名单。 - 暂停 OneDrive、百度网盘、Dropbox 等对 output 文件夹的实时同步/扫描。
- 将 ComfyUI 整个文件夹(尤其是
-
禁用 sendfile(推荐永久修复)
设置环境变量
AIOHTTP_NOSENDFILE=1,强制 aiohttp 使用普通 read/write 发送文件(速度略慢,几乎无感知)。永久设置方法(一次设置,长期有效):
-
打开命令提示符(建议管理员权限):
setx AIOHTTP_NOSENDFILE "1"(普通用户级,推荐)
或setx AIOHTTP_NOSENDFILE "1" /M(系统级,需要管理员权限)
-
设置成功后提示
SUCCESS: Specified value was saved. -
必须完全关闭并重启 :
- 关闭所有 cmd/PowerShell 窗口
- 完全退出 PyCharm(包括托盘)
- 重新启动 ComfyUI
-
验证:
echo %AIOHTTP_NOSENDFILE%输出应为
1
临时设置方法(测试用):
-
在启动 bat 文件最上方添加:
set AIOHTTP_NOSENDFILE=1 -
或 PyCharm Run Configuration → Environment variables 添加该变量。
-

- 更新 ComfyUI
最新版(2025 年以后)已对 WinError 38 增加容错处理。- 运行
update.bat或 Manager 中 Update ComfyUI。
- 运行
推荐最终配置
- 执行一次
setx AIOHTTP_NOSENDFILE "1" - 重启 PyCharm/ComfyUI
- 清理 bat 文件和 Run Configuration 中重复的环境变量设置
设置完成后,视频/音频/大图预览将不再报 [WinError 38],体验最流畅。
记下来,下次遇到直接 setx 一次搞定!祝使用愉快~