ms-upload — 魔搭图床上传
把本地文件(图片、视频、PDF、zip、md/txt 等任意类型,二进制原样上传)或网络 URL 转存到魔搭 ModelScope 图床仓库,上传后自动验证直链可访问,返回可直接粘贴使用的直链。
什么时候用
- 用户想把本地图片/文件上传到魔搭、要"图床直链/外链"
- 用户给了若干 URL,想转存成自己图床的直链
- 批量托管整个文件夹(如海报、生成的图片集),并按目录归类
使用方法
统一调用打包脚本,不要自己重写上传逻辑(脚本已内置分批 commit、限流自动等待、中文直链编码验证、失败重试、断点续传等踩坑修复):
python3 <skill目录>/scripts/ms_upload.py <文件|文件夹|URL...> [参数]
依赖:modelscope SDK(推荐 ≥1.39)和 MODELSCOPE_API_KEY。
解释器自动发现(可移植):任意 python3 均可启动脚本;当前解释器缺 SDK 时,自动按候选顺序(miniconda/anaconda/miniforge 各环境 → 系统/Homebrew python3)寻找含 SDK 的解释器并自动切换,跨机移植零配置;全都没有则提示 pip install modelscope。
⚠️ modelscope <1.10 无上传接口(报 'HubApi' object has no attribute 'upload_file'),请升级 SDK,勿锁死旧环境路径。
⚠️ 新版 SDK(≥1.39)API 有变:login 参数名为 token(用位置传参兼容新旧版);CommitOperationAdd/create_commit 已移除;upload_folder 批次由内部自适应决定(不可参数化)。
参数与配置
配置优先级:命令行参数 > 环境变量 > 内置默认。
| 项目 | 命令行参数 | 环境变量 | 默认值 |
|------|-----------|---------|--------|
| 访问令牌 | --api-key KEY | MODELSCOPE_API_KEY | 无(必需) |
| 图床仓库 | --repo-id OWNER/REPO | MODELSCOPE_REPO_ID | bozoyan/dsh-bizyair-i2-assets |
| 仓库内目录 | --dir 目录名 | MSUP_DIR_IN_REPO | 按年月,如 202610 |
| 输入 | 位置参数(可多个,文件/文件夹/URL 混合) | — | — |
其他常用参数:
| 参数 | 作用 |
|------|------|
| --skip-existing | 断点续传:同名文件已传过则跳过(批量中断后重跑必备) |
| --no-timestamp | 文件名保持原名,不加 -时间戳 后缀(同名会覆盖) |
| -r | 文件夹递归上传,保留子目录结构 |
| --no-verify | 跳过上传后直链验证(大批量时必加,逐张 GET 验证很慢) |
| --links-out FILE | 把 文件名<TAB>直链 清单写入文件 |
硬限制与实测经验(2026-10-11,1948 张 jpg 实战验证)
| 限制/结论 | 说明 |
|-----------|------|
| commit 限流 200 次/小时/仓库 | 硬限制。报错 429 Commit frequency limit exceeded ... after N seconds;脚本按服务端提示自动等待重试 |
| 批次按体积切:每批累计 ≤8MB(数量兜底 ≤64 个) | 决定请求体大小的是字节量不是文件个数:实测累计 ≈17MB 必写超时(E1020),≤8MB 稳定(1948 张 jpg 413s 传完)。脚本按 MAX_BATCH_BYTES 自动切批,大文件自动少装、小文件自动多装;数量上限 64 兜底海量小文件的元数据开销 |
| 逐文件 commit 只适合 ≤3 个文件 | 单文件约 1.9s 安全,但大批量必撞 200 次/小时限制 |
| SDK 自带重试可化解瞬时错误 | 429 commit lock busy、409 branch changed、偶发 E1020 均重试 1~2 次即过,无需人工干预 |
| 内容审核会删图 | 穿内衣/泳装等人物图上传成功后会被平台自动重置删除(传了也白传);商品白底图、海报、截图等不拦。此类内容改用七牛云/开拍图床 |
| 断点续传 | 中断后加 --skip-existing 重跑,已传文件自动跳过 |
决策指引
- 仓库内目录(--dir)怎么定:优先问用户或从上下文推断(如文件夹名、项目名);用户没说就用默认年月目录。中文目录名没问题,脚本已处理编码。
- 直链格式:
https://modelscope.cn/models/<repo-id>/resolve/master/<目录>/<文件名>。文件名默认为原名-时间戳.后缀,避免同名覆盖。 - 直链特性:响应 content-type 是
application/octet-stream属正常现象,浏览器<img>/<video>标签均能正常渲染;直链会 302 到 CDN,验证时必须跟随重定向。 - 批量上传大文件夹:加
--skip-existing(中断可续传)、--no-verify(跳过逐张验证提速)和--links-out(留存清单);文件多时可放后台运行并汇报进度。 - 批量模式(自动):一次调用超过 3 个文件时自动切换分批 commit——按「每批累计 ≤8MB 且 ≤64 个文件」切批,每批建独立 staging(硬链接零拷贝)→
upload_folder一次 commit → 下一批;批内失败指数退避重试 3 次,每小时限流按服务端提示自动等待;单批失败不影响其他批。≤3 个仍走逐文件模式,逐个即时验证直链。 - 上传失败排查:先看是否 503——本机若有失效的系统代理,脚本已通过
NO_PROXY=*绕过;SDK 报already exists的 WARNING 是正常提示,不是错误。
输出格式
上传完成后,向用户汇报:
- 汇总一行:
成功 X/Y,失败 Z,仓库目录 xxx - 每个文件的直链,用
文件名 → 直链列表或 Markdown 表格呈现(大批量用--links-out清单代替逐条罗列) - 若有失败,列出失败清单并说明可加
--skip-existing重跑续传
示例:
完成: 成功 3/3,仓库目录 bozoyan/dsh-bizyair-i2-assets @ 海报/
- AI转型避坑指南.png → https://modelscope.cn/models/bozoyan/dsh-bizyair-i2-assets/resolve/master/海报/AI转型避坑指南-1760000000.png
- 企业AI转型法则.md → https://modelscope.cn/models/bozoyan/dsh-bizyair-i2-assets/resolve/master/海报/企业AI转型法则-1760000001.md
Scan to join WeChat group