The repository provides a command-line tool for computing VMAF (Video Multi-method Assessment Fusion) scores between reference and distorted video streams. It automates preprocessing steps required for accurate VMAF assessment, including deinterlacing, scaling, frame rate adaptation, and temporal synchronization. The tool supports both CPU and GPU-accelerated VMAF computation via libvmaf and libvmaf_cuda, and can process multiple video pairs using glob patterns. The architecture follows a three-layer design: the CLI layer handles argument parsing and output formatting, the VMAF layer orchestrates preprocessing and scoring, and the FFmpeg layer provides low-level wrappers for FFmpeg/FFprobe subprocesses and filterchain management. This separation of concerns makes the FFmpeg wrapper component particularly reusable for other multimedia processing tasks. The tool outputs results in JSON, XML, CSV, or to stdout, and includes features such as automatic sync window search, reverse sync, end-sync option, VMAF model selection (HD and 4K), and CAMBI heatmap generation. It is designed for Linux and macOS, with Docker support for both CPU and GPU environments.
Gyroflow is a cross-platform desktop and mobile application for video stabilization using gyroscope and IMU data. It ingests telemetry from a wide range of cameras (GoPro, Sony, Insta360, DJI, Canon, RED, Blackmagic, etc.), applies lens distortion correction, rolling-shutter compensation, and smoothing algorithms, then exports stabilized video via FFmpeg with GPU acceleration. The architecture is a Rust core library (gyroflow-core) with a Qt/QML GUI, GPU backends (OpenCL, wgpu/Vulkan/Metal/DirectX, Qt RHI), and a rendering pipeline supporting hardware encoding. It also includes advanced features like optical-flow-based synchronization, lens calibration, adaptive zoom, and NLE plugin installation. The codebase is large and well-structured, with trait-based algorithm dispatch for distortion models, smoothing, optical flow, and pose estimation. It demonstrates strong engineering in GPU interop, signal processing, and computer vision. However, it uses a custom Rust-like dialect (macros that transpile to Rust/C++) which increases onboarding complexity, and there are many platform-specific conditionals and some unwrap-heavy error handling. The project is actively maintained with a large community and frequent updates.
This repository builds 'WWDC', an unofficial macOS application for browsing, searching, and playing WWDC session videos. It provides a native experience with features like video playback via a custom PlayerUI framework, transcript viewing with full-text search, session scheduling, bookmarks, favorites, iCloud sync via CloudKit, and video downloading. The architecture is modular, comprising main app target with embedded frameworks (PlayerUI, ConfUIFoundation, ConfCore), an XPC service for transcript indexing, and a Swift package for transcript handling. Data flows from Apple's WWDC API through a sync engine into a local Realm database, with UI built using AppKit and SwiftUI, heavy use of Combine for reactive updates, and Sparkle for auto-updates. While primarily an application, it also includes JSON fixtures and test data for transcript processing, giving it a minor hybrid character.
Gifski is a polished macOS application that converts video files into high-quality animated GIFs. The application uses a hybrid architecture: a SwiftUI frontend handles the user interface, video decoding (via AVFoundation), real-time preview compositing (via Metal shaders), and system integration (Share Extension, Shortcuts), while the core GIF encoding is performed by a companion Rust library (gifski-api) exposed through a C API. Key data flows involve decoding video frames, optional cropping/trimming/resizing, temporal denoising and palette quantization in the Rust engine, and finally writing the GIF output. The codebase demonstrates solid engineering with actor-based concurrency, comprehensive unit tests, and reusable UI components. However, it carries technical drift from macOS version workarounds and deprecated Rust API usage, and targets a future macOS version (26+) not yet generally available.
DistroAV is an OBS Studio plugin that enables real-time network audio/video transmission using NDI technology. It implements both NDI sources (receiving streams) and NDI outputs (transmitting the main scene, preview, or per-source filters) within OBS. The architecture is a standard OBS plugin: it registers custom source, output, and filter types using the OBS API, provides a Qt-based settings dialog for configuration, and includes an automatic update checker. Key data flows involve capturing OBS video/audio frames, converting them to NDI frames using the NDI SDK (v6.3+), and sending/receiving over the network. External dependencies include the NDI runtime library, OBS Studio 31.1.1+, Qt6, and libcurl for updates. The codebase is well-structured with cross-platform CMake build system, CI/CD pipelines, and internationalization support, though it relies on a proprietary SDK and contains some legacy code paths.
YTDLnis is a feature-rich Android application that serves as a graphical frontend for yt-dlp, enabling users to download video and audio from over 1000 websites. The app follows the MVVM architecture with Room database for local persistence, WorkManager for background download tasks, and a repository pattern for data access. It provides a comprehensive download management system including queue management, scheduling, format selection, metadata embedding, chapter splitting, SponsorBlock integration, and support for custom yt-dlp commands. The application also includes a built-in terminal emulator for advanced users, cookie management, YouTube PoToken generation, and an observe-sources feature for monitoring channels or playlists for new content. The codebase is well-organized into UI fragments, viewmodels, repositories, and utility classes, with extensive use of Kotlin coroutines and Android Jetpack components. While the app is actively maintained and demonstrates solid engineering practices, some modules like UiUtil.kt are monolithic and tightly coupled, and the heavy reliance on external tools (yt-dlp, FFmpeg, Python) introduces ongoing maintenance risks.
MediaCMS is a production-grade, self-hosted video and media content management platform built as a Django monolith with a React frontend. In production it ingests video, audio, image, and PDF uploads via a chunked Fine Uploader flow, transcodes video through FFmpeg into multiple MP4/HLS renditions matched by configurable encoding profiles, streams them through a customized video.js player, and supports subtitles (manual upload and Whisper transcription), chapter markers, video trimming/editing, playlists, comments with mention notifications, likes, reports, and PostgreSQL full-text search. It ships a REST API under /api/v1/, an editor/manager admin UI, RSS feeds with Yahoo Media RSS extensions, and a small Click-based CLI. The backend is organized into Django apps (files, users, actions, rbac, lti, saml_auth, identity_providers, migrationservice, uploader) with DRF serializers/views, Celery workers for encoding and notifications, Redis as broker, and Nginx serving protected media through an auth_request subrequest. A significant portion is education/LMS-focused: an LTI 1.3 tool provider with deep linking, SAML authentication, RBAC groups mapped to categories, Moodle filter and TinyMCE plugins, and a migration service that imports media, captions, and users from Kaltura, Panopto, and YouTube with quiet-hours scheduling and encrypted credentials. This gives the repository a mild data-pipeline flavor through the migration service, but its dominant character is a full web application. Engineering quality is strong for an open-source Django project: extensive pytest coverage across API, permissions, LTI, SAML, RBAC, migration providers, and pipeline tasks; a large Jest suite for frontend components, hooks, and stores; semantic-release and pre-commit CI; and a clean provider abstraction for migration sources. Weaknesses include legacy webpack-built minified bundles checked into static/, a mix of JSX and TSX across the frontend, duplicated iOS player code between the video-editor and chapters-editor tools, several TODO/FIXME markers, and version-sensitive external dependencies (yt-dlp, Moodle, LTI). Overall it is an actively maintained codebase with several genuinely reusable components, though it carries moderate legacy debt in its frontend tooling.
This repository is the manifest and build orchestration layer for Nova Video Player, an open-source Android video player. It does not contain the application source code itself; that resides in referenced submodules (Video, MediaLib, FileCoreLibrary, native/avos, etc.). The repo provides a repo-based manifest, Makefile, Dockerfile, CI/CD workflows, release scripts, comprehensive FAQ documentation, and SDK setup scripts. The build system is sophisticated, supporting native code compilation (FFmpeg, dav1d, libtorrent, etc.) via Android NDK, Gradle wrappers, and external dependency management. The repo is actively maintained with frequent releases and detailed changelogs. While the core application code is not present here, the build infrastructure demonstrates high craftsmanship with clear documentation, automated releases, and continuous integration. The repo serves as an entry point for building the entire application across multiple stores (Google Play, Amazon, F-Droid).
Av1an is a hyper-scalable video encoding framework written in Rust, designed to parallelize encoding of AV1 (and other codecs) by splitting videos into scenes, encoding each scene independently, and concatenating the results. It supports multiple encoders (aomenc, SVT-AV1, rav1e, x264, x265, vpx) and provides advanced features like target quality (iterative probing to achieve a desired VMAF/SSIMULACRA2/Butteraugli score), VapourSynth integration for frame-accurate input and metric calculations, and scene detection via av-scenechange. The architecture is a classic library+binary workspace: `av1an-core` contains all encoding logic, chunk management, metrics, interpolation, and concatenation, while the `av1an` binary provides a CLI interface with extensive options for chunking methods, encoder parameters, zones, and resume capabilities. The system relies heavily on external tools (ffmpeg, mkvmerge, vspipe, encoder binaries) and uses a broker-based worker pool for parallel encoding with progress bars and Ctrl+C handling. The codebase is well-tested with integration tests that run actual encodes, and includes a dedicated interpolation module with eight methods (linear, natural cubic spline, Fritsch-Carlson, PCHIP, quadratic, cubic polynomial, Catmull-Rom, Akima) that is self-contained and reusable. While the project demonstrates strong engineering practices (modular design, extensive tests, CI/CD), it carries some technical debt: heavy use of nightly Rust features, global state via OnceCell, many unwrap/expect calls, and tight coupling to external tool versions. The repository is actively maintained with recent commits and a responsive issue tracker.
This repository contains a native WebRTC streaming application designed for Raspberry Pi and NVIDIA Jetson platforms. It captures video from various camera sources (libcamera, libargus, V4L2) and audio from PulseAudio/ALSA, encodes the streams using hardware acceleration when available or software fallbacks, and transmits them via WebRTC with multiple signaling options (MQTT, WebSocket, HTTP/WHEP). The application includes recording capabilities, snapshot functionality, and IPC for local control. The architecture is modular with clearly separated concerns for capture, encoding, signaling, and real-time communication.
Live Photo Converter is a cross-platform application for processing Android Live Photos (MVIMG files). It provides a modern GTK4/LibAdwaita graphical interface, a set of command-line tools, and a shared library (`liblivephototools`) for creating, extracting, and repairing these files. The core operation involves appending an MP4 video to a JPEG image and managing the associated XMP metadata (Google's GCamera and Container namespaces). It also supports generating long exposure photos from video frames and copying metadata between images. The architecture is a well-structured monolith written in Vala and built with Meson. The core logic resides in a shared library, with CLI and GUI frontends linking against it. Video processing is handled by a clean strategy pattern, defaulting to an in-process GStreamer pipeline with an FFmpeg subprocess fallback. The build system is highly sophisticated, supporting Linux (Flatpak, Arch), Windows (MSYS2), macOS (Homebrew), and Android (experimental, via pixiewood). The codebase demonstrates strong software craftsmanship. It features clean abstractions (abstract base classes `LivePhoto`/`LiveMaker`), meticulous thread safety (GOnce, AtomicInt, AsyncQueue, Mutex), and well-encapsulated utility components. The `PipelineWatch` class for GStreamer error handling and the `Reporter` class for CLI output are particularly well-crafted and reusable. The primary weakness is the absence of a formal unit test suite, which prevents a higher quality score.
YPImagePicker is an iOS framework that provides an Instagram-like photo and video picker with a rich set of features including camera capture, library browsing, video trimming, photo filters, cropping, and multiple selection. The architecture follows a modular pattern with a central configuration struct (YPImagePickerConfiguration) that controls all behaviors, and a navigation controller (YPImagePicker) that manages a paged interface (YPPickerVC) switching between library, photo, and video screens. The library screen uses PHPhotoLibrary and PHCachingImageManager for asset fetching and caching, while the camera and video screens leverage AVFoundation for capture. Filters are applied via Core Image, and video trimming uses the PryntTrimmerView dependency. The framework is highly customizable through configuration properties for colors, fonts, icons, wordings, and feature toggles. The codebase is well-organized into folders for configuration, filters, helpers, models, pages (gallery, photo, video), and selections gallery. Helper extensions provide reusable functionality for AVFoundation, Photos, UIKit, and Core Image operations. The permission management is abstracted into a dedicated module. While the framework lacks unit tests and some view controllers are large, the overall structure is clean and the separation of concerns is reasonable. The library has been widely adopted (4.4k stars) and is actively maintained with recent commits and pinned dependencies.
Ganymede is a media management system focused on archiving and managing Twitch content (VODs, live streams, clips) with a Go backend using Ent ORM, Echo framework, and River job queue, and a Next.js frontend with Mantine UI. It provides video archiving, playlist management, user authentication, API keys, and administrative interfaces. The system processes media through a pipeline involving yt-dlp, FFmpeg, and TwitchDownloaderCLI, storing metadata in PostgreSQL and files on disk. It includes features like chat archiving, chapter detection, muted segment detection, and rule-based playlist automation.
ytDownloader is a cross-platform desktop application built with Electron that provides a graphical interface for downloading videos and audio from YouTube and hundreds of other sites using yt-dlp as the backend download engine. It features a comprehensive download manager supporting single downloads, playlists, and YouTube search, with options for format selection, quality, subtitles, compression, and output templates. The application manages its own yt-dlp and ffmpeg binaries, supports auto-updates, and includes a download history with JSON/CSV export, theming, internationalization (23+ languages), system tray integration, and a global hotkey for quick URL pasting. Architecture: The application follows a standard Electron architecture with a main process (main.js) handling window management, IPC handlers, auto-updater, system tray, and global hotkey. A preload script (preload.js) sets up a context bridge (electronAPI) that exposes filesystem operations, process spawning, clipboard access, and other OS services to the renderer. The renderer process consists of several JavaScript modules (src/index.js, src/playlist.js, src/compressor.js, src/preferences.js, src/history_ui.js, src/common.js) that handle specific views. Communication between renderer and main process occurs via Electron's IPC mechanism (ipcRenderer/ipcMain). User preferences are stored in localStorage and a JSON config file, while download history is persisted as JSON. Key entry points: main.js (Electron main process), preload.js (context bridge), html/index.html (single-page UI shell), src/renderer.js (main renderer logic with YtDownloaderApp class), src/index.js (homepage downloader), src/playlist.js (playlist downloader), src/compressor.js (video compressor), src/preferences.js (settings), src/history_ui.js (history view). External dependencies include yt-dlp (download engine), ffmpeg/ffprobe (media processing), Electron (framework), electron-builder (packaging), electron-updater (auto-updates), systeminformation (GPU detection), and SlimSelect (custom dropdowns). The application bundles these binaries or uses system-installed versions, with fallback mechanisms.
This repository is a collection of sample applications demonstrating features of the OpenTok.js (Vonage Video API) SDK. It contains 14 standalone sub-projects, each focusing on a specific capability: basic video chat, archiving, signaling, background blur, audio/video transformers, canvas publishing, device selection, stereo audio, stream filters, and end-to-end encryption. The samples are implemented in vanilla JavaScript with HTML/CSS, and a Node.js server for the encryption demo. The code is well-structured and serves as reference implementations for developers integrating Vonage video into web applications. The most technically interesting components involve media processing with Web Workers, Canvas pixel manipulation, and the Web Audio API for stereo streaming.
ScreenToGif is a Windows desktop application for screen, webcam, and sketchboard recording, with a built-in editor and export to animated images (GIF, APNG, WebP, AVIF), video (MP4, AVI, MKV, MOV, WebM), image sequences (BMP, JPEG, PNG), PSD, and its own project format (STG). The architecture follows MVVM with multiple projects: ScreenToGif (WPF UI), ScreenToGif.Model (domain/enums/interfaces), ScreenToGif.ViewModel (presets/tasks), ScreenToGif.Util (helpers, codification, converters, settings), ScreenToGif.Native (P/Invoke wrappers), and ScreenToGif.Test (unit tests). The application uses .NET 9 and relies on FFmpeg, Gifski, KGySoft.Drawing, and SharpDX (for DirectX capture). It features a rich set of custom WPF controls, global keyboard/mouse hooks, undo/redo with file-based state, color quantization algorithms, and cloud upload integration (Imgur, Yandex Disk). The codebase is well-structured but shows signs of technical debt: large monolithic files, legacy encoder implementations, deprecated SharpDX dependency, and minimal test coverage.
A browser extension (ImprovedTube) that provides 80+ configuration options to customize YouTube's appearance and behavior. It injects CSS and JavaScript into YouTube pages to modify the player, sidebar, comments, thumbnails, themes, and more. Features include ad blocking, forced playback parameters, keyboard shortcuts, a blocklist for channels/videos, smart speed based on heatmap data, and integration with Return YouTube Dislike. The extension uses a message-passing architecture between content scripts and page-world scripts via custom DOM events, and a custom Satus UI framework for the settings panel. It is localized into 40+ languages but has a high number of open issues and dependencies on fragile YouTube DOM structures. The codebase is functionally comprehensive but shows signs of maintenance drift with hardcoded API keys, heavy use of !important CSS, and incomplete locale coverage.
GridPlayer is a desktop application that plays multiple video streams simultaneously in a configurable grid layout. Built with PyQt5 and backed by VLC (libvlc), it provides per-video controls (play/pause, seek, speed, zoom, crop, loop, transformation), full playlist management with snapshots, and support for streaming via yt-dlp and Streamlink. The architecture uses a modular Manager pattern (ManagersManager, ManagerBase) where each subsystem (menu, grid, settings, video drivers, drag-and-drop, etc.) is a QObject-based manager registered with a shared Context/Commands dispatcher. Video playback can run in separate processes via multiprocessing with shared memory for hardware-accelerated decoding. The application is cross-platform (Windows, macOS, Linux) with packaging for PyPI, AppImage, Flatpak, Snap, and Chocolatey. Internationalization is handled via Crowdin with 18 translation files. Entry point is gridplayer/__main__.py which initializes the application, VLC instance, and main Player widget. The codebase demonstrates solid software engineering practices with extensive test coverage for core components like grid layout, drag-and-drop, settings, and keymap management. However, it carries significant technical debt from heavy reliance on VLC 3.0.x, PyQt5 (no migration to Qt6), and complex cross-platform workarounds for Wayland, X11 overlay, and hardware decoder multiprocessing.
MediaElement is a mature, client-side JavaScript library that provides a consistent, cross-browser HTML5 video and audio player experience. It wraps native `<video>` and `<audio>` elements with a unified API and UI, while supporting a plugin-based renderer system for fallback and streaming formats including YouTube, Vimeo, HLS, DASH, Facebook, SoundCloud, Twitch, and Dailymotion. The library is distributed as two bundles: a core `mediaelement.js` (API only) and `mediaelement-and-player.js` (with full UI controls). It includes internationalization (i18n) for over 30 languages, subtitle/caption track support, and a range of player features (play/pause, progress bar, volume, fullscreen, time display) that can be customized via a feature injection pattern. Architecturally, the codebase is organized into core modules (`mejs.js`, `mediaelement.js`, `renderer.js`, `i18n.js`), renderer implementations (each self-contained and registered via a common interface), player features (each added as a method on the player prototype), and utility functions (DOM helpers, time formatting, media type detection, polyfills). The build system uses Grunt with Browserify and Babel 6, targeting older browsers (IE10+, iOS 7+, Android 3+). The library is designed to be framework-agnostic but includes optional jQuery/Zepto integration. While the library is functionally complete and widely used, it shows signs of technical drift: the build toolchain is outdated (Grunt, Browserify 13, Babel 6), some dependencies are stale, and the codebase relies on global namespace pollution (`window.mejs`). The player class (`player.js`) is monolithic and handles many responsibilities. Despite these issues, the core abstractions—especially the renderer registry and i18n engine—are well-designed and could be extracted for reuse in other projects.
Linphone Desktop is a production-grade, cross-platform SIP softphone built on the Linphone C++ SDK and wrapped in a Qt6/QML user interface. It delivers audio/video calls, instant messaging (including group chat, file transfer, reactions, and ephemeral messages), conference scheduling, call recording, and presence management across Windows, macOS, and Linux. The architecture follows a strict MVVM split: model classes run on the Linphone SDK thread and expose Qt signals, while GUI-facing 'Core' classes live on the main thread and communicate with models via a custom SafeConnection template that enforces thread affinity. QML views bind directly to these cores, with list proxies (e.g., ListProxy, SortFilterProxy) providing paginated, filterable models for contact lists, call history, and chat logs. The codebase also integrates advanced features like OIDC/OAuth authentication, LDAP/CardDAV address book sync, end-to-end encryption (LIME/DTLS/SRTP), and system-level integrations (toast notifications, tray icons, screen-sharing, autostart) with per-platform backends. The repository is actively maintained with a modern build system (CMake), comprehensive GitLab CI pipelines (Linux, macOS, Windows, Squish GUI tests), and a substantial localization effort (multiple .ts files).