Package Information
Available Nodes
Documentation generating…
Documentation
n8n-nodes-videocaptioner-asr
This is an n8n community node. It lets you transcribe audio into subtitles inside your n8n
workflows using the two free speech recognition interfaces that ship with
VideoCaptioner:
| Engine | Value | Service | Notes |
|---|---|---|---|
| B 接口 | bcut |
Bilibili Bcut (必剪) member.bilibili.com/x/bcut/rubick-interface |
Multipart upload, model_id 8 |
| J 接口 | jianying |
JianYing / CapCut (剪映) lv-pc-api-sinfonlinec.ulikecam.com |
ByteDance VOD upload, songs_info window |
Both engines are free and require no credentials — they are the "免费在线" engines from
VideoCaptioner's ASR configuration docs. Source parity is intentional: the request flows,
headers, signing, polling and response parsing are ported one-to-one fromvideocaptioner/core/asr/bcut.py and videocaptioner/core/asr/jianying.py.
Because this is a derivative work of GPL-3.0 code, the package is licensed under the
GNU General Public License v3.0 — see License and NOTICE.md.
n8n is a fair-code licensed workflow automation platform.
Installation
Operations
Credentials
Compatibility
Usage
Resources
Version history
Installation
Follow the installation guide in the n8n community nodes documentation.
npm install n8n-nodes-videocaptioner-asr
Operations
A single node, ASR Transcriber, with one operation: Transcribe audio.
Input
- Input Source —
Binary File(read the audio from an input binary property) orFile URL
(download the audio first). - Engine —
B Interface (Bcut / Bilibili)orJ Interface (JianYing / CapCut). - Word Level Timestamps — return one entry per word instead of one entry per sentence.
Output
Output Mode — how the result is emitted:
- Single Item (default) — one item per input item. Combine with Output Format below.
- Split Into Segments — one output item per segment, ready to be written to a sheet,
database or one file per line. Output Format does not apply in this mode.
Output Format — only shown for Single Item. Multi-select, so you get exactly what you
need and nothing else (all five are selected by default, matching earlier behaviour):Format Field Description Plain Text (One Line per Segment) txtPlain transcript, one segment per line — a clean .txtscriptPlain Text (Single Line) textWhole transcript joined without separators — handy as an LLM prompt SRT Subtitle srtSubRip document with timestamps, ready to be written as a .srtfileSubtitle Segments (JSON) segmentsArray of { index, text, startTime, endTime, start, end, words? }(startTime/endTimein milliseconds)WebVTT Subtitle vttWebVTT document with timestamps, ready to be written as a .vttfileEvery item always carries
engine,engineLabelandsegmentCountin addition to the
selected formats;rawis added when Include Raw Response is enabled. Selecting only
Plain Text (One Line per Segment) gives you justtxt, selecting only SRT Subtitle
gives you justsrt.
Options
| Option | Default | Applies to | Description |
|---|---|---|---|
| Adjust Caption End Time | 200 |
J | Milliseconds added to each segment end time |
| Include Raw Response | false |
B / J | Add the untouched upstream payload to the output |
| Max Polling Attempts | 300 |
B / J | How many times the result endpoint is polled |
| Model ID | 8 |
B | model_id for upload and task creation |
| Poll Interval (MS) | 1000 |
B / J | Delay between two result polls |
| Recognition End Time | 6000 |
J | Forwarded as songs_info[0].end_time |
| Recognition Start Time | 0 |
J | Forwarded as songs_info[0].start_time |
| Request Timeout (MS) | 120000 |
B / J | Timeout applied to each HTTP request |
| Resource File Type | auto | B | Audio container advertised to Bcut (mp3, wav, m4a, flac) |
| Sign Service URL | https://asrtools-update.bkfeng.top/sign |
J | Remote signer for J interface requests |
| Sign User Agent | n8n-nodes-videocaptioner-asr/0.2.0 |
J | User-Agent sent to the sign service |
Credentials
No credentials are required. The B and J interfaces are public free services; the node simply
talks to them directly. See the notes on rate limits below.
Compatibility
- Requires n8n 1.x and Node.js 22 or higher.
n8nNodesApiVersion: 1- No runtime dependencies: CRC32, AWS Signature V4 and the device fingerprint are implemented
locally on top of Node's built-incryptomodule, and waiting is done with thesleephelper
exported byn8n-workflow.
Known limitations
- The free services only accept audio containers (
mp3,wav,m4a,flac). A video file
must be converted to MP3 first (for example with n8n's Execute Command node andffmpeg). - Long audio is uploaded in one piece. VideoCaptioner splits audio into 10-minute chunks with
10-second overlap before calling these same services — for very long files you should chunk
upstream (or reuse VideoCaptioner) rather than relying on this node. - Both services are shared community endpoints with rate limits (VideoCaptioner caps them at
100 calls / 360 minutes per 12 hours) and no availability guarantee. The J interface additionally
depends on a third-party signing service, which is configurable via Sign Service URL. - Input audio always leaves your n8n instance and is uploaded to Bilibili / ByteDance. Do not use
these engines for confidential material. - The B and J endpoints are unofficial and may change without notice. If they do, the node
needs a matching update — the request flow lives innodes/AsrTranscriber/shared/.
License
GPL-3.0-only. See LICENSE.md and NOTICE.md.
This package is a TypeScript port of GPL-3.0 code, so it inherits that license. Two practical
consequences:
- It can be published to npm and installed in self-hosted n8n without any problem.
- It is not eligible for n8n's verified-node program (the nodes panel in n8n Cloud), because
n8n's verification guidelines
require verified community nodes to be MIT licensed. n8n additionally states that a package
should integrate a single third-party service; this one wraps two.
Accordingly, n8n.strict is false in package.json and eslint.config.mjs switches off the
single rule that demands an MIT declaration (community-package-json-license-not-default), with
the reason documented inline. Every other rule of n8n's preset remains active, and bothnpm run lint and npm run build pass.
Usage
Minimal workflow:
Read Binary File → ASR Transcriber (Binary File, B Interface)
→ Convert to File (name: transcript.srt, content: {{ $json.srt }})
Using a remote URL:
HTTP Request (download audio) → ASR Transcriber (File URL, J Interface, Word Level Timestamps)
→ Split Into Segments → Google Sheets
The srt and vtt fields are plain strings, so they can be handed straight to Convert to File
or Move Binary Data to produce subtitle files.
Development
npm install # installs @n8n/node-cli, eslint, prettier, typescript
npm run dev # start n8n with this node loaded (http://localhost:5678)
npm run lint # n8n-node lint
npm run build # n8n-node build -> dist/
The scripts/ folder contains the verification harness used while porting the two engines:
| Script | Purpose |
|---|---|
scripts/reference_values.py |
Prints reference values computed with the original Python implementation (zlib.crc32 + the AWS4 signer from jianying.py). |
scripts/compare_reference.js |
Diffs the compiled TypeScript helpers against those reference values. |
scripts/smoke.js |
Real end-to-end call against both services using a local audio file and a minimal httpRequest shim built on Node's fetch. |
npm run build
<python> scripts/reference_values.py > ref.json
node scripts/compare_reference.js ref.json
node scripts/smoke.js ./sample.mp3 both
Before publishing, replace the placeholder
author,homepageandrepositoryvalues inpackage.json(they currently readyour-github-username/dev@example.com) with your own
details — n8n's linter rejects unresolved template placeholders and empty author fields.
Publishing must go through the bundled GitHub Actions workflow
(.github/workflows/publish.yml) so the package carries an npm provenance statement.
Resources
- n8n community nodes documentation
- VideoCaptioner — the upstream project these
interfaces were extracted from - VideoCaptioner ASR configuration
Version history
0.1.0— Initial release. B interface (Bcut) and J interface (JianYing) transcription, binary
and URL input, word-level timestamps, single-item and split-segment output, SRT/TXT/VTT
generation.