{"id":351196,"date":"2026-08-23T02:28:48","date_gmt":"2026-08-23T02:28:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/argentwolf-video-processor\/"},"modified":"2026-08-23T02:28:40","modified_gmt":"2026-08-23T02:28:40","slug":"argentwolf-video-processor","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/argentwolf-video-processor\/","author":14244010,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1","requires":"6.4","requires_php":"8.1","requires_plugins":null,"header_name":"ArgentWolf Video Processor","header_author":"Alan Johnson","header_description":"Queues WordPress videos and creates adaptive and progressive streaming derivatives with a detached FFmpeg worker while preserving the original attachment.","assets_banners_color":"","last_updated":"2026-08-23 02:28:40","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/thystra\/wp-argentwolf-video-processor","header_author_uri":"https:\/\/github.com\/thystra","rating":0,"author_block_rating":0,"active_installs":0,"downloads":37,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"Thystra","date":"2026-08-23 02:28:40"}},"upgrade_notice":{"1.0.0":"<p>First stable WordPress.org release; no functional or runtime behavior changes from 0.3.3.<\/p>","0.3.3":"<p>WordPress 7.1 compatibility metadata update; no functional or runtime changes from 0.3.2.<\/p>","0.3.2":"<p>Stores bounded worker diagnostic history in the local WordPress database and uses only short-lived WordPress temporary files for detached-process capture. Adds administrator-configurable retention for successful and error runs.<\/p>","0.3.1":"<p>Moves generated derivatives into a plugin-owned uploads subtree and removes\nbuild-only hls.js integrity metadata from the runtime package. Original video\nattachments remain unchanged.<\/p>","0.3.0":"<p>Renames the public plugin and package to ArgentWolf Video Processor and prepares\nthe project for WordPress.org review while retaining existing data identifiers.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3661320,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3661320,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[277033,14660,127055,84,222],"plugin_category":[50],"plugin_contributors":[274586],"plugin_business_model":[],"class_list":["post-351196","plugin","type-plugin","status-publish","hentry","plugin_tags-adaptive-streaming","plugin_tags-ffmpeg","plugin_tags-hls","plugin_tags-media","plugin_tags-video","plugin_category-media","plugin_contributors-thystra","plugin_committers-thystra"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/argentwolf-video-processor\/assets\/icon-128x128.png?rev=3661320","icon_2x":"https:\/\/ps.w.org\/argentwolf-video-processor\/assets\/icon-256x256.png?rev=3661320","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>ArgentWolf Video Processor preserves each original WordPress video attachment\nand creates smaller derivatives suitable for browser playback on connections\nranging from slow DSL to broadband.<\/p>\n\n<p>The default configuration creates:<\/p>\n\n<ul>\n<li>an adaptive H.264\/AAC HLS ladder at 360p, 480p, and 720p where the source resolution permits;<\/li>\n<li>a VP9\/Opus WebM progressive source;<\/li>\n<li>an H.264\/AAC MP4 progressive fallback with fast-start indexing.<\/li>\n<\/ul>\n\n<p>Generated outputs strip embedded GPS, device, chapter, and other metadata by\ndefault and normalize rotation metadata into the encoded pixels. The original\nattachment is not modified. Generated derivatives are stored under the active\nWordPress uploads directory in the plugin-owned\n    argentwolf-video-processor\/\/ subtree.<\/p>\n\n<p>Native HLS is used where the browser supports it. Other compatible browsers use\nthe locally bundled, pinned hls.js player. Progressive sources remain available\nas fallbacks.<\/p>\n\n<p>The plugin stores work in a database queue and processes one video at a time.\nIts recurring WordPress event only starts a detached WP-CLI worker; FFmpeg does\nnot run inside the WP-Cron callback or an administrator web request.<\/p>\n\n<p>No video, metadata, or usage information is sent to an external processing\nservice.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>The plugin creates derivative media files and stores queue state, processing\nstatus, output paths, and error information in the local WordPress installation.<\/p>\n\n<p>Generated derivatives strip source metadata when that setting is enabled. The\noriginal attachment remains unchanged and may retain its original metadata.<\/p>\n\n<p>The plugin contains no telemetry and does not send media or usage information to\na remote processing service.<\/p>\n\n<p>Worker diagnostic history is stored locally in the WordPress database with bounded retention. Detached-process capture files are temporary and removed after their useful output has been persisted.<\/p>\n\n<h3>External software<\/h3>\n\n<p>The plugin requires operator-installed FFmpeg, FFprobe, and WP-CLI binaries.\nThese are local server programs, not remote services. Administrators are\nresponsible for installing security-maintained versions and configuring their\npaths.<\/p>\n\n<p>The release bundles a pinned hls.js browser runtime under its Apache-2.0 license.<\/p>\n\n<h3>Developer notes<\/h3>\n\n<p>The existing settings keys, queue table, attachment metadata, hook names, cron\nidentifiers, Settings page slug, and <code>wp argent-video<\/code> command are retained for\nupgrade compatibility.<\/p>\n\n<p>The public plugin directory and main-file basename change in version 0.3.0.\nAdministrators upgrading from version 0.2.3 should use the normal WordPress\nplugin-update workflow and confirm the plugin remains active.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install current, security-maintained FFmpeg, FFprobe, and WP-CLI binaries on the WordPress server.<\/li>\n<li>Confirm PHP permits <code>proc_open()<\/code> and, for automatic dispatch, <code>exec()<\/code>.<\/li>\n<li>Upload the release ZIP through Plugins &gt; Add New &gt; Upload Plugin.<\/li>\n<li>Activate ArgentWolf Video Processor.<\/li>\n<li>Open Settings &gt; ArgentWolf Video and review diagnostics and configured paths.<\/li>\n<li>Upload a video or use Process existing videos to queue the current Media Library backlog.<\/li>\n<\/ol>\n\n<p>This plugin requires server-administration access and may not work on restricted\nshared hosting.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"are%20original%20videos%20deleted%20or%20changed%3F\"><h3>Are original videos deleted or changed?<\/h3><\/dt>\n<dd><p>No. The original WordPress attachment is preserved. Processing creates separate\nderivatives.<\/p><\/dd>\n<dt id=\"does%20metadata%20stripping%20sanitize%20the%20original%3F\"><h3>Does metadata stripping sanitize the original?<\/h3><\/dt>\n<dd><p>No. Metadata stripping applies to generated derivatives and HLS renditions. The\noriginal upload may retain its original metadata.<\/p><\/dd>\n<dt id=\"what%20does%20adaptive%20streaming%20do%3F\"><h3>What does adaptive streaming do?<\/h3><\/dt>\n<dd><p>The plugin produces multiple HLS renditions. The player can move among available\n360p, 480p, and 720p renditions as bandwidth and player size change.<\/p><\/dd>\n<dt id=\"can%20i%20process%20videos%20already%20in%20the%20media%20library%3F\"><h3>Can I process videos already in the Media Library?<\/h3><\/dt>\n<dd><p>Yes. Settings &gt; ArgentWolf Video provides Smart queue, Add adaptive HLS only,\nand Force reprocess all operations, with an optional upload-date range.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20run%20ffmpeg%20during%20a%20web%20request%3F\"><h3>Does the plugin run FFmpeg during a web request?<\/h3><\/dt>\n<dd><p>No. Web and WP-Cron requests only queue or dispatch work. A detached WP-CLI\nworker performs the encode.<\/p><\/dd>\n<dt id=\"which%20codecs%20are%20used%3F\"><h3>Which codecs are used?<\/h3><\/dt>\n<dd><p>Adaptive HLS uses H.264\/AAC fragmented MP4. The default progressive fallbacks\nuse VP9\/Opus WebM followed by H.264\/AAC MP4.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20check%20ffmpeg%20security%20advisories%3F\"><h3>Does the plugin check FFmpeg security advisories?<\/h3><\/dt>\n<dd><p>Yes. Before starting a new transcode, the plugin checks the configured FFmpeg version and relevant compiled capabilities. Known-vulnerable or unverifiable builds are blocked. CVE-2026-8461 is checked against the MagicYUV decoder and linked from Diagnostics and Site Health: https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2026-8461<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20bundle%20ffmpeg%3F\"><h3>Does the plugin bundle FFmpeg?<\/h3><\/dt>\n<dd><p>No. It uses administrator-configured system FFmpeg and FFprobe binaries and\nchecks their version, codecs, HLS muxer, and fragmented-MP4 support.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20php%20exec%28%29%20is%20disabled%3F\"><h3>What happens if PHP exec() is disabled?<\/h3><\/dt>\n<dd><p>Automatic detached dispatch is unavailable. An operator may invoke\n    wp argent-video worker --once from a system scheduler. Encoding still requires\n    proc_open().<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20use%20an%20external%20service%3F\"><h3>Does the plugin use an external service?<\/h3><\/dt>\n<dd><p>No. Video processing occurs on the WordPress server. The pinned hls.js runtime\nis bundled with the release and served locally.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Promoted the WordPress.org-approved 0.3.3 codebase to the first stable 1.0.0 release.<\/li>\n<li>No functional or runtime behavior changes from 0.3.3.<\/li>\n<\/ul>\n\n<h4>0.3.3<\/h4>\n\n<ul>\n<li>Updated WordPress compatibility metadata for WordPress 7.1.<\/li>\n<li>No functional or runtime behavior changes from 0.3.2.<\/li>\n<\/ul>\n\n<h4>0.3.2<\/h4>\n\n<ul>\n<li>Replace the persistent system-temp worker log with bounded database-backed diagnostic history in <code>{$wpdb-&gt;prefix}argentwolf_video_processor_logs<\/code>.<\/li>\n<li>Use short-lived WordPress temporary captures for detached worker bootstrap\/output and recover stale captures before later launches can replace evidence.<\/li>\n<li>Add configurable retention defaults of 10 successful runs and 100 error\/job-error runs, with a fixed 512 KiB diagnostic-output cap per run.<\/li>\n<li>Add recent worker history and a nonce\/capability-protected clear-history action to the Settings page.<\/li>\n<li>Use WordPress temporary-file facilities with failure-safe cleanup for FFmpeg\/FFprobe stdout and stderr captures.<\/li>\n<li>Retain the legacy <code>argent_video_jobs<\/code> table for compatibility while using the canonical <code>argentwolf_video_processor_*<\/code> identifier for newly introduced tables.<\/li>\n<\/ul>\n\n<h4>0.3.1<\/h4>\n\n<ul>\n<li>Store generated MP4, WebM, HLS, and temporary output under <code>wp_upload_dir()['basedir']\/argentwolf-video-processor\/&lt;attachment-id&gt;\/<\/code>.<\/li>\n<li>Centralize generated-media path confinement, URL conversion, atomic promotion, and cleanup in the Storage service.<\/li>\n<li>Reject traversal, sibling-prefix, and unsafe symlink escapes before managed filesystem mutations.<\/li>\n<li>Make attachment cleanup derive the managed attachment directory instead of trusting stored output paths.<\/li>\n<li>Keep hls.js version\/checksum records as build-time integrity evidence while excluding <code>hls.VERSION<\/code> and <code>hls.SHA256<\/code> from the installable ZIP.<\/li>\n<li>Add storage-boundary regression coverage for custom uploads, path escapes, symlinks, HLS writes, and cleanup.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Resolve WordPress Plugin Check findings with identifier placeholders, WordPress file-deletion APIs, and narrowly documented worker, queue, and atomic-filesystem exceptions.<\/li>\n<li>Standardize the public name as ArgentWolf Video Processor.<\/li>\n<li>Change the directory slug, main filename, package root, and text domain to <code>argentwolf-video-processor<\/code>.<\/li>\n<li>Retain existing options, attachment metadata, queue table, hooks, cron identifiers, namespace, admin page slug, and WP-CLI command.<\/li>\n<li>Remove private operator and production material from the public repository.<\/li>\n<li>Add public architecture, agent, milestone, privacy, and WordPress.org submission documentation.<\/li>\n<li>Add Settings and GitHub project links to the plugin action row.<\/li>\n<li>Add a Support development section to the settings page.<\/li>\n<li>Change release packaging to an explicit runtime allowlist.<\/li>\n<\/ul>\n\n<h4>0.2.3<\/h4>\n\n<ul>\n<li>Fix binary diagnostics and detached worker launch under per-site PHP <code>open_basedir<\/code> restrictions.<\/li>\n<li>Probe configured executables through safely quoted shell commands instead of PHP filesystem stat calls.<\/li>\n<li>Report PHP SAPI and active <code>open_basedir<\/code> in diagnostics.<\/li>\n<\/ul>\n\n<h4>0.2.2<\/h4>\n\n<ul>\n<li>Fix release ZIP builds when the npm package license text differs from the repository snapshot.<\/li>\n<li>Validate the package SPDX identity and substantive Apache-2.0 license text.<\/li>\n<li>Ship the license from the verified package and remove generated vendor files after packaging.<\/li>\n<\/ul>\n\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>Validate the exact hls.js npm package and runtime version.<\/li>\n<li>Include the vendored player version and SHA-256 record.<\/li>\n<li>Add an offline regression test for player vendoring.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Add adaptive HLS with 360p, 480p, and 720p fragmented-MP4 renditions.<\/li>\n<li>Add native-HLS playback and a pinned local hls.js player.<\/li>\n<li>Add administrator backlog operations and upload-date filtering.<\/li>\n<li>Add system-binary, codec, HLS, and player diagnostics.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Fix FFmpeg autorotation compatibility.<\/li>\n<li>Improve failed-job output and required-codec diagnostics.<\/li>\n<li>Add a real FFmpeg integration test.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial queue, detached worker, FFmpeg processing, validation, metadata stripping, render substitution, administration, CLI, and release workflow.<\/li>\n<\/ul>","raw_excerpt":"Queues WordPress videos and creates local adaptive HLS and progressive derivatives with a detached FFmpeg worker.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/351196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=351196"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/thystra"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=351196"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=351196"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=351196"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=351196"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=351196"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=351196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}