# Capture & Record

> Capture screenshots and record video - full screen, a single window, or a selected region.

| | |
|---|---|
| Version | 1.0.2 |
| Category | Media |
| Permissions | filesystem.write |
| Depends on | notification, ai-chat |

# Capture & Record

Chụp ảnh và quay video màn hình - toàn màn hình, cửa sổ, vùng chọn

**Type:** `backend` — see `.claude/skills/kazuo-create-plugin/references/plugin-examples.md`

## Files

- `manifest.json` — metadata, `defaultSettings`, `defaultWidgetConfig`
- `widget.html` / `js/widget.js` / `css/widget.css` — chọn chế độ (toàn màn hình/cửa sổ/vùng chọn),
  nút chụp ảnh, nút bắt đầu/dừng quay video, nút thu mic. Nút Chụp/Quay **2 bước**: bấm lần 1 chọn
  (nút kia bỏ chọn), bấm lại nút đang chọn mới chạy. Settings overlay tự chứa (⚙) có ô nhập phím tắt.
- `settings.html` / `js/settings.js` / `css/settings.css` — cùng field/hành vi với overlay trên, dùng
  bởi Plugin Manager và cửa sổ pop-out
- `locales/en.json5` / `locales/vi.json5` — toàn bộ text UI
- `main/index.ts` — IPC glue (`list-sources`, `capture`, `start-recording`, `stop-recording`,
  `choose-folder`, `list-displays`, `set-position`, `set-shortcut`, `ensure-shortcut`). Thư mục lưu
  theo hệ điều hành + phím tắt toàn cục mở chụp Vùng chọn (`globalShortcut`).
- `main/capture.ts` — chụp ảnh qua `desktopCapturer` (không cần stream/BrowserWindow riêng), tự động
  copy ảnh vào clipboard sau khi lưu file (không áp dụng cho video). `saveDataUrlPng` lưu ảnh vùng
  chọn đã ghép chú thích; `captureDisplayDataUrl` đóng băng ảnh nền cho overlay.
- `main/region-picker.ts` + `main/overlay.html` + `main/overlay-preload.ts` — overlay chọn vùng +
  **chú thích** (vẽ nhiều hình chữ nhật/tròn ghi thẳng vào ảnh), 1 cửa sổ overlay/màn hình
  (multi-monitor), theo mẫu "đóng băng màn hình trước" rồi ghép ảnh bằng canvas
- `main/recorder.ts` + `main/recorder.html` + `main/recorder-preload.ts` — quay video WebM qua
  `getUserMedia({chromeMediaSource:'desktop'})` + `MediaRecorder` trong 1 cửa sổ ẩn

Xem chi tiết cách hoạt động + giới hạn đã biết tại `.claude/features/capture-record.md`.

## Default settings

- `platformFolders[<os>]` — thư mục lưu **theo hệ điều hành** (`win32`/`darwin`/`linux`), mỗi OS giữ
  đường dẫn riêng. Giá trị của OS hiện tại được mirror ra 2 key phẳng `screenshotFolder`/`videoFolder`
  để widget + `capture.ts` đọc như cũ. Lần đầu tự resolve `Pictures/CaptureRecord`, `Videos/CaptureRecord`;
  bản cài cũ (chỉ có key phẳng) được migrate sang slot của OS hiện tại.
- `captureShortcut` — phím tắt toàn cục mở chụp Vùng chọn, mặc định `Ctrl+Shift+S` (Win+Shift+S bị
  Windows chiếm dụng nên không dùng được).
- `micEnabled` — mặc định: `true` (bật/tắt bằng nút 🎤 trên widget).

## Giới hạn đã biết

- Quay video ở chế độ "Vùng chọn" hiện tự chuyển thành quay toàn màn hình (chưa hỗ trợ crop video
  real-time theo vùng). Chú thích chỉ áp dụng cho **ảnh** vùng chọn, không áp dụng cho video.
- Phím tắt toàn cục có thể bị host `globalShortcut.unregisterAll()` xoá khi bật/tắt plugin khác; widget
  tự đăng ký lại qua `ensure-shortcut` mỗi lần `settingsChanged` (còn 1 khe hở khi widget bị ẩn).
- Quyền microphone cấp hệ điều hành (đặc biệt macOS) nằm ngoài khả năng của plugin.

## Test

Open Kazuo AI → Plugin Manager — this plugin appears automatically (the host scans `plugins-library/`
on its own, no registration needed) → Install → Enable. Thử đủ 4 luồng: chụp toàn màn hình, chụp cửa
sổ, chụp vùng chọn, quay video (bật/tắt mic).

After editing `main/*.ts`, recompile before testing: `npx tsc -p tsconfig.plugins.json` (run from the
project root).
