Papi-VirusA reversible invasion of your local videos, each with a numbered companion audio track. Version 0.2.3 starts directly in your real editable code editor, without opening a tab. It displays animated PNG frames extracted from your videos; no demo cats or unrelated artwork are used. Add videos and audioPlace your files here, then Stop and Start to rescan:
The extension scans Only files inside those local folders are accepted. Missing audio leaves the video silent; an empty video folder reports an actionable message. Empty files, links escaping a media directory and files larger than 256 MiB are rejected. Discovery is bounded to 100 videos. The old The current test files are media/videos/video4.mp4 and media/sounds/audio4.mp3. No real Play in the real editorRun Papi-Virus: Start Meme Virus while a text file is open. It attaches animated frames from your videos directly to the real code editor, keeps the same editor focused, and never opens a Webview or another tab. A saved Official VS Code text decorations do not contain MP4 players or audio. Like the local cat-clapping extension, Papi-Virus now uses a separate native audio backend while the decorations reproduce the video visually as an 8 fps PNG sequence, with numbered companion audio played separately by the native system player, using supported image attachments. It is not an embedded MP4 player. Each video instance has an independent playback position and moves over visible lines; you can keep typing. Three prepared widths (120/200/280 px) allow size changes while preserving aspect ratio. Rotations remain a Webview-only feature. Margins balance image baselines so the text stays aligned; fonts, wrapping and zoom can affect approximate placement and hit areas. The prepared frames for video4.mp4 are already included. To add/change videos in development, copy them into media/videos, then run:
Compilation, F5's pre-launch build and VSIX packaging also run that cached preparation step. ffmpeg and ffprobe are needed only to prepare new/changed files during development. Runtime never spawns either process, modifies video files or writes caches. Identical prepared media skip decoding; changed/unprepared files are excluded from native rendering until rebuilt. Short clips are recommended; preparation is bounded to the first 120 seconds at 8 fps. The package includes prepared frames and PCM audio, so users installing the VSIX need no ffmpeg. The only animated caption is:
Five escalation phases and movement remain: 0-10 seconds (1 video), 10-25 (up to 5), 25-45 (up to 12), 45-70 (up to 20), then the configured maximum. Progress pauses when the window is unfocused or no text editor is active. Switching files clears old decorations and follows the new editor. No document contents are changed. Use Papi-Virus: Stop Meme Virus, Emergency Stop, the status bar PAPI // STOP, or Explicit optional Full ChaosPapi-Virus: Start Full Chaos Mode is the only command that opens a separate video player. Use it explicitly if actual MP4/WebM playback with numbered companion audio is wanted. The code backdrop in that mode is a bounded local read-only snapshot; the normal Start command always stays in your real editor. Companion audioCompanion audio is requested by default in both Editor Mode and explicit Full Chaos. Editor Mode uses the same backend as cat-clapping: Windows PowerShell started with windowsHide:true, -NoProfile and -NonInteractive, then System.Media.SoundPlayer playing prepared PCM WAV. No extra editor tab or player window opens. macOS uses afplay; Linux tries paplay and then aplay. The extension is marked as a UI extension so native audio runs on the local machine even with remote workspaces. Video's embedded audio is always muted, so it cannot mix with the numbered companion. Disable In native Editor Mode there is no browser autoplay gate. Windows volume is applied to PCM samples in memory; the helper receives the WAV over stdin, so it writes no temporary audio files and never interpolates a media filename into a PowerShell command. Each visible video copy can now own a separate audio process, including repeated copies of the same numbered audio. Voices start on independent clocks, loop, and are terminated on pause, owner removal, Stop, settings changes and deactivation. Resume preserves each voice clock, while new starts are staggered. audio.maxSimultaneous bounds the total number of processes, including duplicates. SoundPlayer restart timing is approximate, rather than sample-accurate. On macOS/Linux the fallback players use system volume and restart from the beginning on resume. MP3/MP4 companions are decoded to 16-bit PCM WAV during npm run prepare:videos (also called by compile, F5 and packaging), using ffmpeg only at build time. The source media stay unchanged. The supplied audio4.mp3 has its WAV already bundled; no runtime ffmpeg or installation is needed. If prepared audio is absent/stale or the native audio device/player fails, visuals continue and errors go to Output > Papi-Virus. In explicit Full Chaos, browsers may reject sound until an actual user gesture. If needed, click Abilita audio inside the panel. Riproduci video appears if video playback itself requires a gesture. No browser playback restrictions are bypassed. Audio escalationThe audio grows with the same five visual phases. Copies of the same audio are intentionally allowed to overlap, with separate playback clocks. A delayed voice starts its own audio rather than seeking into synchronization with an existing copy. This also applies in the optional Webview.
These are upper bounds: voices need visible video instances and paired audio. Normal video spawn times already differ; simultaneous event spawns additionally queue their voices so a chorus does not begin in unison. A stalled host starts at most one queued voice per update rather than replaying a burst of missed starts. The default ceiling is 8; Stop/Emergency Stop closes all overlapping players immediately. Blur and absence of an active editor pause native playback. No per-voice timers or delayed callbacks can start another player after Stop. Codec support depends on the installed VS Code build. H.264 MP4 / VP8 WebM and MP3 companions are recommended. An MP4 audio container with AAC may not decode in VS Code; use MP3 if an audio error appears. Unsupported video is hidden with an error message, never replaced by a demo image. The supplied AV1 video4 and MP3 companion were also exercised in a real VS Code 1.95.3 Webview. SettingsAll keys are prefixed with
Develop and packageRequires Node.js 22+ and VS Code 1.95+.
Open the folder in VS Code and press F5 using the included launch configuration. Run Start in the Extension Development Host. For a local isolated integration run in PowerShell:
Optional visual/browser review: set Tests cover video discovery, numbered MP3/MP4 matching, missing audio, rescanning, caption replacement, independent overlapping voice clocks, staggered starts, autoplay rejection, pause/disposal, five audio and visual phases, population limits, Start idempotency, panel close and unchanged documents. See Privacy and licensingRuntime code never edits or saves documents, installs software, sends network requests, or records analytics. Native audio explicitly launches a session-owned system player (PowerShell SoundPlayer on Windows); Stop terminates it. It does not run user-provided shell commands, change execution policy or install players. Only explicitly starting the stage reads a bounded local snapshot of the active code document for the backdrop. Media resources use VS Code's local Webview resource service; no external media URL is fetched. Stop and deactivation dispose all timers, decorations and media. Frame preparation is a development/build operation, never runtime behavior. Extension source is MIT licensed. User-supplied videos and audio retain their own licensing; they are not re-licensed by the extension's source license. |