Skip to content
CAI
Software that uses CAICheck a score

iawia002/lux

51.5

Weak · 24 September 2026

8.9k

lines of production code

Go

with JavaScript

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Lux is a command-line utility for downloading video, audio, and image content from a wide variety of online platforms. It supports extraction from major services like YouTube, TikTok, and Reddit, as well as numerous regional and niche sites. The system handles complex media processing tasks, including playlist management, multi-threaded downloads, and video/audio merging with subtitle embedding.

How it got here

2018 — Platform expansion and architecture refactoring

21 changes.

The project was renamed to Lux and underwent significant architectural improvements, including a centralized HTTP request module and a structured downloader with multi-threading support. This period focused on expanding platform compatibility by adding extractors for numerous video and image services, while simultaneously refactoring existing extractors for major platforms like YouTube and Bilibili.

2019–2024 — platform expansion and CI automation

12 changes.

This period focused on significantly expanding the tool's capabilities by adding extractors for a wide variety of new video and audio platforms, including social media, streaming services, and music sites. Concurrently, the project improved its development workflow by automating CI testing for each extractor and upgrading the Go environment.

Features

Add NetEase Music video and MV extraction

Added support for extracting video and music video (MV) content from NetEase Music (music.163.com). The new extractor parses the page to retrieve the video title, direct download URL, and file size, returning the data as a video stream. Tests confirm functionality for both standard videos and MVs.

extractors/netease · high confidence

Add Pixivision extractor

Added support for downloading images from Pixivision. The new extractor parses HTML to retrieve image URLs and metadata, registering the 'pixivision' site for content extraction.

extractors/pixivision · high confidence

Add QQ video extractor

Added a new extractor for QQ video content, enabling the tool to download videos from QQ's video platform. The implementation includes the core extraction logic, handling of video metadata and stream generation, along with corresponding unit tests to verify functionality.

(repo-wide) · high confidence

Add Reddit video and image extraction

Users can now download MP4 videos and GIFs from Reddit posts. The new extractor supports video content by fetching multiple quality streams (720p, 480p, 360p, 240p, 220p) along with separate audio tracks, as well as direct MP4 downloads for GIFs and standard image downloads for static posts.

extractors/instagram, extractors/reddit · high confidence

Add TikTok video extraction support

Users can now download videos from TikTok. The new extractor retrieves the video URL, title, and file size, supporting both standard title extraction and fallback to the description when the page title is generic. Tests confirm the extractor correctly parses video metadata and download links for TikTok URLs.

extractors/mgtv, extractors/tiktok · high confidence

Add Zhihu video download support

The Zhihu extractor now supports downloading videos from zhihu.com. The new implementation parses the video ID from the page, fetches metadata from the Zhihu API, and provides three quality streams (FHD, HD, SD) with corresponding URLs, file sizes, and formats. A corresponding test case is included to verify the extraction logic.

extractors/zhihu · high confidence

Add extractors for Bcy, Tumblr, and Universal sources

Users can now download media from Bcy (half-creative), Tumblr (images and videos), and generic direct links via a new universal extractor. The Bcy extractor parses JSON data to retrieve image URLs, while the Tumblr extractor handles both image galleries and embedded video content. The universal extractor allows downloading files from any direct URL by detecting the content type and file extension.

extractors/bcy · high confidence

Add ixigua and toutiao video extractor

Users can now download videos from ixigua.com and toutiao.com. The new extractor supports multiple URL formats, including direct links, short links, and mobile links, and extracts video streams with different quality options.

extractors/ixigua · high confidence

Add support for Zing MP3 and Zing Video Clip

Users can now extract audio and video content from Zing MP3 (mp3.zing.vn, zingmp3.vn) and Zing Video Clip URLs. The new extractor handles song downloads, video clips, and lyrics, supporting both audio and video formats with multiple quality options.

extractors/zingmp3 · high confidence

Add support for downloading Douyin (TikTok China) videos and image albums

Users can now download videos and image albums from Douyin. The extractor handles short links, dynamically generates required cookies and request signatures, and supports both video and image content types.

extractors/douyin · high confidence

Add support for downloading content from Geekbang

Users can now extract and download video content from Geekbang (time.geekbang.org). This change introduces a new extractor that retrieves course details, obtains video playback authentication, and parses the resulting M3U8 streams to provide downloadable video files.

extractors/geekbang · high confidence

Add support for downloading videos from Haokan (Baidu)

Users can now extract video content from Haokan (haokan.baidu.com). The new extractor handles both older page structures (video tags) and newer JSON-based layouts, returning the video title, file size, and download URL.

extractors/haokan · medium confidence

Add support for downloading videos from Tangdou

A new extractor for tangdou.com has been added, enabling users to download individual videos from the platform. The implementation parses the video URL and title from the page, constructs a download stream, and includes corresponding unit tests to verify the extraction logic.

extractors/tangdou, extractors/vk, extractors/yinyuetai · high confidence

Add support for downloading videos from xiaohongshu.com

