← All topicsOpen Settings →

Settings is five pages behind one nav item: Media Source, Captioning, Automation, Publishing, and Workflow. /settings on its own redirects to Media Source.

Saving is not consistent across the five, and that is the first thing to know.

Page How it saves
Media Source Autosaves. No Save button at all — a Retry Save button only appears once a save has already failed.
Captioning Autosaves, and has a Save button that does the same thing.
Workflow Autosaves, and has Save Workflow Settings.
Automation Save button only. Navigate away without pressing Save and the edit is gone.
Publishing Save button only. Navigate away without pressing Save CivitAI Settings and the edit is gone.

Autosave fires after about three-quarters of a second of no typing. So the two pages to be careful on are Automation and Publishing — everywhere else your edit is already persisted by the time you have stopped typing.

The page loads all ten settings groups up front and shows "Loading settings…" until every one has landed, so the first visit takes a beat. Repeat visits are instant.

Media Source

Everything that feeds media into the library.

On Demand at the top is the manual sync trigger. Sync all sources runs Telegram, Reddit, and Instagram at the same time; below it are per-source buttons — Sync all Telegram, Sync all Reddit, and Sync AI VIDS Collection for Instagram. While "Sync all sources" is running, the individual buttons are disabled. Each row prints a summary of what its last run ingested. Run history lands under Recent sync jobs on Stats.

Reddit Sync has two defaults worth understanding together: Posts per page (1–100) and Max pages (1–50). Total posts requested per sync is the product of the two, so raising both multiplies rather than adds.

The subreddit picker below can add subreddits by name or pick them off your subscribed list, which you refresh in place. Adding a subreddit queues an automatic first sync of it — the sync fires once the autosave lands, not the moment you press Add, and a burst of adds is synced three at a time so it does not exhaust the Reddit token's rate limit or overwhelm the home ffmpeg service.

Instagram Sync has one default: Reels per user sync (1–200), which caps what "Ingest more" fetches on a profile page. Profiles are added by handle or by full URL.

Telegram Source is its own panel with sync defaults, an Enrolled chats list, and an Available chats list pulled live from your Telegram session, excluding 1:1 DMs. Ingest only happens for enrolled chats — a chat being visible in Available does nothing until you enroll it.

Captioning

The prompts, schemas, and model settings that produce captions.

Caption Automation Controls at the top carries a badge reading Scheduled On or Scheduled Off, plus a Manual Run Active badge while one is running. The scheduled side is not configured here — the switch that enables it, the caption concurrency the estimator plans against, and the time windows all live on the Automation page, and this section links to it. What you get here is manual operation.

The manual controls:

  • Start Auto-Captioning — walks eligible media one at a time, the same as pressing Caption on a card, until you stop it or it runs out.
  • Stop Auto-Captioning — halts the manual run.
  • Reset Stuck Jobs — un-sticks jobs left in active processing.
  • Purge Caption Queue — clears queued transport state only. It does not touch jobs already in active processing; those need Reset Stuck Jobs. Running Purge and expecting it to clear a stuck job is the mistake this warning exists for.

The pace at which the queue drains is not set here. It comes from the caption-executor-service container's own environment on the Ubuntu host — CAPTION_QUEUE_PULL_BATCH_SIZE (default 10) and CAPTION_QUEUE_PROCESSING_CONCURRENCY (default 5, capped by the pull batch size). Changing it means changing that container's env and restarting it.

Below that:

  • LM Studio connection — base URL, timeout, model selection, and generation parameters (temperature, top-p, max tokens), plus video-extraction settings (frame sampling, frame count, FPS sample rate, max duration). There is a Test Connection button.
  • Natural-Language Caption Models — per-platform model overrides for the plain-language caption pass, set separately for Reddit, Instagram, and Telegram. Hidden while the unified caption pass is enabled, since that pass replaces them; disable it to get them back.
  • Prompt Presets Configuration — picks the default preset for each of the eight prompt slots: Subject System/User Prompt, Video SFW System/User Prompt, Video NSFW System/User Prompt, and Natural-Language Caption System/User Prompt.
  • Schema Presets Configuration — the same for the three structured-output schemas: subject, video SFW, video NSFW.
  • Caption Template Builder — enable the structured caption fields you want, then order them into the combined text that becomes the final caption. It shows a running token count.
  • Available Presets — where prompt and schema presets are actually created, edited, and deleted, filtered by category and kind.

Automation

The schedule that drives everything overnight. Windows are evaluated in America/Chicago, not in your browser's timezone.

