iawia002/lux
51.5
Weak · 24 September 2026
8.9k
lines of production code
Go
with JavaScript
5
measurements over time
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
Introduce a centralized HTTP request module with automatic retry and cookie support
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.