VideoRecompress Studio
Reference, version 2026.2.25

VideoRecompress Studio CLI and MCP reference

videorecompress is the command line of VideoRecompress Studio, installed with the desktop app. videorecompress serve runs its MCP server for AI agents. This page lists every command, option, exit code and MCP tool.

videorecompress <command> [arguments] [options]
videorecompress recompress video.mp4 -o compressed --preset phone_archive

Generated from videorecompress catalog, version 2026.2.25. Every command also has --help. Older spellings of some commands and options still work, so existing scripts keep running, but this page and --help leave them out. The same reference is on GitHub: cli.md and mcp-server.md.

Commands

CommandWhat it does
videorecompress batch <input-dir>Batch recompress all videos in a directory.
videorecompress catalogPrint every CLI command and MCP tool as JSON (for AI agents, docs and the website).
videorecompress formatsList the containers and codecs it reads and writes.
videorecompress info <file>Show video file information (codec, resolution, duration, HDR, audio, subtitles).
videorecompress presetsList available recompression presets.
videorecompress profileSave, load, or validate recompression profiles.
videorecompress profile load <file>Load and display a profile from JSON.
videorecompress profile save <file>Build a profile from options and save to JSON.
videorecompress profile validate <file>Validate a profile JSON file.
videorecompress recompress <input>Recompress a single video file.
videorecompress register <email> <key>Register your license key.
videorecompress serveStart MCP server for AI agent integration.
videorecompress statusShow tool availability, license state, and GPU info.
videorecompress watch <dir>Monitor a folder and auto-recompress new video files.

Output options

These options work the same way in the four ContentaSoft command lines. catalog and serve take none of them: catalog always prints JSON and serve keeps stdout for the MCP protocol.

