Flucto docs

The complete reference for the CLI, the desktop app, and AI-agent workflows. All examples assume v1.18+.

Quick start

Download Flucto-<version>-cli-setup.zip from GitHub Releases and extract it into a writable folder. Run install.cmd on Windows or bash install.sh on macOS/Linux — no existing Node.js and no admin rights required. The bootstrap downloads a private Node.js 24 runtime from nodejs.org, verifies its SHA256, and installs the bundled CLI plus yt-dlp/FFmpeg under a private prefix. Internet access is required.

# after extracting
install.cmd                    # Windows
bash install.sh                # macOS / Linux

# verify in a new shell
flucto doctor --json
flucto setup --json            # provision/refresh binaries manually

Both fl and flucto are registered. Note that PowerShell reserves fl for Format-List — use flucto or fl.cmd there; fl works in cmd.exe and POSIX shells. Transcripts only? Skip the ffmpeg download with flucto setup --yt-dlp-only --json.

Isolated install without persistent PATH changes: install.ps1 -InstallDir DIR -NoProfile or install.sh --install-dir DIR --no-profile. The Windows bootstrap execution policy is process-scoped — it does not change your user policy. If you already run Node.js 24, npm i -g flucto also works but is not required.

Commands

Every command supports -j (--json). Human output and machine output come from the same engine.

flucto search "<keyword>"        # integrated search across 12 sites
flucto download <url>            # MP4/MP3 download (d)
flucto batch <file>              # batch from a URL list (b)
flucto transcript <url>          # captions → Markdown (t)
flucto md <url>                  # Markdown with frontmatter (m)
flucto channel to-md <@handle>   # whole channel → Markdown folder
flucto info <url>                # metadata (i)
flucto formats <url>             # available formats (f)
flucto languages <url>           # caption language list (l)
flucto doctor                    # binary health check (doc)
flucto setup                     # provision yt-dlp/ffmpeg (s)
flucto update check|download|apply

batch and channel to-md always create a dedicated subfolder under --out (e.g. notes/handle-channel-md-20260829-…/) — files never mix.

fl transcript vs fl md

  • /t (transcript) — same format as the desktop app: title, metadata, timestamped paragraphs.
  • /m (md) — document-oriented: YAML frontmatter + thumbnail. Great for Obsidian/blog pipelines.

Global options

--json, -jFinal result as JSON on stdout
--progress-json, -pProgress events as NDJSON on stderr
--format, -fOutput format: mp4 | mp3 | md (where supported)
--quality, -qVideo quality preset (4k … worst)
--audio-quality, -aAudio quality preset (320kbps … worst)
--language, -lCaption language code or auto
--stdout, -sMarkdown to stdout instead of a file
--output-dir, -oBase output directory (default: cwd)
--limit NMax videos for channel to-md (default 100, max 5000)
--concurrency, -cConcurrent jobs (1–16)
--cookies PATHNetscape cookies.txt (bot-check workaround)
--cookies-from-browser BExtract cookies from a browser (chrome[:profile] …)
--proxy URLRequest proxy (http/socks5)
--impersonate Tyt-dlp impersonation target (e.g. chrome)
--bin-dir / --yt-dlp / --ffmpegManual binary paths
--force / --check-only / --yt-dlp-onlySetup: re-download / check only / yt-dlp only

Markdown conversion

Captions are parsed from JSON3, XML/SRV3 and VTT, stripped of markup, and grouped into paragraphs by silence gaps. If the requested language is missing, Flucto falls back (base language → original ASR → alternates) up to 3 candidates — and says unavailable when there is truly nothing.

# list caption languages
fl l "https://youtu.be/…" -j

# Korean captions to stdout
fl t "https://youtu.be/…" -l ko -s

# a channel into a notes folder
fl channel to-md "@handle" --limit 100 -o ./notes -l ko

Rate limits (429) meet exponential backoff; repeated failures open a circuit breaker for 60s and return SERVICE_UNAVAILABLE. That is your cue to add cookies or a proxy.

Cookies · proxy · env

When YouTube asks to "sign in to confirm you're not a bot", attach cookies or a proxy. Flags take precedence over environment variables.

--cookies / FLUCTO_COOKIESNetscape cookies.txt path (recommended)
--cookies-from-browserExtract from a local browser — may fail on platform keychains
--proxy / FLUCTO_PROXY / HTTPS_PROXYRequest proxy
FLUCTO_IMPERSONATEcurl-impersonate target
FLUCTO_OUTPUT_DIRDefault output directory
FLUCTO_BIN_DIR / FLUCTO_YT_DLP_PATH / FLUCTO_FFMPEG_PATHBinary location control
FLUCTO_SKIP_BINARIES=1Skip automatic binary download during install
NO_COLOR=1Disable ANSI colors

AI agents

The CLI was designed for agents from day one: result JSON on stdout, progress NDJSON on stderr — cleanly separated for pipes.

# parse just the final result
fl t "URL" -j 2>/dev/null | jq .filePath

# watch progress while it runs
fl channel to-md "@handle" -o ./notes --progress-json

Exit codes

0success
1usage error
3doctor/setup — binary problem
4download/update failure
5transcript/md failure (no captions, rate limit …)
7batch — some items failed (counts in the result JSON)

Just tell your agent: "Install the Flucto CLI from the GitHub release cli-setup.zip (it brings its own Node runtime), then turn this channel's recent captions into timestamped Markdown notes in ./notes: https://youtube.com/@handle"

Desktop app

The same TypeScript engine behind a GUI: batch queue, format presets, download history, integrated search across 12 sites, and a captions→Markdown panel. Installers for Windows, macOS and Linux live on GitHub Releases.

  • /Integrated search — per-site counts, native/index attribution, and real errors under Search sources
  • /Advanced network settings — cookies.txt/proxy from the UI (same engine as --cookies)
  • /yt-dlp auto-refresh — follows the official nightly channel so extractors stay current
  • /App updates — electron-updater on Windows/Linux; unsigned macOS downloads a verified DMG for manual replacement

Only need the CLI? Skip the app — cli-setup.zip brings its own Node runtime. Want fl alongside the app? Same ZIP or npm i -g flucto — same settings, same engine.

Troubleshooting

RATE_LIMITED / 429YouTube bot-check. Attach cookies.txt or a proxy. If the circuit breaker opened, retry after 60s
TRANSCRIPT_UNAVAILABLEThis media has no captions. Check with fl l URL -j
yt-dlp extraction failuresfl s -j refreshes yt-dlp — most YouTube breakage ends here
ffmpeg errorsTranscripts do not need ffmpeg. Downloads do — fl s -j
command not found after installOpen a new shell. Still missing? Add the install prefix's bin dir to PATH — in PowerShell use flucto/fl.cmd, not fl