# Customization

## Rebrand the macOS prototype

Change the app name and copy in `ContentView.swift`, the display name and bundle identifiers in `project.yml` and the Xcode project, and the asset catalog under `StreamRecorder/Assets.xcassets`. Replace the example identifiers before signing.

## Change the recording workflow

Add quality, codec, audio-only, filename, or output-format controls by extending the preference model and `YTDLPCommandBuilder`. Keep user input as individual process arguments and add tests for every command variant.

## Support more sources

The current validator intentionally accepts YouTube URLs. Add another source behind a provider-specific validation and command layer instead of weakening validation to any URL. Review the provider's terms, authentication model, and output behavior.

## Build a CLI

Reuse the conceptual service boundaries without SwiftUI:

1. parse options and validate the URL and destination;
2. discover or configure the media toolchain;
3. build and launch the process;
4. parse progress markers;
5. handle Ctrl-C as a graceful stop;
6. discover and finalize output;
7. return meaningful exit codes.

The existing parser, command, state, and finalization tests describe the behavior to preserve.

## Port to Windows or Linux

Replace AppKit folder and Finder actions, `AppStorage`, browser choices, executable search paths, and application-termination handling with platform equivalents. The process protocol, recording states, output markers, ffprobe inspection, and FFmpeg finalization remain applicable.

## Create a service

A remote recorder needs an authenticated job API, isolated per-job directories, strict URL controls, concurrency and disk quotas, cancellation, retention, cleanup, and explicit credential handling. Do not upload browser cookie databases from client machines. Use provider-supported authentication or a locally controlled worker when possible.
