Label Studio 快捷键完全指南:查看、自定义与<Shortcut>标签实战
【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio
Label Studio 提供了一套开箱即用的键盘快捷键(Hotkeys),帮助标注员在标注图像、文本、音频、视频与时间序列数据时减少鼠标操作、提升标注吞吐量。本指南以 docs/source/guide/hotkeys.md 为核心,完整讲解如何在标注界面查看与开关快捷键、在账号页面逐项重映射、通过EDITOR_KEYMAP环境变量以 JSON 方式批量覆盖映射,以及使用<Shortcut>标签为标注员注入预定义文本片段,并深入源码揭示这些配置从前端注册到后端注入的完整链路。
一、在标注编辑器中查看与开关内置快捷键
打开任意项目的标注界面后,点击编辑器右上角的设置(settings)图标,即可查看全部内置快捷键的列表,并可按需启用或禁用某条快捷键映射。
两条跨平台使用须知:
- 如果配置中指定了
enter,在 Mac 键盘上应使用return;配置中的backspace对应 Mac 的delete,alt对应 Mac 的option。 - 该查看/开关能力由前端快捷键注册机制支撑:所有具名快捷键在运行时通过 web/libs/editor/src/core/Hotkey.ts 注册与查询,并在当前操作系统下自动选择
mac字段或key字段作为实际生效组合键。
二、内置快捷键全量清单
内置快捷键的“事实来源”是编辑器源码中的 web/libs/editor/src/core/settings/keymap.json,其中每条映射形如"action:id": { "key": "...", "mac": "...", "description": "..." },mac字段缺省时表示 Mac 与 Windows/Linux 共用key。以下按功能域分类整理(均以该文件实际内容为准)。
标注提交与导航
| 快捷键 ID | 按键(非 Mac / Mac) | 动作 |
|---|---|---|
annotation:submit | ctrl+enter/command+enter | 提交标注 |
annotation:skip | ctrl+space/alt+enter | 跳过任务 |
annotation:undo | ctrl+z/command+z | 撤销 |
annotation:redo | ctrl+shift+z/command+shift+z | 重做 |
region:delete-all | ctrl+backspace/command+backspace | 删除全部区域 |
region:unselect | u | 取消选择区域 |
region:exit | escape | 退出关系模式并取消选择区域 |
region:cycle | alt+. | 循环切换区域 |
region:duplicate | ctrl+d/command+d | 复制选中区域 |
region:delete | backspace | 删除选中区域 |
segment:delete | delete | 删除选中区域 |
region:focus | enter | 聚焦第一个可聚焦区域 |
region:relation | alt+r | 在区域间创建关系 |
region:visibility | alt+h | 切换选中区域可见性 |
region:visibility-all | ctrl+h/command+h | 切换所有区域可见性 |
region:lock | alt+l | 锁定选中区域 |
region:meta | alt+m | 编辑选中区域的元数据 |
图像工具
| 快捷键 ID | 按键 | 动作 |
|---|---|---|
tool:move | V | 选择移动工具 |
tool:rect | R | 选择矩形标注工具 |
tool:rect-3point | shift+R | 三点法绘制旋转矩形 |
tool:ellipse | O | 选择椭圆工具 |
tool:polygon | P | 选择多边形工具 |
tool:vector | P | 选择矢量工具 |
tool:key-point | K | 选择关键点工具 |
tool:brush | B | 选择笔刷工具 |
tool:eraser | E | 选择橡皮擦工具 |
tool:magic-wand | W | 智能选区魔棒 |
tool:auto-detect | M | 自动检测并建议区域 |
tool:pan-image | H | 平移图像 |
tool:zoom-in | ctrl+plus/command+plus | 放大 |
tool:zoom-out | ctrl+minus/command+minus | 缩小 |
tool:zoom-to-fit | shift+1 | 缩放至适配整个图像 |
tool:zoom-to-actual | shift+2 | 缩放至 100% 实际尺寸 |
tool:rotate-left | alt+left | 图像左旋 90° |
tool:rotate-right | alt+right | 图像右旋 90° |
tool:increase-tool | ] | 增大工具尺寸 |
tool:decrease-tool | [ | 减小工具尺寸 |
image:prev/image:next | ctrl+left/ctrl+right(Mac 用command) | 上一张 / 下一张图片 |
音频与媒体控制
| 快捷键 ID | 按键(非 Mac / Mac) | 动作 |
|---|---|---|
audio:playpause | ctrl+p/command+p | 播放 / 暂停 |
audio:back | ctrl+b/command+b | 后退一秒 |
audio:step-backward/audio:step-forward | alt+a/alt+d | 后退 / 前进一步 |
media:playpause | ctrl+alt+space/command+alt+space | 播放 / 暂停 |
media:step-backward/media:step-forward | alt+left/alt+right | 后退 / 前进一步 |
视频控制
| 快捷键 ID | 按键(非 Mac / Mac) | 动作 |
|---|---|---|
video:keyframe-backward/video:keyframe-forward | ctrl+alt+left/ctrl+alt+right(Mac 用command) | 上一关键帧 / 下一关键帧 |
video:backward | alt+left | 后退 |
video:forward | shift+alt+right | 前进 |
video:rewind | shift+ctrl+alt+left(Mac 用shift+command+alt+left) | 跳到第一帧 |
video:fastforward | shift+ctrl+alt+right(Mac 用shift+command+alt+right) | 跳到最后一帧 |
video:hop-backward/video:hop-forward | shift+alt+left/shift+alt+right | 快速跳回 / 快进 |
时间序列
| 快捷键 ID | 按键 | 动作 |
|---|---|---|
ts:grow-left/ts:grow-right | left/right | 向左 / 向右扩大区域 |
ts:shrink-left/ts:shrink-right | alt+left/alt+right | 向左 / 向右缩小区域 |
ts:grow-left-large/ts:grow-right-large | shift+left/shift+right | 大步向左 / 向右扩大区域 |
ts:shrink-left-large/ts:shrink-right-large | shift+alt+left/shift+alt+right | 大步向左 / 向右缩小区域 |
ts:pan-left/ts:pan-right | left/right | 平移视图 |
ts:pan-left-large/ts:pan-right-large | shift+left/shift+right | 大步平移视图 |
短语标注与分页
| 快捷键 ID | 按键(非 Mac / Mac) | 动作 |
|---|---|---|
phrases:next-phrase/phrases:previous-phrase | ctrl+down/ctrl+up(Mac 用command) | 下一短语 / 上一短语 |
phrases:next-region/phrases:previous-region | ctrl+left/ctrl+right(Mac 用command) | 当前短语内选择下一 / 上一区域 |
phrases:select_all_annotate | ctrl+shift+a/command+shift+a | 全选并标注当前短语 |
repeater:next-page/repeater:previous-page | alt+right/alt+left | 下一页 / 上一页 |
annotation:toggle-auto-annotation | shift+alt+a | 切换自动标注 |
三、从账号页面自定义全局快捷键
除了在编辑器内逐项开关,你可以在Account & Settings > Hotkeys页面(对应文档 docs/source/guide/user_account.md 的 Hotkeys 小节)为当前账号定制全局快捷键:
- Export Hotkeys:将当前自定义快捷键映射导出为 JSON 文件,便于分享给其他 Label Studio 用户。
- Import Hotkeys:粘贴 JSON 格式的自定义快捷键映射完成导入。
- Reset to Defaults:一键将所有快捷键恢复为默认值。
设置方式:点击每个动作旁列出的默认快捷键,在弹出提示后按下你希望使用的新组合键即可。每个快捷键可以是单个字符键(数字、字母、符号),也可以是字符键与多个控制键(如Shift、Control、Option等)的组合。
从源码看,账号级自定义映射以user.custom_hotkeys的形式随页面注入前端:label_studio/templates/base.html 中通过var __customHotkeys = {{ user.custom_hotkeys|... }}将其序列化到window.APP_SETTINGS.user.customHotkeys,并与产品默认映射在运行时由前端合并生效;custom_hotkeys字段定义于 label_studio/users/models.py。
四、用EDITOR_KEYMAP环境变量批量覆盖映射
管理员或自托管用户可以在.env文件或启动 Label Studio 时设置EDITOR_KEYMAP环境变量,用一段合法的 JSON 覆盖指定动作的快捷键映射。例如将“提交标注”改为shift+s:
EDITOR_KEYMAP='{"annotation:submit":{"key": "shift+s","description": "My Custom Submit Hotkey!"}}'要点说明:
- 该变量覆盖同 ID 动作的现有映射;JSON 中的
key用于非 Mac 平台,如需区分 Mac 可额外提供mac字段。 - 该变量只能覆盖已有动作的快捷键组合,不能用来删除现有快捷键,也不能新增全新的快捷键动作——新增/删除动作需要在前端
Hotkey注册层完成。 - 若
key与mac同时存在,前端按isMacOS()自动选择mac ?? key(见 web/libs/editor/src/core/Hotkey.ts)。
环境变量的后端注入链路
从源码可以完整还原该变量的生效路径:
- label_studio/core/settings/base.py 中定义
EDITOR_KEYMAP = json.dumps(get_env('EDITOR_KEYMAP')),即从环境变量读取原始 JSON 字符串并转为 Django 设置项(label_studio/core/settings/label_studio.py 同样引用)。 - label_studio/core/middleware.py 在请求中间件中将其附加到
request.editor_keymap。 - label_studio/templates/base.html 渲染时执行
JSON.parse({{ settings.EDITOR_KEYMAP|safe }}),把映射放进window.APP_SETTINGS.editor_keymap。 - 前端编辑器启动时读取该映射合并进
Hotkey.keymap,覆盖同名动作的默认组合键。
对应的前端测试 web/libs/editor/src/core/Hotkey.setKeymap.test.ts 验证了setKeymap的覆盖语义:传入部分映射后annotation:submit的key变为自定义值,而未被覆盖的其它动作(如audio:playpause)保持默认值不变。
五、使用<Shortcut>标签为标注员注入预定义内容
<Shortcut>是标签配置(Labeling Config)中的专用标签,用于为标注员定义一个“快捷片段”:标注员既可以直接点击快捷按钮,也可以按下对应热键,把预定义文本插入当前标注内容。官方文档见 docs/source/tags/shortcut.md。
适用数据类型:Audio、Image、HTML、Paragraphs、Text、Time series、Video。
工作原理:<Shortcut>必须嵌套在控制类标签内部(如<TextArea>、<Labels>),快捷方式只在控制标签内生效。
参数说明
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
value | string | —(必填) | 快捷键插入的具体值 |
alias | string | — | 快捷按钮上显示的别名 |
hotkey | string | — | 触发该快捷键的组合键 |
background | string | "#333333" | 按钮背景色(十六进制) |
完整示例
以下配置展示了一个图像描述任务:标注员在图片上方的文本框中写描述时,可通过点击按钮或按Ctrl+1/Ctrl+2快速插入 “CAR” 或 “AIRPLANE”:
<View> <Image name="image" value="$captioning"/> <Header value="Describe the image:"/> <TextArea name="caption" toName="image"> <!-- Inserts “CAR” when clicked or on Ctrl+1 --> <Shortcut alias="Car" value="CAR" hotkey="ctrl+1" background="#333333"/> <!-- Inserts “AIRPLANE” when clicked or on Ctrl+2 --> <Shortcut alias="Airplane" value="AIRPLANE" hotkey="ctrl+2" background="#FFEE00"/> </TextArea> </View>再比如音频转写场景中,为<TextArea>配置一个把 “SILENCE” 写入文本区的快捷按钮:
<View> <TextArea name="txt-1"> <Shortcut alias="Silence" value="SILENCE" hotkey="ctrl+1" background="#3333333" /> </TextArea> </View>注意:<Shortcut>的默认背景色为灰色,可通过background参数以文本或十六进制格式修改。
六、三种自定义方式的选型建议
| 方式 | 生效范围 | 适用场景 |
|---|---|---|
| 编辑器设置图标 | 当前用户在编辑器内 | 快速查看/开关默认快捷键 |
| Account & Settings > Hotkeys | 当前账号(跨项目) | 个人习惯定制,支持导出/导入/重置 |
EDITOR_KEYMAP环境变量 | 服务端全局(所有用户) | 团队统一规范、部署时批量覆盖默认映射 |
<Shortcut>标签 | 单个项目的标注配置 | 为特定任务注入预定义文本片段 |
需要强调的能力边界:前三种方式都只能覆盖keymap.json中已存在的动作,无法删除或新增动作;若需要全新的快捷键动作,必须在前端 web/libs/editor/src/core/Hotkey.ts 的注册层扩展。而<Shortcut>标签提供的“插入预定义内容”能力则独立于全局快捷键系统,属于标注配置层面的快捷输入,两者互补使用可获得最佳的标注提速效果。
【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考