I build systems.
Useful, interesting, or efficient —
ideally all three.
AI undergraduate at North China University of Science and Technology, since 2023.
Featured · 01 — Research
Project page →
ANVIL: Accelerator-Native Video Interpolation via Codec Motion Vector Priors
Real-time 30→60 fps video frame interpolation on mobile NPUs by reusing H.264 motion vectors instead of learned optical flow. 12.8 ms 1080p inference at 8-bit integer precision; 28.4 ms median end-to-end latency on Snapdragon 8 Gen 3.
- 12.8 ms
- 1080p NPU inference, 8-bit integer
- 28.4 ms
- Median end-to-end latency, Snapdragon 8 Gen 3
- 30 → 60 fps
- Real-time frame doubling on mobile
Featured · 02 — Competition
An edge assistive system for blind and low-vision users. TongXing runs NPU perception, GPU AgentCore, and CPU offline speech on one phone, keeping obstacle warning local while a tool-using voice agent closes touch-first app tasks through MCP tools and Android accessibility actions.
Featured · 03 — OSS
open-ani/animeko
★ 19.7kI contribute features and issue fixes to Animeko, an open-source anime player — a precious experience in how multimedia systems serve real-world applications, and in building a large-scale open-source project for real. My work spans animeko, mediamp, and anitorrent: player and cross-platform support (Windows ARM64, Linux rendering, touch) and media acquisition (PikPak, HLS).
- fix(input): handle touch and mouse transitions+959 / -190 #3223
- feat(pikpak): support explicit BT caching over HTTPS+77 / -3 #3141
- feat: add windows arm64 download entry+3 / -0 #58
- fix(desktop): isolate bundled Linux libraries from the global search path+309 / -25 #3261
- feat(player): add a playback speed scope toggle and digit shortcuts+284 / -44 #3227
- perf(theme): generate the color scheme once per theme scope+80 / -40 #3236
- fix(desktop): keep the CMP internals resolved reflectively by the touch bridge+7 / -0 #3234
- feat(desktop): publish Windows ARM64 packages and rework WoA64 SQLite+508 / -224 #3222
- fix(player): swipe-to-seek cancelled when drag starts inside the cancel area+371 / -144 #3212
- fix(desktop): make the bundled sqlite guard structurally precede the driver+330 / -21 #3216
- fix(desktop): handle touch on Windows caption buttons+69 / -5 #3221
- fix(mpv): default hwdec-threads=1 on Windows ARM64+11 / -0 #52
- feat(ffmpeg): bundle dav1d for AV1 software decoding on desktop+337 / -9 #53
- feat(player): add configurable playback speed controls+1,319 / -511 #3187
- feat(player): enable WSOLA audio time-stretch and embedded subtitles on Android+50 / -17 #3204
- fix(desktop): preload bundled libsqliteJni with RTLD_GLOBAL on Linux+119 / -0 #3195
- feat(desktop): enable mpv backend on Linux x64 and Windows ARM64+40 / -108 #3197
- feat(exoplayer): add opt-in native WSOLA audio time-stretch+2,179 / -2 #47
- fix(mpv): skip event callbacks when no listener is registered+2 / -1 #49
- feat(desktop): support native Windows touch input+1,063 / -9 #3169
- feat(mpv): add Windows ARM64 zero-copy runtime+193 / -59 #45
- fix(mpv): run Windows x64 native smoke tests+60 / -32 #42
- feat(mpv): add Linux OpenGL playback support+1,930 / -66 #40
- feat(player): improve Android seek interactions+825 / -62 #3161
- feat(player): support video screenshots on Android+220 / -4 #3156
- feat(desktop): add Windows ARM64 build support+701 / -26 #3155
- fix(player): improve keyboard shortcut behavior+44 / -5 #3159
- feat(appimage): support incremental updates+705 / -69 #3149
- feat(desktop): support Linux dynamic color+185 / -4 #3146
- fix(desktop): stabilize Linux AppImage runtime+32 / -1 #3144
- fix(desktop): use SwiftShader for JCEF on Linux+5 / -0 #3145
- fix(player): enable keyboard shortcuts in touch mode+946 / -413 #3137
- feat(hls): 引入实验性 HLS 贴片广告过滤+1,760 / -17 #3097
- fix(ci): pass release tag to Gradle explicitly+9 / -6 #35
- 添加 Windows ARM64 FFmpeg runtime 支持+352 / -34 #32
- 添加 Windows ARM64 native runtime 支持+258 / -16 #3
- feat(pikpak): 引入 PikPak 云端离线下载作为 BT 备选方案+3,054 / -41 #2978
Featured · 04 — Product
bilby
★ 27A native Android bilibili client I build for myself. The user is the one deciding: it shows what you subscribed to, not what it decided you would like. Features get settled as architecture instead of added as special cases, and the implementation follows the platform's current recommended approach rather than working around it.
Featured · 05 — Community
Open-source community notes
Small, targeted upstream contributions and bug reports outside my long-running project work, grouped by theme — build and media tooling, editor and desktop fixes, and one diagnosed issue.
- Build & media tooling
- CMake bundled liblzma ARM64 BCJ filters
Merged upstream into Kitware/CMake. Enables `HAVE_DECODER_ARM64` / `HAVE_ENCODER_ARM64` in CMake's reduced bundled liblzma build, fixing `cmake -E tar` failing with `Lzma library error: Invalid options` on ARM64+LZMA2 7-Zip archives. Verified on native Windows ARM64 and Linux AArch64 (Fedora WSL), with a new RunCMake regression test.
+54 / -0 !12202 - pikpakcli time-range download
Merged upstream. Adds a `--time-range` option for downloading a clipped segment from a single remote video through ffmpeg stream copy, with tests for parsing, output names, media URL selection, and missing-ffmpeg errors.
+496 / -140 #64 - media-kit Windows ARM64 libmpv
Merged upstream. Adds Windows ARM64 libmpv support to media-kit for Kazumi, a Dart anime streaming app built around custom source rules, online playback, danmaku, and real-time super resolution.
- Editor & desktop
- fresh vi-mode behavior & Windows ARM64 releases
Two merged patches to sinelaw/fresh, one of my everyday editors: vi-mode delete/change/yank operations now follow expected unnamed-register behavior, and the release pipeline ships Windows ARM64 artifacts for Windows on Arm devices.
- DankMaterialShell WiFi connection progress
Merged upstream. Exposes `isConnecting` / `connectingSSID` from the DMS network service so the shell shows a row-level connecting state with a spinner and blocks duplicate attempts while a WiFi connection is in progress.
+59 / -13 #2684 - Diagnosed issues
- llama.cpp CJK tool-call issue
Diagnosed a llama.cpp CJK tool-call history pollution bug around `ensure_ascii=true` argument serialization, in the parser/tool-call subsystem later reshaped by the autoparser refactor.
Publications
All publications →- 2026 arXiv Training Code
ANVIL: Accelerator-Native Video Interpolation via Codec Motion Vector Priors
Shibo Liu
Preprint · arXiv preprint
- 2026 GitHub
RAFNet: A Relation-Aware Adaptive Fusion Network for Dense Classroom Student Behavior Recognition
Yongying Xia*, Elankovan A. Sundararajan, Shibo Liu, Lei Xiao
Under review · The Visual Computer