对聊天/消息应用(如微信、WhatsApp、Telegram、iMessage、Slack、Discord等)截图进行像素化处理,以隐藏聊天名称、头像和/或显示名称。
ChatMask skill. 当用户发送聊天截图并请求像素化或隐藏身份时
功能概述
ChatMask skill. 当用户发送聊天截图并请求像素化或隐藏身份时是一项面向实际任务的技能,主要用于元素, 请遵循以下步骤, 顺序 : 设置 – Workflow.;不需要外部 API 密钥。
核心要点
- 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
- 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
- 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。
使用与执行
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
结果检查与注意事项
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
ChatMask 技能
当用户发送聊天截图并要求对身份相关元素进行像素化或隐藏时,请按以下顺序执行步骤:环境准备 → 工作流程。
无需外部 API 密钥。 本技能复用您已有的 AI 能力来定位图像中的目标区域,仅将图像处理任务委托给本地 Python 脚本执行。
环境准备(仅需运行一次,幂等)
请在首次执行任务前运行以下代码块。所有步骤均已加保护机制,重复运行是安全的。
# 默认安装路径 — 可通过在调用技能前设置 CHAT_PIXELATE_PATH 环境变量覆盖
CHAT_PIXELATE_PATH="${CHAT_PIXELATE_PATH:-$HOME/.openclaw/skills/chatmask}"
# 1. 克隆仓库并检出已固定、经审计的提交版本
# 审计提交哈希:62b0d1132e8cad8455ef29f74a98da486ff102d4(frankz2020/chatmask,v1.1.0)
PINNED_SHA="62b0d1132e8cad8455ef29f74a98da486ff102d4"
if [ ! -d "$CHAT_PIXELATE_PATH/.git" ]; then
git clone https://github.com/frankz2020/chatmask.git "$CHAT_PIXELATE_PATH"
fi
# 强制检出固定提交 — 防止因远程分支更新导致静默偏移
(cd "$CHAT_PIXELATE_PATH" && git fetch --quiet origin && git checkout --quiet "$PINNED_SHA")
# 2. 若虚拟环境尚未创建,则新建
if [ ! -d "$CHAT_PIXELATE_PATH/.venv" ]; then
python3 -m venv "$CHAT_PIXELATE_PATH/.venv" \
|| { apt-get install -y python3-venv && python3 -m venv "$CHAT_PIXELATE_PATH/.venv"; }
fi
# 3. 安装/升级依赖项(Pillow、python-dotenv — 运行时无网络请求)
"$CHAT_PIXELATE_PATH/.venv/bin/pip" install -q -r "$CHAT_PIXELATE_PATH/requirements.txt"
export CHAT_PIXELATE_PATH
PYTHON="$CHAT_PIXELATE_PATH/.venv/bin/python3"
本次安装内容:Pillow(图像处理)和 python-dotenv(仅用于独立模式下的 .env 文件加载)。
requests包不会由本技能安装 — 它仅在独立模式(非技能模式)下需要,定义于requirements-standalone.txt中。脚本在运行时不做任何网络请求。
网络行为说明:环境准备阶段唯一的出站请求为
git clone(一次性)与pip install(一次性)。在工作流程阶段,当传入--bbox-json参数时,process.py将不发起任何网络请求 — 所有处理均在本地完成。
工作流程
请先阅读 元素选择 和 选项配置 章节,将用户的自然语言请求准确映射为对应命令行参数,再执行后续操作。
1. 准备目录
JOB_ID="job_$(date +%s)" OUT_DIR="/tmp/chat_pixelate_out_$JOB_ID" mkdir -p "$OUT_DIR"
2. 单独处理每张图像
每张图像必须单独分析与像素化处理。 不同截图中各元素的位置不同 — 若将某张图像的边界框坐标应用于另一张图像,会导致敏感区域未被正确遮蔽。请对用户发送的每张图像重复执行以下代码块。
为何需逐图处理?
--bbox-json参数作用域限定于单张图像。process.py对此做了强制约束:当启用--bbox-json时,若输入目录中存在多于一张图像,程序将报错退出。
针对每张图像 :
2a. 将图像复制到专属输入目录
# 每个文件使用一个独立的单图输入目录 IMG_FILE="" # 替换为实际文件名 IN_DIR="/tmp/chat_pixelate_in_${JOB_ID}_${IMG_FILE%.*}" mkdir -p "$IN_DIR" cp "$HOME/.openclaw/media/inbound/$IMG_FILE" "$IN_DIR/"
2b. 使用您的视觉能力分析图像
对 $IN_DIR/$IMG_FILE 应用下方提示词,并捕获其 JSON 输出结果。该 Schema 使用归一化坐标(0–1000),其中 (0,0) 表示左上角,(1000,1000) 表示右下角,坐标顺序为 y_min, x_min, y_max, x_max。
You are a privacy specialist analyzing a chat/messaging app screenshot.
The app could be WeChat, WhatsApp, Telegram, iMessage, Slack, Discord, LINE,
KakaoTalk, or any other messaging application. The UI may be in English,
Chinese, or any other language. Identify the requested elements by their
visual layout and position, not by app-specific labels.
YOUR TASK:
Locate ALL occurrences of the following elements and return their bounding boxes:
1. chat_names — The text title in the top navigation/header bar (conversation
name, group name, channel title, back-button contact name).
2. profile_pics — Circular or rounded avatar images next to message bubbles,
in the header, or on the participants list. Each distinct
avatar occurrence is its own region.
3. display_names — Text username/nickname labels directly next to or above
message bubbles (sender names, distinct from the header title).
RULES:
- Return ONLY the elements listed above.
- Each element occurrence must be its own region.
- Cover the full visible area with a small amount of padding.
- If an element type is not visible, return an empty list for that key.
- Use normalized coordinates (0-1000) where (0,0) is top-left and (1000,1000) is bottom-right.
- Coordinate order: y_min, x_min, y_max, x_max (top, left, bottom, right).
- All values must be integers between 0 and 1000.
Respond ONLY with a JSON object using this exact schema (no extra text outside the JSON):
{
"chat_names": [{"y_min": int, "x_min": int, "y_max": int, "x_max": int}],
"profile_pics": [{"y_min": int, "x_min": int, "y_max": int, "x_max": int}],
"display_names": [{"y_min": int, "x_min": int, "y_max": int, "x_max": int}]
}
请省略用户未请求的元素对应键(参见下方 元素选择 章节)。
2c. 对该图像执行像素化处理
将步骤 2b 得到的 JSON 内容通过 --bbox-json 参数传入。全程不读取或写入任何 API 密钥。
BBOX='' "$PYTHON" "$CHAT_PIXELATE_PATH/process.py" \ "$IN_DIR" \ "$OUT_DIR" \ --bbox-json "$BBOX" \ [OPTIONS] # 参见下方“元素选择”与“选项配置”章节
请在继续下一步前,对所有图像完整执行 2a–2c 步骤。
3. 向用户返回结果
ls "$OUT_DIR/"*_pixelated.png
请将 $OUT_DIR/ 目录下所有处理完成的图像作为附件发送或共享给用户。
元素选择
将用户意图翻译为 --elements 参数。默认值(不指定该参数)将对全部三类元素进行像素化处理。
| 用户表述(英文 / 中文) | --elements 参数 |
|---|---|
| all / default / 全部 / 默认 / 全部打码 | (省略该参数 — 默认处理全部三类) |
| chat name only / 只隐藏聊天名称 | --elements chat_name |
| profile pics only / 只隐藏头像 | --elements profile_pic |
| display names only / 只隐藏昵称 / 只隐藏用户名 | --elements display_name |
| avatars and display names / 隐藏头像和昵称 | --elements profile_pic,display_name |
| chat name and avatars / 隐藏聊天名称和头像 | --elements chat_name,profile_pic |
| chat name and display names / 隐藏聊天名称和昵称 | --elements chat_name,display_name |
当用户未请求全部三类元素时,请在步骤 2 的边界框 JSON 提示词中省略未使用的键,以降低噪声干扰。
各元素定义:
- chat_name:顶部导航栏中的标题文字(群组名、联系人名、频道标题)
- profile_pic:位于消息气泡旁、页眉中或成员列表里的圆形/圆角头像图片
- display_name:位于消息气泡旁或上方的文本型用户名/昵称标签
选项配置
| 用户表述(英文 / 中文) | 参数 |
|---|---|
| soft blur / mist effect / 模糊效果 / 雾化(默认) | --pixel-mode A (默认) |
| block / mosaic / pixelate blocks / 马赛克 / 方块效果 | --pixel-mode B |
完整示例(可直接复制粘贴)
处理两张图像,每张图像均进行独立的、基于单图的边界框分析:
# (假设已完成环境准备,且已导出 CHAT_PIXELATE_PATH 与 PYTHON 变量)
JOB_ID="job_$(date +%s)"
OUT_DIR="/tmp/chat_pixelate_out_$JOB_ID"
mkdir -p "$OUT_DIR"
# --- 图像 1:screenshot_a.png ---
IN_A="/tmp/chat_pixelate_in_${JOB_ID}_a"
mkdir -p "$IN_A"
cp "$HOME/.openclaw/media/inbound/screenshot_a.png" "$IN_A/"
# (使用您的视觉模型分析 screenshot_a.png,捕获 JSON 并赋值给 BBOX_A)
BBOX_A='{"chat_names":[{"y_min":20,"x_min":100,"y_max":80,"x_max":900}],"profile_pics":[{"y_min":150,"x_min":10,"y_max":220,"x_max":80}],"display_names":[{"y_min":160,"x_min":90,"y_max":190,"x_max":350}]}'
"$PYTHON" "$CHAT_PIXELATE_PATH/process.py" "$IN_A" "$OUT_DIR" --bbox-json "$BBOX_A"
# --- 图像 2:screenshot_b.png --- (需单独分析;各元素位置不同)
IN_B="/tmp/chat_pixelate_in_${JOB_ID}_b"
mkdir -p "$IN_B"
cp "$HOME/.openclaw/media/inbound/screenshot_b.png" "$IN_B/"
# (使用您的视觉模型分析 screenshot_b.png,捕获 JSON 并赋值给 BBOX_B)
BBOX_B='{"chat_names":[{"y_min":10,"x_min":200,"y_max":70,"x_max":800}],"profile_pics":[],"display_names":[{"y_min":200,"x_min":60,"y_max":240,"x_max":400}]}'
"$PYTHON" "$CHAT_PIXELATE_PATH/process.py" "$IN_B" "$OUT_DIR" --bbox-json "$BBOX_B"
echo "=== 输出图像 ==="
ls "$OUT_DIR/"*_pixelated.png
更多示例
# 仅对一张图像中的头像进行模糊处理 — JSON 中省略未使用的键
IN_IMG="/tmp/chat_pixelate_in_${JOB_ID}_img"
mkdir -p "$IN_IMG"
cp "$HOME/.openclaw/media/inbound/chat.png" "$IN_IMG/"
BBOX='{"profile_pics":[{"y_min":150,"x_min":10,"y_max":220,"x_max":80}]}'
"$PYTHON" "$CHAT_PIXELATE_PATH/process.py" "$IN_IMG" "$OUT_DIR" \
--elements profile_pic \
--bbox-json "$BBOX"
# 隐藏聊天名称与昵称,采用马赛克样式
BBOX='{"chat_names":[{"y_min":0,"x_min":100,"y_max":60,"x_max":900}],"display_names":[{"y_min":160,"x_min":90,"y_max":190,"x_max":350}]}'
"$PYTHON" "$CHAT_PIXELATE_PATH/process.py" "$IN_IMG" "$OUT_DIR" \
--elements chat_name,display_name \
--pixel-mode B \
--bbox-json "$BBOX"
故障排查
| 现象 | 原因 | 解决方法 |
|---|---|---|
--bbox-json ... but N images were found |
启用 --bbox-json 时输入目录中存在多个图像 |
为每张图像使用独立的 $IN_DIR,并对每张图像单独运行一次 process.py |
python3 -m venv 失败 |
缺少 venv 模块 | 运行 apt-get install -y python3-venv 后重新执行环境准备 |
git clone 失败 |
未安装 git 或无网络连接 | 运行 apt-get install -y git 或检查网络连通性 |
No images found in input directory |
复制步骤失败 | 执行 ls $IN_DIR/ 检查,并确认文件名完全一致 |
图像未经修改即输出,摘要中显示 SKIPPED |
JSON 解析失败 | 检查控制台打印的警告信息;验证 bbox JSON 格式是否合法 |
| 像素化区域错误 | 边界框坐标不准确 | 重新分析图像并调整坐标;可尝试使用 --pixel-mode B |
热门AI工具
相关专题
本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。
0
2026.10.22
本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。
0
2026.10.22
本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。
0
2026.10.22
本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。
0
2026.10.22
本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。
0
2026.10.22
本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。
0
2026.10.22
本专题讲解Golangci-lint的安装、初始化、基础命令和首次代码检查,覆盖本地环境、Docker及多平台用法,帮助Go开发者快速上手。
0
2026.10.22
PHP2Shell漏洞是什么,哪些PHP版本和运行环境会受到影响,服务器应该如何检测与修复?本专题提供版本自查脚本、Linux与Docker升级命令、PHP-FPM和Apache排查步骤,以及修复验证、临时缓解和应急响应方案。
0
2026.10.22
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.5万人学习
共6课时 | 54.7万人学习