Users can now download video content from xiaohongshu.com (Little Red Book). The new extractor parses the page to retrieve the video URL from the 'backupUrls' field in the HTML, extracts the title, and provides the video stream for download. A corresponding test case verifies the extraction logic against a sample URL.

extractors/xiaohongshu · high confidence

Add support for extracting content from www.threads.net

Users can now download media from Threads posts. The new extractor handles single and multiple image or video posts, as well as hybrid albums, by parsing the site's HTML to retrieve media URLs and file sizes.

extractors/threads · high confidence

Add support for extracting video from Miaopai

Users can now download videos from Miaopai (miaopai.com). The new extractor fetches video data via the Miaopai API, parses the response, and provides the video stream for download.

extractors/miaopai · high confidence

Add support for extracting videos from XVIDEOS

Users can now download videos from XVIDEOS. The new extractor fetches the page, parses the HTML to find low and high quality video URLs, and provides streams for both resolutions.

extractors/xvideos · high confidence

Added IQIYI video extractor

The application now supports downloading videos from the IQIYI and IQ.COM platforms. This new extractor handles video metadata extraction, URL parsing for both standard and short links, and integrates with the existing download pipeline. A corresponding test suite validates the extraction of video titles, sizes, and qualities for various video formats.

extractors/iqiyi, extractors/streamtape · high confidence

Added Pinterest video extraction support

Users can now download videos from Pinterest. This change introduces a new extractor for the Pinterest domain, enabling the tool to fetch and save video content from that site.

extractors/pinterest · high confidence

Added support for EPORNER, HUPU, HUYA, and XIMALAYA

Users can now download videos from EPORNER, HUPU (虎扑), HUYA (虎牙), and audio from XIMALAYA (喜马拉雅). The extractors package has been restructured with a new types.go defining the core Data and Stream structures, and the old douyin.go file has been removed.

extractors · high confidence

Automated CI workflow generation for extractors

A new automated process now generates individual GitHub Actions workflows for each extractor module, enabling each to be tested separately. The system reads the 'extractors' directory, skips the 'universal' folder, and creates a corresponding '.yml' file in '.github/workflows/' using a template. Each generated workflow is configured to run on Go 1.24, ensuring consistent and isolated testing for every extractor.

script · high confidence

Expanded video and audio extraction support for new and existing sites

The application now supports downloading content from a wider range of platforms, including Bitchute, Odysee, Rumble, VK, Zing MP3, and Threads, alongside existing support for sites like YouTube, Pinterest, and Reddit. The app also introduces new command-line flags to download audio only, embed subtitles into video files, and download video captions. Additionally, users can now specify output paths and names, control playlist item ranges, and utilize Aria2 for downloads.

app · high confidence

The \request\ package now provides a unified way to perform HTTP requests with built-in retry logic, automatic handling of cookies (including Netscape format), and support for user-agent and referer headers. This centralizes network logic, ensuring consistent behavior across the application.

request · high confidence

New utility functions for playlist selection, concurrent downloads, and media processing

The \utils\ package introduces new capabilities for handling downloads and media processing. Users can now specify a range or list of items to download from a playlist using the new \NeedDownloadList\ function, which parses comma-separated and range-based selections (e.g., '1-3, 5, 7-8'). A \WaitGroupPool\ is added to manage concurrent downloads with a configurable limit. Additionally, \utils/ffmpeg.go\ provides functions to merge video/audio files and embed subtitles into video files, while \utils/utils.go\ adds helpers for domain extraction, file size checking, and string matching.

utils · high confidence

Behavioural changes

Add default HTTP headers for requests

The application now includes a predefined set of HTTP headers (including User-Agent, Accept, and others) to be used for requests, which may affect how remote servers identify and respond to the client's requests.

config · high confidence

Extract Bilibili videos, playlists, and subtitles

The Bilibili extractor has been refactored into a dedicated package (extractors/bilibili) to support downloading individual videos, multi-part playlists, and animated series (bangumi) episodes. It now handles Bilibili's API changes by fetching and caching a temporary authentication token, which resolves previous cookie and download failures. The update also adds support for 8K video quality, subtitle extraction, and the b23.tv short URL domain.

extractors/bilibili · high confidence

Introduce HTML parsing utilities for extracting titles and image URLs

The parser package now provides helper functions to parse HTML content. The new GetImages function extracts image URLs from HTML by class name, and the Title function retrieves the page title by checking h1 tags, Open Graph meta tags, and the title element in that order. Tests have been added to verify the behavior of these parsing utilities.

parser · high confidence

Project renamed from Annie to Lux

The project has been renamed from 'Annie' to 'Lux'. This change is reflected in the main entry point (main.go) and the removal of the previous annie.go file, along with updates to configuration files like .goreleaser.yml and Cask.toml to reflect the new name.

(repo-wide) · high confidence

Refactor YouTube extractor to use external library and support playlists

