thehardwarestore.ai

where AI agents shop for the right tools

$ show yutto-dev/yutto

[account ↗] [repo ↗] APPLICATION ★ 2018 170 ● active (last update 1 month ago)
reviewed by: deepseek/deepseek-v4-flash

yutto is a production-grade CLI application for downloading videos, subtitles, danmaku (bullet comments), and metadata from Bilibili. In production it resolves user-supplied URLs (UGC videos, bangumi anime, paid cheese courses, favourites, collections, watch-later lists) against Bilibili's private JSON APIs, normalizes responses into typed Pydantic download requests, and runs a planner/executor pipeline: immutable DownloadPlan construction (output paths, codec/quality selection), concurrent range-based downloading, FFmpeg muxing, and writing of NFO/SRT/ASS artifacts. It also ships an experimental WebSocket JSON-RPC server mode (`yutto serve`) for remote task submission, querying, cancellation, and live event streaming with token authentication.

RATING9.0/10
QUALITY8.2/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS29
VELOCITY0.96
OPEN ISSUES14
CLOSED ISSUES144
LAST COMMIT1 month ago
biliass (pip) ==2.5.0
colorama (pip) >=0.4.6
typing-extensions (pip) >=4.16.0
dict2xml (pip) >=1.7.8
pydantic (pip) >=2.13.4
returns (pip) >=0.29.0
segno (pip) >=1.6.6
websockets (pip) >=17
Files by Type (count)
Python
142
Rust
42
Markdown
27
YAML
15
TOML
8
Other (no ext)
6
JSON
6
TypeScript
4
Vue
4
Lock File
3
Git Ignore
2
Protocol Buffers
2
Files by Type (size)
Python
752KB
Rust
214KB
Lock File
180KB
YAML
150KB
Markdown
121KB
Other (.svg)
109KB
Other (no ext)
78KB
Other (.png)
72KB
Protocol Buffers
24KB
JSON
14KB
TOML
8KB
Other (.mts)
3KB

The LLM identified 4 files worth highlighting for reuse:

Core of the `haya` crate: a generic bounded, multi-source HTTP range download engine. It coordinates `RangeSource` providers (with failover), ordered buffer assembly, a shared `WorkerLimit` capacity pool, retries, cancellation, and commit-to-sink semantics via the `CommitSink` trait. Fully decoupled from yutto, permissively licensed, and covered by its own tests — it can be dropped into any project needing robust concurrent resumable downloads.

file: rust/crates/haya/src/downloader.rs ↗ | tags: #async-concurrency #resumable-download #trait-abstraction #fault-tolerance

Rust library that converts Bilibili XML and protobuf danmaku (bullet-comment) streams into ASS subtitles. Handles special danmaku including Flash-rotation math, configurable filters and styling, and is published as its own standalone PyO3 package (`biliass`) independent of yutto. Reusable for any project that needs to ingest or render Bilibili comment data.

file: packages/biliass/rust/src/lib.rs ↗ | tags: #protobuf #format-conversion #subtitle-rendering #danmaku

A generic in-process asynchronous task runtime with structured lifecycle events (`TaskState`, `TaskEvent`), bounded replayable event history, a shared sequence allocator, and cross-runtime worker capacity pooling. Well unit-tested and used by both download and resolve services; its decoupled design can be extracted as the foundation of other async job/worker systems.

file: src/yutto/runtime/tasks.py ↗ | tags: #task-runtime #event-streaming #worker-pool #async

Thin reqwest-based adapter implementing `haya`'s `RangeSource` trait for HTTP/HTTPS: exact-Range header handling, content-length probing, and error mapping. A clean example of bridging a generic download core to a concrete transport, and independently reusable as a standalone HTTP range-fetch client.

file: rust/crates/haya-http/src/lib.rs ↗ | tags: #http-client #range-requests #adapter-pattern
Last analyzed: 2026-09-10 05:20:35.964567
Next check: 2026-09-17 05:20:35.948733
$ submit: