DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins

dsh-plugin-control-your-capture

Plugin Control Your Capture

Add capture tools to DSH: capture_screenshot captures a monitor, window, or region in physical pixels and returns the image directly to the model; capture_recording records a monitor or physical-pixel region as MP4 in a Windows single-screen console; never upscale.

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add dsh-plugin-control-your-capture@0.3.0
READMECompatibilityVersions
Control Your Capture cover: screenshot and screen-recording tools for DSH, captured at physical pixels

Compatibility and provenance

Plugin Control Your Capture is published as dsh-plugin-control-your-capture and currently resolves to version 0.3.0. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
any
Release source
npm
Registry updated
10/30/2026

Versions

0.3.0stable
10/30/2026
0.2.2stable
10/27/2026
0.2.0stable
10/27/2026
Show 1 more versionCollapse versions
0.1.3stable
10/26/2026

Related plugins

Loading related plugins…

Latest
0.3.0
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
548.1 kB
Files
28
Surface
any
License
MIT
Source
npm
GitHub
★ 5
Weekly downloads
0
Last push
10/30/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue

Related plugins

More verified plugins in vision-media.

Experimental Voice Input Bundle@deepseek-ai/dsh-experimental-voice-input-bundleExperimental voice input with local SenseVoice; downloads its runtime on first useModlens@liustack/modlensPlug-in vision for text-only LLMs, powered by the free Antigravity CLIImage Gendsh-image-genBring ChatGPT-like image generation to DeepSeek Harness — Gemini, OpenAI, Seedream, DashScope, local ComfyUI & more.Ab Ocrdsh-ab-ocr--- description: "The out-of-tree ocr tool: recognizes a scanned PDF or image page by page, merges the pages in order only after the last one, and saves one Markdown document with the heading levels the model decided." kind: "package-reference" ---

README

Control Your Capture cover: screenshot and screen-recording tools for DSH, captured at physical pixels

dsh-plugin-control-your-capture

Screenshot and screen-recording tools for DSH: capture a display, a window or a region at physical pixels, and record a display or region to MP4 on a single-display Windows console session.

中文 · panel plugin v0.3.0 · skill v0.3.0

Overview

dsh-plugin-control-your-capture is a DSH host plugin. It hands two capture abilities directly to the agent: screenshots (display / window / region) and screen recording (a display or a physical-pixel region on a single-display Windows console session). Capture happens at physical pixels and never upscales.

It solves concrete "look at this / record this" problems: capturing at logical pixels on a high-DPI screen makes text soft, and post-processing cannot restore it; hand-written ffmpeg commands tend to pick up low-frame-rate fallbacks, overwrite files and leave stray processes. The plugin puts both paths behind controlled tool calls with structured failures.

Intended for agents and users who need reliable, sharp screen evidence inside DSH, or a decodable MP4 of a session. Not for: offscreen page rendering, video editing, or audio capture.

Features

  • Three tools, one execution path: capture_screenshot, capture_probe, capture_recording; the skill contains no scripts and there is no second capture implementation.
  • Native physical pixels: captures at the size the backend reports; maxWidth may downscale exactly once and the tool never upscales. Measured here on a 3072x1920 display at 200% scaling.
  • Two sizes, kept distinct: width / height are the file on disk, image.width / image.height are what the model sees; a downscale surfaces as model_image_downscaled.
  • Recording with a quality gate: fixed libx264 / veryfast / CRF 14 / yuv420p / +faststart, no audio; stop runs FFprobe (-count_frames) plus a full decode and refuses to publish on failure.
  • Atomic and no-clobber: same-directory hidden unique temp file; publishing never overwrites, a taken name becomes out_renamed.
  • Structured failures: every failure carries code / message / details / hint; nothing degrades silently.
  • Zero runtime dependencies: Node built-ins only; FFmpeg / FFprobe are explicitly probed external capabilities, and missing them only affects recording.

The same screen region at the same moment, changing only the sampling resolution (left: physical pixels 800x500; right: logical pixels 400x250 upscaled 2x):

Physical-pixel capture vs logical-pixel upscale: the left text is sharp, the right text is soft and 1px lines smear into grey

Support matrix

Grades: stable has real-machine evidence plus image review; beta is complete but only partly measured; experimental has no real-machine evidence; unsupported is rejected explicitly, never silently downgraded.

Platform / sessionShot displayShot windowShot regionRec displayRec region
Windows 10/11 console (single display)betabetabetabetabeta
Windows multi-display / mixed DPI / HDRexperimentalexperimentalexperimentalunsupportedunsupported
Windows RDP / session 0 / secure desktopexperimentalunsupportedexperimentalunsupportedunsupported
macOS (Retina / non-Retina)experimentalexperimentalexperimentalunsupportedunsupported
Linux X11experimentalexperimentalexperimentalunsupportedunsupported
Linux Waylandexperimentalunsupportedexperimentalunsupportedunsupported
headless / CIno_display——no_displayno_display
target:"all"—————
  • This matrix matches capture_probe's targets / recording.targets; any mismatch is a defect.
  • Measured on this machine (Windows 11, 3072x1920, 200%): screenshots work for display/region; recording produced display 3072x1920 at 57.48fps and region 800x500 at 57.45fps, 1 video / 0 audio, -xerror full decode exit 0, faststart effective; a 279.6s recording completed normally, beyond the old 120s timeout.
  • Only measured platform x target pairs get promoted; no platform is claimed to work everywhere.

Installation

Requirement: DSH installed. The plugin itself has no runtime dependency; recording additionally needs an external FFmpeg (with the ddagrab filter and libx264) and FFprobe — screenshots do not.

dsh plugin add dsh-plugin-control-your-capture
  • A fresh bundle can take effect through HMR; replacing an installed package requires a DSH restart to load the new module.
  • On mount it registers three tools and installs the thin capture-sharp guidance skill into the global skill directory (default $DSH_HOME/skills).
  • To check the environment, have the agent call capture_probe and read targets, recording.missing and whether the output root is writable.

Usage

Screenshots: capture_screenshot

ParameterValuesNotes
targetdisplay / window / regionDefaults to display; no all
displayopaque id from capture_probeDefaults to the display holding the active window
windowbackend-resolvable window idOnly for window; a missing window fails with window_not_found
region{x, y, width, height}Physical pixels relative to the display origin, never across displays
outworkspace-relative pathDefaults to output/capture/<uuid>.png; must stay inside the workspace
maxWidthpositive integerDownscales at most once, never upscales

Cropping a region to read fine text:

{ "target": "region", "region": { "x": 600, "y": 200, "width": 1600, "height": 900 } }

Recording: capture_recording

ParameterValuesNotes
actionstart / status / stop / cancelRequired
recordingIdopaque id returned by startRequired for status/stop/cancel; not allowed on start
targetdisplay / regionDefaults to display; window / all unsupported
region{x, y, width, height}Physical pixels, display-relative, even width/height, fully on screen
fps30 / 60Defaults to 60
drawMousebooleanDefaults to true
outworkspace-relative .mp4Defaults to output/capture/<uuid>.mp4
{ "action": "start", "target": "display", "fps": 60, "drawMouse": true }
  • start returns quickly with a recordingId; path appears only on completed — starting / recording / stopping carry no deliverable.
  • One active recording per instance; other agents in the same workspace (including subagents) can cooperate with the same recordingId; a different workspace gets recording_workspace_mismatch; ids do not survive a restart.
  • stop waits for muxing, FFprobe and a full decode, so it is slower than ordinary calls; a failure throws and delivers nothing.

Page screenshots vs screen screenshots

This plugin captures what is really displayed on the desktop (physical pixels, never upscaled), so decide first:

  • The page is not on screen (headless browser, offscreen rendering, minimized window): the plugin cannot see it and that is not its job. Use the rendering side (e.g. CDP) with deviceScaleFactor set to capture_probe's displays[].scaleFactor (2 on this machine), or Page.captureScreenshot with clip.scale; emit PNG and do not downscale afterwards.
  • The page / window is on screen: use this plugin with target:"window" or target:"display"; for fine text use target:"region" to crop a 1:1 area.
  • The image looks small to the model: the attachment store downscales it (3072x1920 → about 2590x1619, model_image_downscaled); the file on disk stays sharp.

Configuration

Optional keys live under this plugin's config: line; all may be omitted:

KeyDefaultNotes
skillRoot$DSH_HOME/skillsSkill install root, must be an absolute path
skillInstalltruefalse skips skill installation; tools still work
skillCleanupOnUnloadfalseOnly true removes the skill this plugin installed on unload/exit
timeoutMs20000Per-call timeout for screenshots/short commands; does not limit a whole recording
maxWidthno scalingService-level default downscale width, overridable per call
recordingMaxDurationSec3600Maximum recording length, integer 1–86400; auto-finalizes at the limit

An invalid config makes the plugin fail (fiber FAILED); defaults are never silently substituted.

Project structure

lib/index.js                 host entry: config validation, tool registration, cleanup
lib/service.js               the only spawn/kill point: screenshots, short and managed processes
lib/recording-service.js     recording sessions: state machine, single active slot, validation, publishing
lib/recording/windows.js     Windows DDA argument plan, capability probing, FFprobe quality judgement
lib/tool.js                  schemas and rendering for capture_screenshot / capture_probe
lib/recording-tool.js        schema and rendering for capture_recording
lib/adapters/{windows,macos,linux}.js  platform backends: raw bytes only
lib/native/windows-shot.ps1  DPI-aware Windows native helper
lib/png.js / lib/paths.js    PNG validation, output root, unique naming and atomic writes
skill/capture-sharp/         thin guidance skill (no scripts; staged from the skill source by the gate)

Known limitations

  • Recording is limited to display / region on a single-display Windows console: no audio, no window / multi-display / HDR / RDP / session 0, and no recording on macOS or Linux; yuv420p is lossy and not pixel-identical to PNG, with no lossless mode.
  • Recording needs external FFmpeg / FFprobe (ddagrab + libx264): when missing the call fails with backend_unavailable and lists each item in missing; nothing is downloaded or bundled.
  • After a hard kill (crash / force-quit) orphan FFmpeg processes and .tmp-*.mp4 files are not guaranteed to be cleaned (0.3.0 has no Job Object).
  • start means "the process is alive and the temp file is non-empty (header)"; FFmpeg output buffering can keep video data off disk until stop, and delivery quality is enforced by the stop FFprobe + full-decode validation.
  • target:"window" can return a blank image for some GPU-composited windows (PrintWindow cannot reach the compositor layer); the result then carries content_uniform — switch to display or region.
  • macOS / Linux screenshots have no real-machine evidence and stay experimental; Wayland may prompt for permission.

Releases

  • Version history and per-release changes live in CHANGELOG.md.
  • Upgrade path: uninstall the old version, install the new one, restart DSH (DSH does not auto-update installed plugins).
  • This repository has not published a GitHub Release or an npm version yet; entries will be added here once it does.

License

MIT.