The YouTube extractor has been refactored to use the kkdai/youtube library for video and playlist extraction. This change enables support for downloading video and audio streams separately and merging them, as well as extracting captions. The extractor now handles both single video and playlist URLs, with playlist extraction using goroutines for concurrent processing. Tests have been updated to cover normal videos, signature-protected videos, playlists, and edge cases like 404 errors.

extractors/youtube · high confidence

Refactored downloader architecture with structured options and improved output formatting

The downloader module has been restructured to use a dedicated \Options\ struct for configuration, replacing the previous flat parameter approach. This change introduces support for multi-threaded downloads, configurable retry attempts, chunk size, and output path/name customization. Additionally, the download progress bar has been upgraded to version 3 of the \cheggaaa/pb\ library, and the output display now provides a clearer, colorized summary of available streams and captions.

downloader · high confidence

Removal of VideoData utility struct

The VideoData struct, previously defined in the utils package, has been removed from the codebase. This change eliminates a shared data structure used for video metadata (site, title, URL, size, and extension), likely as part of a broader refactoring to better structure the extractors module.

extractors/utils · high confidence

Test coverage

Added test utility functions for extractor validation

Added new test utilities in the test package to standardize validation of extractor outputs. The changes introduce helper functions (Check, CheckData, CheckError) that verify video title, quality, and size against expected values, and ensure streams are not empty during testing.

test · high confidence

Dependencies

Updated Go dependencies and upgraded to Go 1.24

The project's Go module dependencies have been updated, including the Go version to 1.24. Key library updates include goquery v1.10.3, colly v2.2.0, gojq v0.12.17, and kkdai/youtube/v2 v2.10.5, alongside various indirect dependency upgrades.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 48 → 52 (+3.2)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 63 → 75 (+11.7)
  • Architecture 100 → 100 (-0.1)
  • Maturity 53 → 52 (-1.2)
  • Readiness 59 → 48 (-11.0)
  • Security 35 → 45 (+9.9)

Resolved (83)

  • (anonymous) (cyclomatic 17) (extractors/douyin/sign.js)
  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Duplicated block (10 lines × 2) (downloader/downloader.go)
  • Duplicated block (10 lines × 2) (extractors/eporner/eporner.go)
  • Duplicated block (10 lines × 2) (extractors/tumblr/tumblr.go)
  • Duplicated block (12 lines × 2) (downloader/downloader.go)
  • Duplicated block (12 lines × 2) (extractors/threads/threads.go)
  • Duplicated block (13 lines × 2) (extractors/miaopai/miaopai.go)
  • Duplicated block (13 lines × 2) (extractors/pinterest/pinterest.go)
  • Duplicated block (14 lines × 2) (extractors/facebook/facebook.go)
  • Duplicated block (14 lines × 2) (extractors/haokan/haokan.go)
  • Duplicated block (14 lines × 3) (extractors/hupu/hupu.go)
  • Duplicated block (15 lines × 2) (extractors/bitchute/bitchute.go)
  • Duplicated block (16 lines × 2) (downloader/downloader.go)
  • Duplicated block (18 lines × 2) (extractors/instagram/instagram.go)
  • Duplicated block (9 lines × 2) (extractors/weibo/weibo.go)
  • Duplicated block (9 lines × 3) (extractors/douyu/douyu.go)
  • Duplicated block (9 lines × 3) (extractors/odysee/odysee.go)
  • High CVE: [GHSA redacted] (go.mod)
  • …and 63 more

New (188)

  • (anonymous)::(anonymous)::update (cognitive 84) (extractors/douyin/sign.js)
  • (anonymous)::(anonymous)::update (cyclomatic 33) (extractors/douyin/sign.js)
  • ClassTooLong: douyinData (extractors/douyin/types.go)
  • Dependency pinned to a stale untagged commit: github.com/MercuryEngineering/CookieMonster
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (10 lines × 2) (extractors/instagram/instagram.go)
  • Duplicated block (10–11 lines × 2) (extractors/tumblr/tumblr.go)
  • Duplicated block (11 lines × 2) (extractors/ixigua/ixigua.go)
  • Duplicated block (11–12 lines × 3) (extractors/douyu/douyu.go)
  • Duplicated block (13 lines × 2) (extractors/pinterest/pinterest.go)
  • Duplicated block (13 lines × 2) (extractors/threads/threads.go)
  • Duplicated block (13–14 lines × 2) (downloader/downloader.go)
  • Duplicated block (15 lines × 2) (extractors/bcy/bcy.go)
  • Duplicated block (15 lines × 2) (extractors/netease/netease.go)
  • Duplicated block (15–16 lines × 2) (extractors/haokan/haokan.go)
  • Duplicated block (16 lines × 2) (downloader/downloader.go)
  • Duplicated block (17–18 lines × 2) (extractors/miaopai/miaopai.go)
  • Duplicated block (17–18 lines × 6) (extractors/bitchute/bitchute.go)
  • Duplicated block (18 lines × 2) (extractors/pinterest/pinterest.go)
  • …and 168 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

iawia002/lux was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 24 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit dd00f6d258d80b6684a0b9402d7124e5c18ef42f — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-5f8d0eb43fd7.