Three master switches at the top:

  • Automation schedule — the master switch. Off means nothing runs; your schedules stay saved.
  • Caption sweep — whether each window dispatches caption jobs.
  • ComfyUI generation — whether each window dispatches captioned jobs to ComfyUI.

Schedules is a list of windows, each setting days and hours. + Add window adds one. Overlapping windows are rejected when you save, and the conflicting entries are highlighted — the save fails rather than silently picking one.

Estimator is how the orchestrator decides how much work to plan for each window:

Field What it controls
Sample size How many recent completed jobs to sample per side when estimating duration
Percentile Which percentile of that sample to size against — 90 leaves headroom for the slowest 10%
Buffer minutes Subtracted from the window length before any sizing happens
Max generation batch Despite the name it caps both sides. A hard ceiling on the generation plan, and also the limit the caption-candidate probe is run with, so it caps how many captions a window plans too — set it to 5 and a window plans at most five captions as well as five generations. 0 means unlimited, which is the default
Caption concurrency Parallel caption capacity — raising it directly raises how much each window plans
OOM risk threshold Skips generation candidates whose width × height × duration_seconds exceeds this. 0 disables the check; ~15,000,000 is the empirical threshold from observed ComfyUI out-of-memory failures on a 24 GiB GPU

Refill when queue is empty seeds N random captioned clips per platform (Reddit, Instagram, Telegram) so the generator has work. Despite the label it does not wait for empty — it fires whenever the captioned pool is too small to fill the window, and again mid-window if the pool nearly runs dry. Refill count per platform defaults to 10, so three platforms gives a 30-job batch; refill media is capped at 20 seconds.

Recent windows at the bottom lists what each scheduled window actually did. The counts are live — rendered jobs, not dispatch attempts — so they reflect reality rather than intent. Click a row for that window's plan and sub-results.

Automation has one Save button covering the whole page, and nothing on this page autosaves — this is one of the two pages where leaving without pressing it discards the edit.

Publishing

CivitAI configuration, and the one page whose state can silently break publishing.

A badge next to CivitAI Publishing reads Session Seeded or Not Connected. The stored-session box shows when the session was last refreshed and whether the last test passed or failed.

  • Test session — validates the stored session now.
  • Clear session — behind a confirmation, because publishing fails until a new session is seeded. The session is not created here: you run the seeding script on the machine, complete the login in the browser window it opens, and then come back and test it.
  • CivitAI base URL — the site origin, so a domain change on CivitAI's side is a settings edit rather than a deploy.
  • Default technique — img2vid / vid2vid / txt2vid, applied to queued publishes.

Save CivitAI Settings persists the base URL and technique, and nothing on this page autosaves — the other of the two pages where leaving without pressing it discards the edit. The session buttons act immediately and are not covered by it.

Workflow

The ComfyUI side of generation.

  • Import From ComfyUI Server — set the ComfyUI Server URL (this field autosaves after a pause), Test Connection against your current draft value, then Refresh to reload the importable workflow list from the last saved server. When the URL is dirty the button reads Apply & Refresh, which is the tell that Refresh alone would have used the old value.
  • Primary Workflow — the Active Generation Workflow dropdown selects which imported workflow generation jobs use, and the selected one can be renamed.
  • Workflow Input Mappings — connects each semantic queue-time field to a real node input in the imported workflow, one target at a time, with the actual node labels from the stored artifact. A summary panel names the imported workflow, its runtime artifact format, where it was imported from, and where the node labels came from.
  • Random Subject Selection — a toggle that picks a random subject for each generation job instead of a fixed one. This is what makes the runtime-params inspector on a Jobs card worth opening, since it is the only place the actually-chosen subject shows up.
  • Rotate All Subjects — off by default, and off means what it has always done: every job goes to whichever subject has the fewest non-archived jobs, so a batch you upload today absorbs all output until it catches up to the rest of the library. Turn it on and no subject can sit idle longer than the day count you set. Older subjects come back into rotation immediately while newer ones still get the majority of jobs and keep closing the gap.

Set the day count to 0 for pure round robin: every subject takes one turn per cycle and accumulated totals stop mattering entirely. Larger numbers favour catching up; smaller numbers favour variety.

Two things worth knowing. The setting is global, unlike the per-workflow Random Subject Selection toggle above it — it governs every place a subject gets assigned, so two workflows cannot disagree about what "fair" means. And with Random Subject Selection also on, the day count becomes a strong tendency rather than a hard guarantee, because the random pick samples from the set of overdue subjects rather than always taking the most overdue one.

Save Workflow Settings covers this page, but the primary-workflow selection, the input mappings, the random-subject toggle, and the rotation setting all autosave anyway — the button is a belt-and-braces duplicate, not the only way your choice sticks.