Skip to main content

yt-dlp-nicocomments

A yt-dlp postprocessor plugin that converts Niconico comments to an ASS subtitle track.

Sample comments in many colors, sizes, and scripts scrolling over a dark blue background

Fonts

The plugin lays out and draws comments with:

The package includes these fonts under the SIL Open Font License 1.1. With --embed-subs, the plugin saves the video as an MKV file and attaches the fonts to it (unless embedfonts=false).

To keep the video file small, the plugin removes the unused glyphs from the fonts using fontTools.

Install

If yt-dlp is installed with uv or pip, install the plugin in the same environment:

uv tool install yt-dlp --with yt-dlp-nicocomments
pip install -U yt-dlp-nicocomments

If you use the yt-dlp executable, download the .whl file from the latest release and put it in a yt-dlp plugin directory:

Platform Plugin directory
macOS, Linux ~/.config/yt-dlp/plugins/
Windows %APPDATA%\yt-dlp\plugins\

To make sure that the release workflow of this repository built the file, run:

gh attestation verify yt_dlp_nicocomments-*.whl -R hiroki-io/yt-dlp-nicocomments

The yt-dlp executable cannot load fontTools from the plugin directory. To attach smaller fonts, install fontTools so that the pyftsubset command is on PATH, for example with brew install fonttools or pipx install fonttools.

To use the code from a clone of this repository, download the fonts and put the repository in a plugin directory:

python3 ~/yt-dlp-nicocomments/tools/font_data.py
mkdir -p ~/.config/yt-dlp/plugins
ln -s ~/yt-dlp-nicocomments ~/.config/yt-dlp/plugins/yt-dlp-nicocomments

Usage

yt-dlp --embed-subs --use-postprocessor "NicoComments:when=video" \
  https://www.nicovideo.jp/watch/sm9

when=video is necessary because the plugin must run before yt-dlp writes the subtitles.

Options

Options are passed after the postprocessor name (NicoComments:), separated by semicolons:

Option Values Default Description
lang ja, en, or zh, separated by commas ja Comment languages. Each language becomes a separate subtitle track.
comments A number of comments, or all 0 Minimum number of comments per language. See Past comments.
nglevel high, medium, low, or none medium Hide comments that many users added to their NG lists. high hides the most comments.
opacity A number from 0 to 1 1 Comment opacity
writejson true, yes, 1, false, no, or 0 false Write comments to a JSON file
defaulttrack true, yes, 1, false, no, or 0 true Mark the subtitle track of the first comment language as default
embedfonts true, yes, 1, false, no, or 0 true Attach the fonts to the video file when --embed-subs is used

Example:

--use-postprocessor "NicoComments:when=video;lang=ja,en;nglevel=high"

Shortcut

To shorten the command, define an alias in the yt-dlp configuration file ~/.config/yt-dlp/config:

--alias --nico "--embed-subs --use-postprocessor NicoComments:when=video"

Then use the alias instead of the options:

yt-dlp --nico https://www.nicovideo.jp/watch/sm9

Save only the comment track

To save the comment track as an ASS file without the video, use --write-subs and --skip-download:

yt-dlp --skip-download --write-subs --use-postprocessor "NicoComments:when=video" \
  https://www.nicovideo.jp/watch/sm9

The ASS file does not contain the fonts, so install the font files linked in Fonts on the computer that plays it.

Past comments

The comment API returns only the recent comments of a video. When these comments are fewer than comments, the plugin loads older comments until it has at least that many comments for each language, or until no older comments are left. comments=all loads all past comments.

Fetching past comments requires a free Niconico account. Pass your cookies to yt-dlp, for example with --cookies-from-browser:

yt-dlp --cookies-from-browser chrome --embed-subs \
  --use-postprocessor "NicoComments:when=video;comments=10000" \
  https://www.nicovideo.jp/watch/sm9

Smooth scrolling in mpv

mpv redraws subtitles only when the video frame changes. To update them at the display refresh rate, load the mpv script nicocomments-display-fps.lua. The script converts the video to the refresh rate of the display that shows the mpv window.

The script adds an fps video filter. If mpv or IINA saves the playback position, it also saves this filter, and the filter stays in effect when you resume the video without the script.

mpv

Download the script and run mpv with it:

mpv --script=/path/to/nicocomments-display-fps.lua --video-sync=display-resample video.mkv

nicocomments-play.sh runs the same command and passes its arguments to mpv. Put it in the same directory as nicocomments-display-fps.lua:

chmod +x nicocomments-play.sh
./nicocomments-play.sh video.mkv

On Windows, use nicocomments-play.bat in the same way:

nicocomments-play.bat video.mkv

To use the script for all videos, put it in the mpv scripts directory and add video-sync=display-resample to mpv.conf:

Platform mpv scripts directory
macOS, Linux ~/.config/mpv/scripts/
Windows %APPDATA%\mpv\scripts\

IINA

IINA plays videos with mpv, so it can use the same script. Open Settings > Advanced, select Enable advanced settings, and add these entries to Additional mpv options:

Name Value
scripts Absolute path to nicocomments-display-fps.lua
video-sync display-resample

If you already set up the mpv scripts directory and mpv.conf, you can instead select Use config directory and choose ~/.config/mpv. Restart IINA after you change these settings.

Burn the comments into the video

To burn the comment track into the video, run this command with an FFmpeg build that includes libass:

ffmpeg -i video.mkv -vf subtitles=video.mkv -c:a copy video-burned.mp4

FFmpeg encodes the video again, so this takes time and lowers the quality.

Metadata

Release files for yt-dlp-nicocomments 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for yt-dlp-nicocomments 0.2.1
File Size Uploaded
yt_dlp_nicocomments-0.2.1.tar.gz 26.5 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for yt-dlp-nicocomments 0.2.1
File Interpreter ABI Platform
yt_dlp_nicocomments-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 53.0 MB

Release files / yt_dlp_nicocomments-0.2.1.tar.gz

Download URL yt_dlp_nicocomments-0.2.1.tar.gz
Size 26.5 MB
Tags Source
SHA-256 checksum
How to use checksums
3bd866ba984149ccd74ae4c163c552f15509acc3657069ecffb90ef0ebe8132d
BLAKE2b-256 checksum
How to use checksums
553be0b1fab66a8ae53a523576c1db0272a83831c09ae53a74db5f8bb6714b83
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 10, 2026.

Transparency log

Release files / yt_dlp_nicocomments-0.2.1-py3-none-any.whl

Download URL yt_dlp_nicocomments-0.2.1-py3-none-any.whl
Size 26.5 MB
Tags Python 3
SHA-256 checksum
How to use checksums
d9185b74dd52b91188b977cfa86ff9a4bdc8d3e2a98c73f6bca2d053271ace57
BLAKE2b-256 checksum
How to use checksums
4f05c64767f4ef126f9e1a0488c6ca5ef561579a001cc2ddeddbb8dd275b9ac6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 10, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page