Documentation

Using Subquill

A practical guide to setup, generating notes, exporting Markdown, and where your data lives. For source and releases, see the GitHub repository.

Overview

Subquill is a desktop app for macOS and Windows, built on Tauri 2 (a React front end over a Rust core). It generates study notes from the official captions of public Bilibili and YouTube videos using any OpenAI-compatible model you configure.

  • Paste one or many video URLs — Bilibili (BV links) or YouTube
  • Fetches real caption tracks, including AI and login-gated Bilibili tracks when a SESSDATA cookie is configured
  • Writes a Markdown note: a Summary plus a Section breakdown with hh:mm:ss timestamps from the captions
  • Copy, export .md, or auto-save every finished note into a folder of your choice

Getting started

Clone Subquill, build it locally, and open it. The first launch walks you through onboarding:

  • Base URL of an OpenAI-compatible API
  • Model name
  • API key — saved to disk immediately and never echoed back in the UI
  • Interface language: Chinese, English, or follow the system
  • Optional Bilibili SESSDATA cookie, only needed for login-gated or some AI caption tracks
A Test connection button in onboarding and in Settings verifies your endpoint and model before you generate anything. No endpoint yet? Subquill AMP, our hosted OpenAI-compatible gateway, is available from this site.

Subquill is source-only — no pre-built installers are published. Clone the repository, install Node.js LTS and Rust, meet the Tauri 2 prerequisites for your OS, then run npm install and npm run tauri build.

Generating notes

In the workspace, paste one video URL per line and press Generate. Before the job starts, Subquill previews each video's metadata so you know what it found:

  • Video title and duration, and which part (P) you are targeting — append ?p=2 to a Bilibili URL to pick a part
  • “Caption tracks detected” when subtitles are available
  • A cookie hint when a Bilibili video needs SESSDATA, plus a stale-cookie warning when the stored value no longer works

Long transcripts are split into chunks, generated chunk by chunk, and merged. Progress is shown as a percentage per job with a cancel button; a finished preview can be switched back to when you generated several links in one batch.

The video must have online captions. If a video has none, Subquill tells you before it spends any tokens.

Copying & exporting

  • Copy Markdown — puts the note on your clipboard
  • Save as .md — opens the native save dialog
  • Reveal in folder — jumps to the auto-saved file, if a notes folder is configured
  • Notes preview is sanitized Markdown: raw HTML is never rendered
Without a notes folder configured, results live only in the app preview — export them before starting a new job.

Settings

Settings lets you update the model endpoint and re-test the connection, choose the notes save folder, and clear stored secrets:

  • Clear API key — you will have to enter it again before generating
  • Clear cookie — some Bilibili videos will no longer be fetchable
  • Clear notes folder — stops auto-saving; existing files are untouched

Where things are stored

FilemacOS / LinuxWindows
settings.json~/.config/subquill/settings.json%APPDATA%\subquill\settings.json
auth.json~/.local/share/subquill/auth.json%LOCALAPPDATA%\subquill\auth.json

auth.json holds the API key and the optional Bilibili SESSDATA. Both files live outside the repository and outside the app bundle — never commit them anywhere.

Privacy & network

  • Subquill operates no backend services; there is no telemetry and no account
  • Caption requests go to Bilibili / YouTube APIs directly from your machine
  • Note generation sends transcript chunks only to the model endpoint you configure
  • The SESSDATA cookie is used exclusively against Bilibili's official API
  • After onboarding, secrets are kept in the Rust layer; the UI shows “configured” placeholders and never the plaintext value

Updates

Subquill is distributed as source only. Pull the latest code from GitHub and rebuild locally to update — there are no pre-built installers or in-app binary updates.