Documentation

How to get good output

Short version: give it clean audio, tell it the right language, and read the report that explains every moment it chose not to clip.

Supported formats

Resolution and frame rate are read from the file itself — nothing is assumed. A phone capture is handled exactly as well as a studio stream.

PropertyAccepted
ContainerMP4, MKV, MOV, WEBM
Video codecH.264, H.265, VP9, AV1
Frame rate24–120 fps, constant. Variable frame rate is rejected.
AudioOne track, 32 kHz or higher, mono or stereo
DurationUp to 12 hours
LinksTwitch and YouTube VODs — your own content only. Kick blocks downloads from our addresses, so Kick recordings are uploaded as files.

Variable frame rate is the one hard rejection. VFR files lie about their timing grid, which makes frame-accurate cutting impossible — we would rather refuse than deliver clips with drifting audio.

Settings explained

SettingWhat it changes
LanguageSelects the vocabulary bias. Wrong language does not degrade gracefully — it produces confident nonsense. Set it correctly.
Shorts producedNot a setting. Every moment that clears the hook and safety bars becomes a short — none are discarded to hit a number, and none are invented to fill one.
Focus onMultiplies the score of moments where that voice profile is speaking, up to 1.6×. Others still appear.
Clip lengthContent-driven adapts to the conversation. The fixed options override that and generally retain worse.

Reading the detector

Every delivered clip carries the measurements that selected it, and every rejected moment carries its reason. The four values you will see:

ValueMeaning
laughterHow much the room is laughing at this point, relative to how this particular recording normally sounds.
reactionsHow densely people are reacting around this moment. A single exclamation is noise; a run of them is a moment.
eventsRecognised events near this point, from the audio and — where the game is supported — from the picture.
speakerWhich voice profile matched, if any. Blank means the engine would rather say nothing than guess.

Audio that works

The single biggest factor in output quality is not your microphone — it is cross-talk. Background noise we can remove; two people speaking simultaneously we cannot separate.

  • Fan noise, keyboard, mic handling — handled. Speech is separated from these without hollowing out the voice.
  • Music under speech — mostly handled, but it lowers transcription confidence and can suppress lines entirely.
  • Everyone talking at once — this is the real ceiling. Captions still appear, but speaker colours become unreliable and we deliberately leave them off rather than guess.

Voice profiles

Not self-serve yet. There is no upload path for enrolment — send us the audio and we build the profile by hand. The guidance below is what we measured, and it is what we follow when we do it for you.

Record two to three minutes of one person talking with nobody else audible. A solo intro works; so does any stretch where you are alone in the call.

What matters is solo, not clean. We measured this: noise reduction made almost no difference to profile quality, while the length of the sample mattered enormously. Speaker voice profiles need continuous speech to settle, so a two-minute monologue beats twenty scattered ten-second clips.

Each additional profile improves every existing one, because the engine can compare against a named person rather than an anonymous group.

Why a clip wasn’t chosen

Check the rejection log on the results screen. The four common reasons:

ReasonWhat to do
content gateThe passage contains a term on the safety list. This is deliberate and cannot be overridden per clip — edit your safety rules if the list is too broad for you.
weak hookNo line in the moment scored high enough to make a title. Usually the moment is visual rather than spoken.
dullTactical chatter with no reaction density. Working as intended.
no clean boundaryThe moment could not be cut without breaking a sentence, so it was left out rather than clipped badly.

REST API

Everything the workspace does is available programmatically: submit a recording, follow the stages, collect the clips. The interface and the API run through the same code, so there is no second implementation to drift.

POST /api/jobs
Cookie: cf_session=<session>
Content-Type: application/json

{
  "sourceId": "3f2504e0-4f89-41d3-9a0c-0305e82c3301",
  "language": "sv"
}

→ 200 { "jobId": "8f2a1c04-…" }

Note what the request does not carry: a number of clips. The engine decides that from the moments it finds. Asking for ten guarantees either four are padding or six good ones were discarded.

GET /api/jobs/8f2a1c04-…

→ 200 {
  "job": { "state": "done", "stage": null, "progress": 100,
           "billedMinutes": 115, "clipCount": 9 },
  "clips": [
    { "idx": 1, "title": "…", "seconds": 41.2, "score": 18.4,
      "url": "…expiring link…",
      "why": { "hook": "…", "speakers": ["…"], "parts": [ … ] } }
  ],
  "rejections": [
    { "at": "20:03", "atS": 1203.4,
      "reason": "The opening line said nothing on its own, so it would not hold a viewer." }
  ]
}

The rejections array is the part worth building against: every discarded moment carries a timecode you can scrub to in the source and a reason in plain words. Download links are minted per request and expire, so fetch them when you need them rather than storing them.

MCP — connect an AI assistant

ViggeClips speaks the Model Context Protocol, so an assistant can drive the clip factory directly: hand it a recording, watch the stages, collect the clips, and explain the result — without anyone opening a browser.

{
  "mcpServers": {
    "clipforge": {
      "command": "npx",
      "args": ["tsx", "F:/scalelistuniverse/platform/src/mcp/server.ts"],
      "env": { "CF_MODE": "local" }
    }
  }
}
ToolWhat it does
credit_balanceMinutes of source video still available
list_jobsRecent jobs. Read-only.
job_statusLive stage, clips, and every rejection with its reason
submit_jobQueues an uploaded recording
get_clipsDownload links for a finished job
add_linkAdds a VOD from a link — requires an explicit rights confirmation
engine_notesHow the detectors choose, for explaining a result

Three rules govern what an assistant may do, because an assistant is a client that will cheerfully fill a missing argument with its best guess:

  • One account, fixed at startup. There is no tool argument for “which user” — that would be an authentication bypass with a friendly interface.
  • Nothing irreversible by omission. Confirming that someone holds the rights to a recording must be passed explicitly, and defaults to refusing.
  • Read tools cannot spend. Exploring an account never costs credit.

Limits

LimitValue
Max source duration12 hours
Max file size60 GB
Concurrent jobs1 free · 2 Creator · 5 Studio
Minimum billed per job10 minutes
Result retention30 days
Source retentionDeleted on collection
Typical turnaround≈ 0.57× stream length (115-min stream → 65 min), measured on an RTX 3060 Ti
Not yet available
  • The API is built and running — every endpoint above is live in the solo runtime today (localhost). Public deployment is gated on one thing: the adversarial security review passing. Until then the contract is exercised end-to-end daily, just not internet-reachable.