---
title: "Update video settings"
method: PUT
path: "/v1/settings/video"
tags: ["Video"]
---

# Update video settings

`PUT /v1/settings/video`

## Request

- Base URL: `http://localhost:9998`
- URL: `http://localhost:9998/v1/settings/video`
- Auth: HTTP bearer

Replace all video settings. The full VideoSettings object is required — use GET first, merge your changes, then PUT the result.

## Request body

- VideoSettings
  - `outputDirectory` string, nullable: Output directory path for rendered videos
  - `defaultPreset` 'social-clip' | 'youtube-demo' | 'cinematic' | 'documentation' | 'custom': Config preset (default youtube-demo)
  - `defaultVoice` string, nullable: TTS voice name for narration. Null or absent means no voice is named, which is the shipped state — narration then resolves the same default every other voice surface does, including an active cloned voice.
  - `defaultLanguage` string: Language code (default en-US)
  - `visionPiperPort` integer: VisionPiper port (default 9999)
  - `defaultPacing` PacingConfig
    - `interStepDelay` integer: Delay between steps in ms (default 300)
    - `typingSpeed` integer: Typing speed in ms per character (default 50)
    - `scrollDuration` integer: Scroll animation duration in ms (default 500)
    - `hoverDuration` integer: Hover duration in ms (default 400)
    - `navigationWait` integer: Wait after navigation in ms (default 1000)
    - `clickZoom` ClickZoomConfig
      - `enabled` boolean
      - `preZoomMs` integer
      - `holdMs` integer
      - `postZoomMs` integer
      - `zoomLevel` number
  - `defaultCapture` CaptureConfig
    - `fps` integer: Frames per second (default 30)
    - `codec` string: Video codec (default hevc)
    - `colorSpace` string: Color space (default displayP3)
    - `captureAudio` boolean: Capture audio (default false)
  - `defaultBranding` BrandingConfig
    - `primaryColor` string: Primary hex color (default
    - `surfaceColor` string: Surface hex color (default
    - `accentColor` string: Accent hex color (default
    - `logo` LogoConfig
      - `path` string, required
      - `position` string: Logo position (default bottom-right)
      - `opacity` number: Logo opacity 0-1 (default 0.6)
  - `defaultSubtitles` SubtitleConfig
    - `burnIn` boolean: Burn subtitles into video (default true)
    - `srt` boolean: Generate SRT file (default true)
    - `style` SubtitleStyle
      - `fontSize` string: Font size (default medium)
      - `highlightColor` string: Highlight hex color (default
      - `position` string: Subtitle position (default bottom)
  - `defaultSound` SoundDesignConfig
    - `clickSound` boolean: Click sound effect (default true)
    - `transitionSound` boolean: Transition sound effect (default true)
    - `typingSound` boolean: Typing sound effect (default false)
    - `volume` number: Sound volume (default 0.3)
  - `defaultComposition` CompositionConfig
    - `frame` CompositionFrameConfig
      - `background` string: Background type: solid, gradient, image
      - `backgroundValue` string: Background value (hex, gradient, path)
      - `padding` number: Padding in px
      - `cornerRadius` number: Corner radius in px
      - `shadow` boolean: Enable drop shadow
    - `colorGrade` CompositionColorGradeConfig
      - `lut` string: LUT name
      - `bloom` number: Bloom intensity 0-1
      - `vignette` number: Vignette intensity 0-1
      - `saturation` number: Saturation multiplier
      - `warmth` number: Warmth adjustment
    - `encoding` CompositionEncodingConfig
      - `quality` number: Encoding quality 0-1
      - `hdr` boolean: HDR output
      - `producePortrait` boolean: Also produce portrait version

## Response `200`

Updated video settings

- VideoSettings
  - `outputDirectory` string, nullable: Output directory path for rendered videos
  - `defaultPreset` 'social-clip' | 'youtube-demo' | 'cinematic' | 'documentation' | 'custom': Config preset (default youtube-demo)
  - `defaultVoice` string, nullable: TTS voice name for narration. Null or absent means no voice is named, which is the shipped state — narration then resolves the same default every other voice surface does, including an active cloned voice.
  - `defaultLanguage` string: Language code (default en-US)
  - `visionPiperPort` integer: VisionPiper port (default 9999)
  - `defaultPacing` PacingConfig
    - `interStepDelay` integer: Delay between steps in ms (default 300)
    - `typingSpeed` integer: Typing speed in ms per character (default 50)
    - `scrollDuration` integer: Scroll animation duration in ms (default 500)
    - `hoverDuration` integer: Hover duration in ms (default 400)
    - `navigationWait` integer: Wait after navigation in ms (default 1000)
    - `clickZoom` ClickZoomConfig
      - `enabled` boolean
      - `preZoomMs` integer
      - `holdMs` integer
      - `postZoomMs` integer
      - `zoomLevel` number
  - `defaultCapture` CaptureConfig
    - `fps` integer: Frames per second (default 30)
    - `codec` string: Video codec (default hevc)
    - `colorSpace` string: Color space (default displayP3)
    - `captureAudio` boolean: Capture audio (default false)
  - `defaultBranding` BrandingConfig
    - `primaryColor` string: Primary hex color (default
    - `surfaceColor` string: Surface hex color (default
    - `accentColor` string: Accent hex color (default
    - `logo` LogoConfig
      - `path` string, required
      - `position` string: Logo position (default bottom-right)
      - `opacity` number: Logo opacity 0-1 (default 0.6)
  - `defaultSubtitles` SubtitleConfig
    - `burnIn` boolean: Burn subtitles into video (default true)
    - `srt` boolean: Generate SRT file (default true)
    - `style` SubtitleStyle
      - `fontSize` string: Font size (default medium)
      - `highlightColor` string: Highlight hex color (default
      - `position` string: Subtitle position (default bottom)
  - `defaultSound` SoundDesignConfig
    - `clickSound` boolean: Click sound effect (default true)
    - `transitionSound` boolean: Transition sound effect (default true)
    - `typingSound` boolean: Typing sound effect (default false)
    - `volume` number: Sound volume (default 0.3)
  - `defaultComposition` CompositionConfig
    - `frame` CompositionFrameConfig
      - `background` string: Background type: solid, gradient, image
      - `backgroundValue` string: Background value (hex, gradient, path)
      - `padding` number: Padding in px
      - `cornerRadius` number: Corner radius in px
      - `shadow` boolean: Enable drop shadow
    - `colorGrade` CompositionColorGradeConfig
      - `lut` string: LUT name
      - `bloom` number: Bloom intensity 0-1
      - `vignette` number: Vignette intensity 0-1
      - `saturation` number: Saturation multiplier
      - `warmth` number: Warmth adjustment
    - `encoding` CompositionEncodingConfig
      - `quality` number: Encoding quality 0-1
      - `hdr` boolean: HDR output
      - `producePortrait` boolean: Also produce portrait version

## Other responses

- `400`: Invalid request
- `500`: Failed to persist settings
- `503`: Video settings service not ready

---

[API](https://skmtc.dev/modelpiper/apis/toolpiper-api.md) · [All operations](https://skmtc.dev/modelpiper/apis/toolpiper-api/llms.txt) · [OpenAPI document](https://skmtc.dev/modelpiper/apis/toolpiper-api/revisions/6722bf56385c?raw)
