AniBT Wiki

字幕组图床

字幕组后台的图床工具:粘贴、拖拽或选择图片,服务端按格式转 WebP 或保留原格式后生成 BBCode、HTML、Markdown 和直链。

字幕组图床位于 /groups/<slug>/image-host,菜单名称是 图床。它只对已加入该字幕组组织的成员开放;普通登录用户和未加入该字幕组的用户不能上传、查看管理列表或删除图片。

公开短链 /i/<shortCode> 只展示已经上传的图片,不提供上传或管理能力。

页面结构

图床页面采用 单入口上传 + 下方图片管理 的结构,避免顶部模式切换或两栏上传面板。上传区始终在页面上方,历史图库在下方按时间分页加载。

  • 上传:点击上传区选择图片,也可以拖拽图片到上传区,或在页面中直接粘贴剪贴板图片。上传任务不会显示成独立队列;进行中和失败数量只以小状态标记展示。
  • 刚上传:上传成功后,复制格式直接显示在页面结果区,方便马上粘贴到论坛、公告或发布说明。多张上传会以紧凑横向缩略图切换。
  • 图片管理:用于浏览该字幕组已经上传的图片。图库使用小缩略图密集网格、懒加载和分页加载,适合后续管理大量图片;需要完整 BBCode、HTML、Markdown 与直链时,点击复制格式打开弹层,不会撑开或打乱图库布局。

上传方式

  • 支持点击选择图片、拖拽图片到上传区、在页面中直接粘贴剪贴板图片。
  • 请求体是原始图片二进制,浏览器不会用 multipart/FormData 包装。
  • 服务端会在读取图片内容前先完成登录与字幕组成员授权,避免非成员消耗转码资源。

图片处理规则

项目当前规则
输出格式静态 JPEG/PNG/WebP/GIF/BMP/AVIF/HEIC/HEIF 会优先转成 image/webp;无法可靠转码时保留原格式。
默认大小上限单张输入默认 20 MiB,可由部署环境调整。
默认像素上限解码后默认最多 50,000,000 像素。
默认最长边输出最长边默认 3840px,按比例缩小,不放大。
默认质量WebP quality 默认 88。
服务端并发转码默认 8 并发,硬上限 8。
SVG支持上传并保留 image/svg+xml 原格式。
动画 GIF / 动画 WebP / APNG支持上传并保留原格式,不抽帧、不压成静态图。

图片转码和对象存储写入都在 TanStack Start 的 Bun Web runtime 内完成:Bun.Image 负责可解码静态图的解码、自动方向、缩放与 WebP 编码;Bun.S3Client 负责按实际输出 Content-Type 写入图床专用对象桶。删除图片时,Convex 会先完成权限校验、软删除元数据并投递 media/r2_object_delete_batch,再由 Bun background-worker 使用原生 Bun.S3Client 异步删除对象。Convex 不处理图片二进制或对象存储 IO。

复制格式

上传成功后,上传工作区会在结果区生成以下格式:

  • BBCode:[img]https://i.anibt.net/image-host/2026/07/05/Ab3CdE1/pasted-image.webp[/img]
  • BBCode 链接:[url=https://anibt.net/i/Ab3CdE1][img]...[/img][/url]
  • BBCode 直链:[url=https://i.anibt.net/image-host/...webp][img]...[/img][/url]
  • HTML:<img src="..." alt="pasted-image.webp" title="pasted-image.webp">
  • HTML 链接:<a href="https://anibt.net/i/Ab3CdE1" target="_blank" rel="noopener noreferrer"><img ...></a>
  • HTML 直链:<a href="https://i.anibt.net/image-host/...webp" target="_blank" rel="noopener noreferrer"><img ...></a>
  • Markdown:![pasted-image.webp](https://i.anibt.net/image-host/...webp)
  • 直接链接:https://i.anibt.net/image-host/...webp;保留原格式时扩展名会是 .gif.svg.apng 等对应格式。

管理与删除

图片管理区域展示该字幕组的历史上传。成员可以预览图片、复制直链、打开图片直链或删除有权限的图片;需要全部复制格式时,点击复制格式按钮打开弹层。

删除权限:

  • 上传者可以删除自己上传的图片。
  • 字幕组 owner/admin 可以删除该组图片。
  • 站点管理员可以删除任意字幕组图床图片。

删除时 Web runtime 会先向 Convex 请求删除授权和对象 key,再调用 Convex 将元数据标记为已删除并投递 media worker 删除任务。图片会立即从列表和短链查询中消失;直链对象可能短时间仍可访问,直到 background-worker 完成异步删除。

管理员近期审查

站点管理员可在 /admin/image-host 查看近期上传的图床图片。该页面按上传时间展示跨字幕组记录,并使用密集小缩略图网格,便于快速扫过大量近期图片并检查敏感、违规或不适合公开展示的内容。

管理员可以从近期审查页复制直链、打开图片直链、查看完整复制格式,并删除任意字幕组的图床图片。该页面只对站点管理员开放,不面向普通用户或普通字幕组成员。

部署要求

图床必须使用独立对象桶和专用访问密钥。生产环境需要配置:

环境变量说明
IMAGE_HOST_R2_BUCKET图床专用桶名。
IMAGE_HOST_R2_ENDPOINTS3/R2 endpoint;可填账号级 endpoint,带 /<bucket> 路径时会校验并归一化。
IMAGE_HOST_R2_ACCESS_KEY_ID图床桶 access key。
IMAGE_HOST_R2_SECRET_ACCESS_KEY图床桶 secret key。
IMAGE_HOST_PUBLIC_DOMAIN公开图片域名;裸域名会自动补 https://。仅 Web runtime 需要。

Web runtime 和 media background-worker 都需要同一套 IMAGE_HOST_R2_* 配置;IMAGE_HOST_PUBLIC_DOMAIN 只需要配置在 Web runtime。生产 Docker 镜像会在构建阶段检查 Bun.ImageBun.S3Client。如果运行时不支持这两个原生 API,构建会失败。

本页目录