import type { Metadata } from "next"; import Link from "next/link"; import { getPaths } from "yt-dlp-transcript-common/lib/paths"; import { getSettings } from "yt-dlp-transcript-common/lib/settings"; import { readXSessionStatus } from "yt-dlp-transcript-common/social/xSessionBroker"; import { resolveXCookieSourceFor } from "yt-dlp-transcript-common/social/xBrowserLogin"; import { xCookieSourceView } from "yt-dlp-transcript-common/social/xCookieSource"; import { xPostsVisibility } from "yt-dlp-transcript-common/lib/postsVisibility"; import { SettingsForm } from "./components/SettingsForm"; import { XSessionSection } from "./components/XSessionSection"; export const dynamic = "force-dynamic"; export const metadata: Metadata = { title: "Settings" }; const POINTER_LINK = "underline underline-offset-2 hover:text-foreground"; export default async function SettingsPage() { const paths = getPaths(); const settings = getSettings(); const pathRows: [string, string][] = [ ["monorepoRoot", paths.monorepoRoot], ["transcriptsDir", paths.transcriptsDir], ["channelsDir", paths.channelsDir], ["jobsDir", paths.jobsDir], ["lmdbPath", paths.lmdbPath], ["exportPublicDir", paths.exportPublicDir], ["ytdlpBin", paths.ytdlpBin], ["whisperBin", paths.whisperBin], ["whisperModel", paths.whisperModel], ["galleryDlBin", paths.galleryDlBin], ]; // The X session broker's current state and the X login source in use (see // xSessionActions.ts). The source is resolved here, not read: with no stored // choice it depends on cookiesFromBrowser and the profile. const xSession = await readXSessionStatus(paths); const xSource = xCookieSourceView( await resolveXCookieSourceFor(paths, settings), ); return (

Settings

Site settings

Persisted in settings.json at the monorepo root. Used by the export build to title the static site.

{/* A POINTER, NOT A CONTROL. Slice 3 moved four fieldsets that configured operations onto the operation pages, so this page is the machine and the site. Deliberately a paragraph rather than a fieldset: a form here would be the second place to edit those blocks, which is the thing being undone. No route retired, so there is nothing to redirect. */}

An operation's own settings live on its page, beside its backlog and its sweep:{" "} Digest ,{" "} Diarization {" "} (with the shared speaker work lane),{" "} Speaker names (from the transcript) {" "} and{" "} Speaker names (from the audio) . The sync scheduler is one of them:{" "} Sync {" "} carries the whole block, below the schedule it drives. The transcription worker list is configured on{" "} Workers , beside the workers it describes.

System paths

Read-only view of getPaths(). Set the matching env vars (TRANSCRIPTS_DIR, SETTINGS_FILE, EXPORT_PUBLIC_DIR, YTDLP_BIN, WHISPER_BIN, WHISPER_MODEL, CHOUGH_BIN, CHOUGH_URL, CHOUGH_MODEL) before launching to override. The per-app Binary / Model fields in the transcription settings above take precedence over these defaults when running channel transcribe actions.

{pathRows.map(([key, value]) => ( ))}
{key} {value}
); }