OptionDescription
--jsonPrint one JSON object on stdout (success, exitCode, error, warnings, errors, outputs + the command's fields); nothing else goes to stdout.
--plainPlain text: no colours, no escape codes, ASCII tables. Automatic when stdout is a pipe or a file, or when NO_COLOR is set.
--quietPrint errors only.
--verboseVerbose output: details and, on an error, the stack trace.
--progressWith --json: before the result object, one line per finished item, {"type":"progress","file":NAME,"completed":N,"total":T}.

Exit codes

The same table in the four ContentaSoft command lines. --help ends with it and catalog lists it.

CodeNameMeaning
0okOK: everything asked for was done.
1unexpected_errorUnexpected error (a bug or a broken install); see the log.
2invalid_argumentsInvalid arguments: unknown option, missing or malformed value; nothing was done.
3input_not_foundInput not found or unreadable; nothing was done.
4partial_failurePartial failure: some items succeeded, some failed.
5all_failedAll failed: no item succeeded.
6license_refusedLicense or trial refused the run.
130cancelledCancelled (Ctrl+C).

JSON output

With --json a command prints one JSON object on stdout and nothing else; logs go to stderr. Every object has these keys, beside the fields of the command itself:

KeyMeaning
successtrue when the run did everything it was asked to do
exitCodethe process exit code (see Exit codes)
errorone sentence when the run failed, otherwise null
warningsnotes about the run that did not stop it
errorsone entry per item that failed (a batch keeps going)
outputsthe files the run wrote

Trial keys, present only when they apply:

KeyMeaning
trialWatermarkedthe output carries the trial watermark
trialExportthe output is a trial export
trialNoticeone sentence about the trial, for the user
freeFilesRemainingfree full-quality files left on this computer
buyUrlwhere to buy a licence

With --json --progress a long command first prints one progress line per finished item (NDJSON), then the result object last. A script that wants only the result skips the lines that start with {"type":"progress". Progress keys:

KeyMeaning
typealways "progress"
filethe file that finished
completeditems finished so far
totalitems in the run

Command reference

videorecompress batch

Batch recompress all videos in a directory.

videorecompress batch <input-dir> [options]
ArgumentDescription
<input-dir>Path to the directory containing video files.
OptionTypeDescription
--includestring[]Only videos matching this pattern (e.g. "*.mp4"); repeat the option or separate patterns with ';' or ','.
--excludestring[]Leave out videos matching this pattern (same forms as --include).
--recursivebooleanInclude subdirectories.
--workersintegerNumber of parallel workers.
--reportstringWrite a CSV report, one row per input file (file, status, output, outputCodec, trialWatermarked, error).
--outputstringOutput directory.
--codecstringVideo codec: h264, h265, av1, vp9, copy.
--crfintegerConstant Rate Factor (0-63).
--quality-modestringQuality mode: crf, cbr, twopass.
--bitrateintegerTarget bitrate in kbps (for cbr/twopass).
--encoder-presetstringEncoder speed preset (ultrafast..veryslow, or an SVT-AV1 number 0-13; mapped to what each encoder accepts).
--presetstringNamed recompression preset to use as base settings (e.g. phone_archive — run 'videorecompress presets' for the list). Explicit flags override preset values.
--hw-accelstringHardware acceleration: auto, nvenc, qsv, amf, software.
--audio-modestringAudio mode: copy, reencode, remove.
--audio-codecstringAudio codec: aac, opus, mp3, flac, ac3, eac3.
--audio-bitrateintegerAudio bitrate in kbps.
--containerstringContainer format: mp4, mkv, webm.
--widthintegerTarget width (0 = keep original).
--heightintegerTarget height (0 = keep original).
--denoisestringDenoise: off, light, medium, strong.
--deinterlacestringDeinterlace: off, yadif, yadif-bob.
--watermark-textstringApply a text watermark.
--watermark-imagestringApply an image watermark (PNG/JPG path).
--watermark-positionstringWatermark position: TopLeft, TopCenter, TopRight, CenterLeft, Center, CenterRight, BottomLeft, BottomCenter, BottomRight.
--watermark-opacityintegerWatermark opacity 0-100.
--watermark-scaleintegerWatermark size as % of video width (5-100).
--trim-modestringTrim mode: none, skip-start, skip-end, keep-first, custom.
--trim-startnumberTrim start time in seconds (for custom range).
--trim-endnumberTrim end time in seconds (for custom range).
--trim-durationnumberTrim duration in seconds (for skip-start, skip-end, keep-first).
--fpsnumberTarget frame rate.
--fps-modestringFrame rate mode: auto, cfr, vfr.
--hdrstringHDR sources (HDR10, HLG): keep (stay 10-bit HDR where the codec can hold it; H.264 is always converted) or sdr (tone-map to SDR BT.709). SDR sources are not affected.
--overwritebooleanOverwrite existing output files.
--skip-existingbooleanSkip a file whose output already exists, so a re-run only does what is missing.
--profilestringLoad settings from a JSON profile file.
--measure-qualitybooleanMeasure SSIM/VMAF quality after encoding.

Output options: --json, --plain, --quiet, --verbose, --progress.

videorecompress catalog

Print every CLI command and MCP tool as JSON (for AI agents, docs and the website).

videorecompress catalog

videorecompress formats

List the containers and codecs it reads and writes.

videorecompress formats [options]
OptionTypeDescription
--inputbooleanShow what it reads only.
--outputbooleanShow what it writes only.

Output options: --json, --plain, --quiet, --verbose, --progress.

videorecompress info

Show video file information (codec, resolution, duration, HDR, audio, subtitles).

videorecompress info <file>
ArgumentDescription
<file>Path to the video file.

Output options: --json, --plain, --quiet, --verbose, --progress.

videorecompress presets

List available recompression presets.

videorecompress presets [options]
OptionTypeDescription
--presetstringShow full details for a specific preset by ID.

Output options: --json, --plain, --quiet, --verbose, --progress.

videorecompress profile

Save, load, or validate recompression profiles.

Subcommands: profile load, profile save, profile validate.

videorecompress profile load

Load and display a profile from JSON.

videorecompress profile load <file>
ArgumentDescription
<file>Path to the profile JSON file.

Output options: --json, --plain, --quiet, --verbose, --progress.

videorecompress profile save

Build a profile from options and save to JSON.

videorecompress profile save <file> [options]
ArgumentDescription
<file>Path to save the profile JSON file.
OptionTypeDescription
--outputstringOutput directory.
--codecstringVideo codec: h264, h265, av1, vp9, copy.
--crfintegerConstant Rate Factor (0-63).
--quality-modestringQuality mode: crf, cbr, twopass.
--bitrateintegerTarget bitrate in kbps (for cbr/twopass).
--encoder-presetstringEncoder speed preset (ultrafast..veryslow, or an SVT-AV1 number 0-13; mapped to what each encoder accepts).
--presetstringNamed recompression preset to use as base settings (e.g. phone_archive — run 'videorecompress presets' for the list). Explicit flags override preset values.
--hw-accelstringHardware acceleration: auto, nvenc, qsv, amf, software.
--audio-modestringAudio mode: copy, reencode, remove.
--audio-codecstringAudio codec: aac, opus, mp3, flac, ac3, eac3.
--audio-bitrateintegerAudio bitrate in kbps.
--containerstringContainer format: mp4, mkv, webm.
--widthintegerTarget width (0 = keep original).
--heightintegerTarget height (0 = keep original).
--denoisestringDenoise: off, light, medium, strong.
--deinterlacestringDeinterlace: off, yadif, yadif-bob.
--watermark-textstringApply a text watermark.
--watermark-imagestringApply an image watermark (PNG/JPG path).
--watermark-positionstringWatermark position: TopLeft, TopCenter, TopRight, CenterLeft, Center, CenterRight, BottomLeft, BottomCenter, BottomRight.
--watermark-opacityintegerWatermark opacity 0-100.
--watermark-scaleintegerWatermark size as % of video width (5-100).
--trim-modestringTrim mode: none, skip-start, skip-end, keep-first, custom.
--trim-startnumberTrim start time in seconds (for custom range).
--trim-endnumberTrim end time in seconds (for custom range).
--trim-durationnumberTrim duration in seconds (for skip-start, skip-end, keep-first).
--fpsnumberTarget frame rate.
--fps-modestringFrame rate mode: auto, cfr, vfr.
--hdrstringHDR sources (HDR10, HLG): keep (stay 10-bit HDR where the codec can hold it; H.264 is always converted) or sdr (tone-map to SDR BT.709). SDR sources are not affected.
--overwritebooleanOverwrite existing output files.
--skip-existingbooleanSkip a file whose output already exists, so a re-run only does what is missing.
--profilestringLoad settings from a JSON profile file.
--measure-qualitybooleanMeasure SSIM/VMAF quality after encoding.

Output options: --json, --plain, --quiet, --verbose, --progress.

videorecompress profile validate

Validate a profile JSON file.

videorecompress profile validate <file>
ArgumentDescription
<file>Path to the profile JSON file to validate.

Output options: --json, --plain, --quiet, --verbose, --progress.

videorecompress recompress

Recompress a single video file.

videorecompress recompress <input> [options]
ArgumentDescription
<input>Path to the video file.
OptionTypeDescription
--outputstringOutput directory.
--codecstringVideo codec: h264, h265, av1, vp9, copy.
--crfintegerConstant Rate Factor (0-63).
--quality-modestringQuality mode: crf, cbr, twopass.
--bitrateintegerTarget bitrate in kbps (for cbr/twopass).
--encoder-presetstringEncoder speed preset (ultrafast..veryslow, or an SVT-AV1 number 0-13; mapped to what each encoder accepts).
--presetstringNamed recompression preset to use as base settings (e.g. phone_archive — run 'videorecompress presets' for the list). Explicit flags override preset values.
--hw-accelstringHardware acceleration: auto, nvenc, qsv, amf, software.
--audio-modestringAudio mode: copy, reencode, remove.
--audio-codecstringAudio codec: aac, opus, mp3, flac, ac3, eac3.
--audio-bitrateintegerAudio bitrate in kbps.
--containerstringContainer format: mp4, mkv, webm.
--widthintegerTarget width (0 = keep original).
--heightintegerTarget height (0 = keep original).
--denoisestringDenoise: off, light, medium, strong.
--deinterlacestringDeinterlace: off, yadif, yadif-bob.
--watermark-textstringApply a text watermark.
--watermark-imagestringApply an image watermark (PNG/JPG path).
--watermark-positionstringWatermark position: TopLeft, TopCenter, TopRight, CenterLeft, Center, CenterRight, BottomLeft, BottomCenter, BottomRight.
--watermark-opacityintegerWatermark opacity 0-100.
--watermark-scaleintegerWatermark size as % of video width (5-100).
--trim-modestringTrim mode: none, skip-start, skip-end, keep-first, custom.
--trim-startnumberTrim start time in seconds (for custom range).
--trim-endnumberTrim end time in seconds (for custom range).
--trim-durationnumberTrim duration in seconds (for skip-start, skip-end, keep-first).
--fpsnumberTarget frame rate.
--fps-modestringFrame rate mode: auto, cfr, vfr.
--hdrstringHDR sources (HDR10, HLG): keep (stay 10-bit HDR where the codec can hold it; H.264 is always converted) or sdr (tone-map to SDR BT.709). SDR sources are not affected.
--overwritebooleanOverwrite existing output files.
--skip-existingbooleanSkip a file whose output already exists, so a re-run only does what is missing.
--profilestringLoad settings from a JSON profile file.
--measure-qualitybooleanMeasure SSIM/VMAF quality after encoding.

Output options: --json, --plain, --quiet, --verbose, --progress.

videorecompress register

Register your license key.

videorecompress register <email> <key>
ArgumentDescription
<email>Registration email.
<key>License key.

Output options: --json, --plain, --quiet, --verbose, --progress.

videorecompress serve

Start MCP server for AI agent integration.

videorecompress serve

videorecompress status

Show tool availability, license state, and GPU info.

videorecompress status

Output options: --json, --plain, --quiet, --verbose, --progress.

videorecompress watch

Monitor a folder and auto-recompress new video files.

videorecompress watch <dir> [options]
ArgumentDescription
<dir>Path to the folder to watch.
OptionTypeDescription
--presetstringPreset ID to use (e.g. security_archive, phone_archive, max_savings; default: phone_archive).
--outputstringOutput directory for recompressed files (default: same as source).
--recursivebooleanInclude subfolders.
--includestring[]Only videos matching this pattern (e.g. "*.mp4"); repeat the option or separate patterns with ';' or ','.
--excludestring[]Leave out videos matching this pattern (same forms as --include).
--watermark-textstringApply a text watermark to all videos.
--watermark-imagestringApply an image/logo watermark from a file (PNG, JPG).
--watermark-positionstringWatermark position: TopLeft, TopCenter, TopRight, CenterLeft, Center, CenterRight, BottomLeft, BottomCenter, BottomRight.
--watermark-opacityintegerWatermark opacity 0-100.
--watermark-scaleintegerWatermark size as % of video width (5-100).

Output options: --json, --plain, --quiet, --verbose, --progress.

MCP server

videorecompress serve exposes 7 tools over the Model Context Protocol (stdio, newline-delimited JSON-RPC 2.0; protocol versions 2025-11-25, 2025-06-18, 2025-03-26 and 2024-11-05), so an AI agent such as Claude Code, Claude Desktop, Cursor or Codex can work on files on your PC. Server name: videorecompress-studio. Pass absolute paths to every tool.

{
  "mcpServers": {
    "videorecompress-studio": {
      "command": "videorecompress",
      "args": [
        "serve"
      ]
    }
  }
}

In Claude Code one command adds it: claude mcp add videorecompress-studio -- videorecompress serve. Stdout carries JSON-RPC only, ping is answered while a tool runs, notifications/cancelled stops a running call, and a tool that cannot do its job returns isError: true with a sentence that names the problem.

ToolTitleRead-onlyDestructiveIdempotentNetwork
batch_recompressBatch recompress videosnononono
estimate_savingsEstimate space savingsyesnoyesno
get_file_infoGet video file infoyesnoyesno
get_license_statusGet license and trial statusyesnoyesno
list_formatsList formatsyesnoyesno
list_presetsList presetsyesnoyesno
recompress_videoRecompress videonononono

Destructive: the tool can replace a file that already exists. Network: the tool uses the internet.

batch_recompress

writes files

Batch recompress videos. Batch recompress all videos in a directory.

ParameterTypeRequiredDescription
input_dirstringyesDirectory containing video files to recompress.
output_dirstringyesOutput directory for recompressed files.
presetstringnoPreset ID, one of: phone_archive, youtube_raw, security_archive, wedding_archive, max_savings, av1_max_savings, quick_h264, web_optimized, drone_footage, screen_recording, 4k_to_1080p, dashcam_archive, gaming_clips, old_video_rescue, gif_creator, youtube_thumbnails, video_contact_sheet, whatsapp, email_attachment, discord_free, twitter_x, instagram_reels, tiktok, iphone_to_mp4 (custom presets saved in the app work too; list_presets shows them all).
codecstringnoVideo codec: h264, h265, av1, vp9 (used when no preset specified).
crfintegernoConstant Rate Factor (used when no preset specified). Range: 0 to 63.
workersintegernoNumber of parallel workers (default: 1 for software, 2 for hardware). Minimum: 1.
hdrstringnoHDR sources (HDR10, HLG): keep (default; stays 10-bit HDR with H.265/AV1/VP9, H.264 is always tone-mapped) or sdr (tone-map to SDR BT.709). Single-layer Dolby Vision is kept only by the H.265 software encoder (hw_accel software) into MP4/MKV without a resize; HDR10+ only by VP9. Otherwise the base HDR10/HLG picture is kept and the result's hdrNote says what was not.
overwritebooleannoReplace the output when it already exists (default: an existing output is kept and the new file gets a free name).
skip_existingbooleannoLeave an input alone when its output already exists, so a re-run only does what is missing.

estimate_savings

read-onlyidempotent

Estimate space savings. Estimate how much smaller ONE video gets with a preset (or codec/crf) by actually encoding it: three 4-second samples spread over the file (the whole file when it is 20 s or shorter) with the same settings and encoder recompress_video uses, scaled to the full file. Takes a few seconds per file and writes only temporary files. Use it to compare presets on a representative file. Returns estimatedReductionPercent, a low-high range across the samples, the method (full_encode = exact size, sample_encode = typically within a few points, heuristic = a per-codec guess when no sample could be encoded) and the encoder. It does not measure quality: run recompress_video on one file (CLI: recompress --measure-quality for VMAF/SSIM) to check the picture before converting a whole folder.

ParameterTypeRequiredDescription
input_pathstringyesAbsolute path to the video file.
presetstringnoPreset ID, one of: phone_archive, youtube_raw, security_archive, wedding_archive, max_savings, av1_max_savings, quick_h264, web_optimized, drone_footage, screen_recording, 4k_to_1080p, dashcam_archive, gaming_clips, old_video_rescue, gif_creator, youtube_thumbnails, video_contact_sheet, whatsapp, email_attachment, discord_free, twitter_x, instagram_reels, tiktok, iphone_to_mp4 (custom presets saved in the app work too; list_presets shows them all).
codecstringnoVideo codec: h264, h265, av1, vp9 (used when no preset specified).
crfintegernoConstant Rate Factor (used when no preset specified, default: 23). Range: 0 to 63.

get_file_info

read-onlyidempotent

Get video file info. Analyze a video file and return codec, resolution, duration, bitrate, HDR, audio and subtitle information.

ParameterTypeRequiredDescription
input_pathstringyesAbsolute path to the video file.

get_license_status

read-onlyidempotent

Get license and trial status. Get the license and trial state before compressing: registered or trial, clean files left (freeFilesRemaining), and what files become after the free ones (afterFreeFiles: watermark = a watermark and a 10-minute length cap). nextOutput says what the next file will be: clean or watermark.

No parameters.

list_formats

read-onlyidempotent

List formats. List the containers and codecs VideoRecompress reads (input) and writes (output), with the video codecs each output container holds.

ParameterTypeRequiredDescription
directionstringnoinput = only what it reads, output = only what it writes, all (default) = both (the CLI's formats --input / --output). One of: input, output, all.

list_presets

read-onlyidempotent

List presets. List available video recompression presets with codec, quality, and estimated savings.

No parameters.

recompress_video

writes files

Recompress video. Recompress a video file with modern codecs (H.265, AV1, VP9) for smaller file size.

ParameterTypeRequiredDescription
input_pathstringyesAbsolute path to the source video file.
output_pathstringnoOutput file path (default: auto-generated in same directory).
presetstringnoPreset ID, one of: phone_archive, youtube_raw, security_archive, wedding_archive, max_savings, av1_max_savings, quick_h264, web_optimized, drone_footage, screen_recording, 4k_to_1080p, dashcam_archive, gaming_clips, old_video_rescue, gif_creator, youtube_thumbnails, video_contact_sheet, whatsapp, email_attachment, discord_free, twitter_x, instagram_reels, tiktok, iphone_to_mp4 (custom presets saved in the app work too; list_presets shows them all).
codecstringnoVideo codec: h264, h265, av1, vp9 (overrides preset if both specified).
crfintegernoConstant Rate Factor (overrides preset if both specified). Range: 0 to 63.
hw_accelstringnoHardware acceleration: auto, nvenc, qsv, amf, software.
hdrstringnoHDR sources (HDR10, HLG): keep (default; stays 10-bit HDR with H.265/AV1/VP9, H.264 is always tone-mapped) or sdr (tone-map to SDR BT.709). Single-layer Dolby Vision is kept only by the H.265 software encoder (hw_accel software) into MP4/MKV without a resize; HDR10+ only by VP9. Otherwise the base HDR10/HLG picture is kept and the result's hdrNote says what was not.
overwritebooleannotrue: replace the output when it exists. false: give the new file a free name instead. Default: an explicit output_path is replaced, the generated name (<name>_recompressed) is never replaced.
skip_existingbooleannotrue: when the output already exists, write nothing and answer skipped: true (safe re-runs).