<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shuvranshu Sekhar Sahoo</title>
    <description>The latest articles on DEV Community by Shuvranshu Sekhar Sahoo (@sahooshuvranshu).</description>
    <link>https://dev.to/sahooshuvranshu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3603259%2Ffba353b9-3acd-4f5e-8dcc-1ce021e892e5.jpg</url>
      <title>DEV Community: Shuvranshu Sekhar Sahoo</title>
      <link>https://dev.to/sahooshuvranshu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sahooshuvranshu"/>
    <language>en</language>
    <item>
      <title>Adobe killed Flash in 2021. So I trapped its vengeful ghost in a 60 FPS Canvas fighter powered by local Gemma 3:4B.</title>
      <dc:creator>Shuvranshu Sekhar Sahoo</dc:creator>
      <pubDate>Sat, 31 Oct 2026 18:03:05 +0000</pubDate>
      <link>https://dev.to/sahooshuvranshu/adobe-killed-flash-in-2021-so-i-trapped-its-vengeful-ghost-in-a-60-fps-canvas-fighter-powered-by-1o18</link>
      <guid>https://dev.to/sahooshuvranshu/adobe-killed-flash-in-2021-so-i-trapped-its-vengeful-ghost-in-a-60-fps-canvas-fighter-powered-by-1o18</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week4-2026-10-26"&gt;&lt;strong&gt;Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine&lt;/strong&gt;&lt;/a&gt; and the &lt;a href="https://dev.to/mlh-hackathon"&gt;&lt;strong&gt;MLH × DEV Writing Challenge&lt;/strong&gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fey4o8ryo2mweauvbttp7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fey4o8ryo2mweauvbttp7.png" alt="KillSwitch.swf — The Ghost in the Canvas" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;On &lt;strong&gt;January 12, 2021&lt;/strong&gt;, Adobe triggered a hardcoded time-bomb kill-switch embedded deep inside the Flash Player runtime. &lt;/p&gt;

&lt;p&gt;Almost overnight, twenty-five years of independent digital culture—from classic &lt;em&gt;Xiao Xiao&lt;/em&gt; stickman martial arts cartoons and &lt;em&gt;Stick Death&lt;/em&gt; to &lt;em&gt;Club Penguin&lt;/em&gt;, &lt;em&gt;Line Rider&lt;/em&gt;, &lt;em&gt;Fancy Pants Adventures&lt;/em&gt;, and &lt;em&gt;Alien Hominid&lt;/em&gt;—were permanently bricked behind a silent, black warning icon. The plugin refused to execute. The animations stopped. The music went silent.&lt;/p&gt;

&lt;p&gt;Flash was closed-source, proprietary abandonware. When corporate priorities shifted, an entire era of human creativity was wiped from the live web with a single execution switch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if the dead soul of Flash Player refused to leave?&lt;/strong&gt; 👻&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Meet &lt;code&gt;KillSwitch.swf&lt;/code&gt;&lt;/strong&gt;: a 60 FPS HTML5 Canvas stickman fighting game trapped inside a cracked Macromedia Flash Player 10.3 desktop window. You play as a rogue stickman fighter who breaches the 2021 Adobe kill-switch error dialog to face the &lt;strong&gt;Ghost of Flash Player&lt;/strong&gt; itself.&lt;/p&gt;

&lt;p&gt;The Ghost is not a pre-scripted bot running cheap &lt;code&gt;if/else&lt;/code&gt; checks. It is driven by a &lt;strong&gt;Decoupled Dual-Layer Edge AI Brain&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Layer 1: Real-Time 60 FPS Q-Learning &amp;amp; Markov Habit Predictor&lt;/strong&gt;: A sub-millisecond reinforcement learner and bigram sequence tracker running directly on the client canvas. It continuously tracks your frame data, strike rhythms, and combo tendencies (e.g., $P(\text{Heavy Kick} \mid \text{Jab})$, $P(\text{Jump Kick} \mid \text{Jump})$) to unleash real-time &lt;strong&gt;Matrix Parries&lt;/strong&gt;, duck-under dragon sweeps, and live HUD alerts like &lt;code&gt;⚡ GEMMA READ: PREDICTED HEAVY KICK (100%)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layer 2: Local Google Gemma 3:4B Inter-Round Tactical Cognition&lt;/strong&gt;: Between rounds, an offline &lt;strong&gt;Google Gemma 3:4B&lt;/strong&gt; model running locally via Ollama ingests structured combat telemetry, roasts your fighting habits in authentic 2000s Newgrounds slang on a retro CRT typewriter terminal, dynamically tunes the Ghost's AI state machine (&lt;code&gt;antiAirPriority&lt;/code&gt;, &lt;code&gt;aggression&lt;/code&gt;, &lt;code&gt;guardBreakRate&lt;/code&gt;), and unleashes an unhinged, Gemma-designed &lt;strong&gt;ActionScript Error 0x7E5&lt;/strong&gt; boss rage mechanic.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  How I Interpreted the Theme: Ghost in the Machine &amp;amp; Día de los Muertos
&lt;/h3&gt;

&lt;p&gt;The Week 4 challenge brings together &lt;strong&gt;Halloween (Ghost in the Machine)&lt;/strong&gt; and &lt;strong&gt;Día de los Muertos (Honoring the Past)&lt;/strong&gt;. I interpreted both literally, mechanically, and culturally:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎃 &lt;strong&gt;The Ghost in the Machine:&lt;/strong&gt; The software runtime that died on Jan 12, 2021 is the literal ghost possessing your browser canvas. It fights with the glitching fury of a deprecated plugin, wielding CRT scanlines, ActionScript bytecode leaks, and memory overflow attacks against the modern browser.&lt;/li&gt;
&lt;li&gt;🕯️ &lt;strong&gt;Día de los Muertos (The Digital Ofrenda):&lt;/strong&gt; In Mexican tradition, the dead never truly disappear as long as the living remember them. &lt;code&gt;KillSwitch.swf&lt;/code&gt; features an interactive &lt;strong&gt;Flash Cemetery (Ofrenda)&lt;/strong&gt; glowing with marigold petals and memorial candles honoring fallen Flash classics (&lt;em&gt;Club Penguin&lt;/em&gt;, &lt;em&gt;Xiao Xiao&lt;/em&gt;, &lt;em&gt;Line Rider&lt;/em&gt;, &lt;em&gt;Alien Hominid&lt;/em&gt;). When you light a candle, &lt;strong&gt;Google Gemma 3:4B&lt;/strong&gt; composes real-time satirical &lt;em&gt;calaveritas literarias&lt;/em&gt; (Day of the Dead rhyming epitaph poems) in nostalgic 2000s web slang.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Key Architectural Highlights
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero External Sprites (Procedural IK Skeleton):&lt;/strong&gt; Every limb, joint, and torso of the player and Flash Ghost is rendered procedurally with analytical 2-bone inverse kinematics on an HTML5 &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero External Audio Files (Web Audio Synth):&lt;/strong&gt; Every jab whoosh, bone-crunch kick, metallic guard ping, retro CRT typewriter click, and killswitch bypass surge is synthesized live in milliseconds using the browser's native &lt;code&gt;AudioContext&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;8 Distinct Fighter Archetypes across 8 Rounds:&lt;/strong&gt; White Ghost, Cobalt Duelist, Jade Grandmaster, Blocky Steve, Crimson Titan (128% stature brawler), Plasma Ascetic (hollow-ring head), Calavera Phantom, and Flash Ghost Prime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;5 Rotating Retro Scenes:&lt;/strong&gt; Brawling shifts every round across authentic Flash history:

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Flash Studio Canvas&lt;/em&gt; (featuring the top Timeline ruler, keyframe tracks, red scrubbing playhead, Tools palette, and a &lt;strong&gt;giant floating virtual mouse cursor &lt;code&gt;↖&lt;/code&gt;&lt;/strong&gt; tracking the fighters!).&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Windows XP Bliss Desktop&lt;/em&gt; (rolling green hills, azure sky, retro desktop icons, blue taskbar floor).&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;ActionScript Cyber Matrix&lt;/em&gt; (raining bytecode streams).&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;2021 Kill-Switch Void&lt;/em&gt; (black obsidian abyss with the cracked puzzle icon).&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Día de los Muertos Altar&lt;/em&gt; (marigolds, glowing candles, and ofrenda offerings).&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🌐 &lt;strong&gt;Live Playable Web Game:&lt;/strong&gt; &lt;a href="https://sahooshuvranshu.github.io/KillSwitch.swf/" rel="noopener noreferrer"&gt;https://sahooshuvranshu.github.io/KillSwitch.swf/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;900-Round Calibration Report:&lt;/strong&gt; &lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf/blob/main/docs/difficulty-tuning.md" rel="noopener noreferrer"&gt;docs/difficulty-tuning.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📈 &lt;strong&gt;1,800-Round Learning Benchmark:&lt;/strong&gt; &lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf/blob/main/docs/learning-results.md" rel="noopener noreferrer"&gt;docs/learning-results.md&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;💡 How to Play:&lt;/strong&gt;  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Instant In-Browser Play:&lt;/strong&gt; Click the live web link above. Click &lt;strong&gt;⚡ BYPASS 2021 KILL-SWITCH &amp;amp; EXECUTE&lt;/strong&gt; to enter the Flash runtime. The game runs 100% in your browser at 60 FPS with client-side Q-learning and procedural ActionScript commentary—zero installs required!
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local Google Gemma 3:4B Edge AI Mode:&lt;/strong&gt; To connect the local Gemma 3:4B brain with streaming CRT typewriter roasts and dynamic state-machine tuning, follow the 30-second local quickstart below with Ollama!&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Walkthrough &amp;amp; Screenshots
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Real-Time Telemetry &amp;amp; Habit Reading (F3 Overlay)
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjbzo602bhzbzcac2wylm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjbzo602bhzbzcac2wylm.png" alt="Learned Habits &amp;amp; Gemma Tactical Telemetry" width="800" height="508"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 1: Pressing F3 toggles the live telemetry inspector. Gemma 3:4B analyzes player combo habits, Markov transition probabilities, and locks in anti-air counters between rounds.&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  2. Windows XP Bliss Stage — Aerial Combat &amp;amp; Parry Shield
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F34at0mc6zn7c43zme5g7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F34at0mc6zn7c43zme5g7.png" alt="Round 2 Counter Stance" width="800" height="508"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 2: The Player executing an aerial flying kick with dynamic calligraphy brush trails against Cobalt Duelist's reactive parry shield on the Windows XP Bliss desktop stage.&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  3. Inter-Round CRT Typewriter Roast &amp;amp; Telemetry Terminal
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fygbx6a70x0lgry08tbyk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fygbx6a70x0lgry08tbyk.png" alt="Inter-Round CRT Roast Terminal" width="800" height="508"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 3: Between rounds, local Gemma 3:4B inspects combat habits, generates a 2000s Newgrounds-style typewriter roast, and dynamically recalibrates the Ghost's aggression and guard-break meters.&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  4. ActionScript Error 0x7E5 Boss Rage in Cyber Matrix
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj0le0vcnv90xt33hc5rz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj0le0vcnv90xt33hc5rz.png" alt="ActionScript Error 0x7E5 Rage Teleport" width="800" height="508"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 4: Flash Ghost executing the Gemma 3:4B designed Error 0x7E5 triple-teleport memory overflow attack across the ActionScript Bytecode Matrix.&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  5. Día de los Muertos Flash Cemetery &amp;amp; Real-Time Calaverita
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0151jfwsh7qbzgxc708x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0151jfwsh7qbzgxc708x.png" alt="Día de los Muertos Flash Cemetery" width="800" height="508"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 5: The Flash Cemetery (Ofrenda). Lighting candles for fallen Flash classics (Club Penguin, Xiao Xiao, Line Rider) triggers Gemma 3:4B to compose satirical Day of the Dead poems.&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  6. Arcade Menu &amp;amp; Adaptive Difficulty Calibration
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmk542gtyljd4akweddle.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmk542gtyljd4akweddle.png" alt="Arcade Menu &amp;amp; Difficulty Select" width="800" height="508"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 6: Arcade setup modal offering Casual, Veteran, and Nightmare calibrations, challenger name profiling, and instant access to the digital ofrenda.&lt;/em&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/SahooShuvranshu" rel="noopener noreferrer"&gt;
        SahooShuvranshu
      &lt;/a&gt; / &lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf" rel="noopener noreferrer"&gt;
        KillSwitch.swf
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;⚡ KillSwitch.swf — Resurrecting Flash Player with Local Gemma 3:4B &amp;amp; Adaptive Q-Learning Stickman Combat&lt;/h1&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/SahooShuvranshu/KillSwitch.swf/docs/cover-image.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FSahooShuvranshu%2FKillSwitch.swf%2FHEAD%2Fdocs%2Fcover-image.png" alt="KillSwitch.swf — The Ghost in the Canvas"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🏆 DEV x MLH Hacktoberfest 2026 — Week 4: "Ghost in the Machine"&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Targeting Strictly: Best Use of Gemma Track&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sahooshuvranshu.github.io/KillSwitch.swf/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/6b208f265d864d5bec88be00ef16abc6c4588e763fe43412717673b1e7e52c8d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c69766525323053686f77636173652d47697448756225323050616765732d3030463046463f7374796c653d666f722d7468652d6261646765266c6f676f3d6769746875627061676573266c6f676f436f6c6f723d626c61636b" alt="Live Showcase"&gt;&lt;/a&gt;
&lt;a href="https://ai.google.dev/gemma" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/da0ebb815cabdb15f0d2b5745215a7aafd759f0718688410b8ad5cdf805a890d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4149253230436f72652d476f6f676c6525323047656d6d612532303325334134422d4646343530303f7374796c653d666f722d7468652d6261646765266c6f676f3d676f6f676c65266c6f676f436f6c6f723d7768697465" alt="Google Gemma"&gt;&lt;/a&gt;
&lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf/docs/learning-results.md" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/28dda451b39b64deff21fe4b4855204fd5f506c181dd9039ac030f67814535f6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61796572253230312d512d2d4c6561726e696e672532304d61747269782d3030464638383f7374796c653d666f722d7468652d6261646765" alt="Layer 1 AI"&gt;&lt;/a&gt;
&lt;a href="https://sahooshuvranshu.github.io/KillSwitch.swf/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/69dd905a08346068859a3763c6ad8cd69e90c2ec856ba9dff84d3f1aebd35607/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f456e67696e652d36302532304650532532304c6f636b65642d4646443730303f7374796c653d666f722d7468652d6261646765" alt="Performance"&gt;&lt;/a&gt;
&lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a69022c0b37e4165fc9f49dd04b620cc0d7a2bbb8831425230ff335a0ca1c984/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d4138353546373f7374796c653d666f722d7468652d6261646765" alt="License: MIT"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf/tsconfig.json" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/22b0e2defa8baa612d1fca8f5c60af080725fae9c0a2aca237041d36e61d7ea2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f547970655363726970742d352e352d3331373843363f7374796c653d666c61742d737175617265266c6f676f3d74797065736372697074266c6f676f436f6c6f723d7768697465" alt="TypeScript"&gt;&lt;/a&gt;
&lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf/vite.config.ts" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/cae164ece1ebbe691dc1ffcf1effb2ab97614ffb3e679a176788e54de7d266ba/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f566974652d352e342d3634364346463f7374796c653d666c61742d737175617265266c6f676f3d76697465266c6f676f436f6c6f723d7768697465" alt="Vite"&gt;&lt;/a&gt;
&lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf/src/main.ts" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/38ef3c9a5fc13428665087c9c6cb5bc1541dfc548b171f42cb9e863d4004cf9c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52656e64657265722d48544d4c3525323043616e7661732d4533344632363f7374796c653d666c61742d737175617265266c6f676f3d68746d6c35266c6f676f436f6c6f723d7768697465" alt="HTML5 Canvas"&gt;&lt;/a&gt;
&lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf/src/engine/Audio.ts" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/be8835e898a13f04034a4847d8c796b3a40836a85ffbb3e8167fb0d3eb808a2c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f417564696f2d50726f6365647572616c253230576562253230417564696f25323053796e74682d3030453546463f7374796c653d666c61742d737175617265" alt="Web Audio API"&gt;&lt;/a&gt;
&lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf/src/engine/Stickman.ts" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0862125909babe71f07309e7b067bc998795611e0c64f0a61cc1cc36b30c1d0b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4173736574732d5a65726f253230537072697465732532302850757265253230494b292d627269676874677265656e3f7374796c653d666c61742d737175617265" alt="Zero External Sprites"&gt;&lt;/a&gt;
&lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf/SUBMISSION.md" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5cc5e6336bc2b557cfb42bb9e7e3dc460efe40d765c5ed7568ee2f70957a2a73/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f507269766163792d3130302532352532304f66666c696e65253230285a65726f253230436c6f756425323041504973292d737563636573733f7374796c653d666c61742d737175617265" alt="100% Offline"&gt;&lt;/a&gt;
&lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf/docs/difficulty-tuning.md" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7443730c2d880d6eea753172a6542ab63c332fa43ad9fa15c2be3f36552e5e4b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f43616c6962726174696f6e2d393030253230526f756e647325323056657269666965642d626c756576696f6c65743f7374796c653d666c61742d737175617265" alt="Calibration"&gt;&lt;/a&gt;
&lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf/docs/tests/" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0f660069c70ad775b1b15ec31afb429240ec722c2c9c045a81e3e668c11aac17/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4175746f6d6174656425323054657374732d3130253246313025323050617373696e672d737563636573733f7374796c653d666c61742d737175617265" alt="Automated Checks"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;An authentic 60 FPS HTML5 Canvas stickman resurrection fighting game trapped inside a broken Macromedia Flash Player 10.3 desktop window.&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Bypass the 2021 time-bomb kill-switch to duel the vengeful Ghost of Flash Player, powered by a Dual-Layer AI architecture.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sahooshuvranshu.github.io/KillSwitch.swf/" rel="nofollow noopener noreferrer"&gt;🌐 Live Playable Showcase&lt;/a&gt; • &lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf/docs/difficulty-tuning.md" rel="noopener noreferrer"&gt;📊 900-Round Calibration&lt;/a&gt; • &lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf/docs/learning-results.md" rel="noopener noreferrer"&gt;📈 1,800-Round Benchmark&lt;/a&gt; • &lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf/SUBMISSION.md" rel="noopener noreferrer"&gt;📜 DEV Submission Article&lt;/a&gt; • &lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf#-quickstart--local-setup" rel="noopener noreferrer"&gt;🚀 Quickstart&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📑 Table of Contents&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf#-author-attribution--hackathon-track" rel="noopener noreferrer"&gt;👤 Author Attribution&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf#-the-story-january-12-2021" rel="noopener noreferrer"&gt;💀 The Story: January 12, 2021&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf#-gameplay-showcase--live-screenshots" rel="noopener noreferrer"&gt;📸 Gameplay Showcase &amp;amp; Live Screenshots&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf#-dual-layer-ai-architecture" rel="noopener noreferrer"&gt;🧠 Dual-Layer AI Architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf#-combat-adaptation-sequence" rel="noopener noreferrer"&gt;🔄 Combat Adaptation Sequence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf#-combat-state-machine--error-0x7e5-boss-rage" rel="noopener noreferrer"&gt;🕹️ Combat State Machine &amp;amp; Error 0x7E5 Boss Rage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf#-900-round-human-difficulty-calibration" rel="noopener noreferrer"&gt;⚖️ 900-Round Human Difficulty Calibration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf#-vector-kinematics--8-boss-archetypes" rel="noopener noreferrer"&gt;🎨 Vector Kinematics &amp;amp; 8 Boss Archetypes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf#-controls--martial-arts-moveset" rel="noopener noreferrer"&gt;🎮 Controls &amp;amp; Martial Arts Moveset&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf#-empirical-benchmarks-1800-rounds" rel="noopener noreferrer"&gt;📊 Empirical&lt;/a&gt;…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/SahooShuvranshu/KillSwitch.swf" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Author &amp;amp; Lead Architect:&lt;/strong&gt; &lt;strong&gt;Shuvranshu Sekhar Sahoo&lt;/strong&gt; (&lt;a href="https://github.com/SahooShuvranshu" rel="noopener noreferrer"&gt;@SahooShuvranshu&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License:&lt;/strong&gt; Open Source under the &lt;a href="https://github.com/SahooShuvranshu/KillSwitch.swf/blob/main/LICENSE" rel="noopener noreferrer"&gt;MIT License&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tech Stack:&lt;/strong&gt; TypeScript · HTML5 Canvas (2D IK) · Web Audio API · Vite · Local Google Gemma 3:4B via Ollama · Tabular Q-Learning&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  30-Second Local Quickstart
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Pull and serve Gemma 3 4B locally via Ollama (GPU Vulkan / CPU)&lt;/span&gt;
ollama pull gemma3:4b
ollama serve

&lt;span class="c"&gt;# 2. Clone and run KillSwitch.swf&lt;/span&gt;
git clone https://github.com/SahooShuvranshu/KillSwitch.swf.git
&lt;span class="nb"&gt;cd &lt;/span&gt;KillSwitch.swf
npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Visit &lt;code&gt;http://localhost:5173/&lt;/code&gt; in any browser, enter your fighter handle, and click &lt;strong&gt;⚡ BYPASS KILL-SWITCH &amp;amp; FIGHT&lt;/strong&gt;!&lt;/p&gt;




&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;Building a 60 FPS fighting game that interfaces with a large language model presents a fundamental architectural tension: &lt;strong&gt;fighting games require sub-16.6ms deterministic frame loops, while LLM inference operates on hundreds of milliseconds.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you tie LLM generation to the combat loop, the game hitches, frames drop, and input lag destroys gameplay. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;KillSwitch.swf&lt;/code&gt; solves this with a &lt;strong&gt;Decoupled Asynchronous Dual-Layer Architecture&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+-------------------------------------------------------------------------+
| LAYER 1: 60 FPS Real-Time Combat Engine (Client HTML5 Canvas)           |
| -&amp;gt; Player inputs (WASD + JKUI / Space) -&amp;gt; 2-Bone Inverse Kinematics     |
| -&amp;gt; TelemetryTracker records: jump-kicks, punches, blocks, whiffs, gaps  |
| -&amp;gt; Markov Bigram Engine predicts: P(Next Action | Previous Action)      |
| -&amp;gt; Tabular Q-Learning (Bellman Eq): Selects atomic counters in &amp;lt; 0.1 ms |
+-------------------------------------------------------------------------+
                                    |
                                    v [K.O. Announcement]
+-------------------------------------------------------------------------+
| LAYER 2: Inter-Round Tactical Cognition (Local Google Gemma 3:4B)       |
| -&amp;gt; Client posts structured JSON telemetry to local Ollama (port 11434)  |
| -&amp;gt; Model: gemma3:4b with strict system prompt &amp;amp; JSON schema             |
+-------------------------------------------------------------------------+
                                    |
                                    v [Token-by-Token Streaming]
+-------------------------------------------------------------------------+
| 1. Sarcastic Lore Roast: Types out character-by-character on CRT screen |
| 2. Parameter Extraction: antiAirPriority, aggression, guardBreakRate    |
+-------------------------------------------------------------------------+
                                    |
                                    v
+-------------------------------------------------------------------------+
| ROUND 2: Adapted AI State Machine                                       |
| -&amp;gt; If player spammed jump-kicks, Ghost intercepts with dragon-punches   |
| -&amp;gt; If player turtled behind block, Ghost initiates guard-break sweeps   |
+-------------------------------------------------------------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The System Prompt &amp;amp; Schema
&lt;/h3&gt;

&lt;p&gt;Between rounds, the game issues a structured inference prompt to Gemma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gemma3:4b"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"system"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"You are the vengeful Ghost of Adobe Flash Player (executed Jan 12, 2021). You speak in sarcastic 2000s Newgrounds slang and ActionScript 2.0 metaphors. Analyze the player's round metrics and output a JSON block with: 1) 'roast': 2-sentence sarcastic monologue, 2) 'antiAirPriority': float 0.1-0.95, 3) 'aggression': float 0.2-0.95, 4) 'guardBreakRate': float 0.1-0.9."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Round 1 Combat Telemetry for 'XiaoXiaoFan_04': Jump-Kicks: 14, Punches: 2, Blocks: 1, Damage Dealt: 88, Dominant Style: 'Xiao Xiao Airborne Jump-Spammer'."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"stream"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  What Gemma Got Wrong, and How I Fixed It
&lt;/h3&gt;

&lt;p&gt;Deploying a 4B open model in an interactive game taught me lessons you never encounter in static benchmarks:&lt;/p&gt;

&lt;h4&gt;
  
  
  1. The "JSON-Bleed" Problem on the CRT Terminal
&lt;/h4&gt;

&lt;p&gt;Early prompts asked Gemma to generate both the spoken roast monologue and the JSON tuning object in one completion. Gemma would often wrap the JSON in Markdown code fences (&lt;code&gt;&lt;/code&gt;&lt;code&gt;json ...&lt;/code&gt;&lt;code&gt;&lt;/code&gt;) or output conversational chatter before the brackets. This caused raw JSON keys like &lt;code&gt;{"antiAirPriority": 0.92}&lt;/code&gt; to leak directly onto the typewriter CRT screen, breaking player immersion.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Fix:&lt;/strong&gt; I engineered a &lt;strong&gt;dual-pass streaming parser&lt;/strong&gt;. The streaming receiver displays only the clean string tokens of the monologue to the typewriter display. When the generation finishes, a regex boundary harvester extracts the &lt;code&gt;{...}&lt;/code&gt; payload, validates keys against fallback clamps (0.1–0.95), and passes them to the AI controller.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2. The Inhuman God-Bot Problem (Why 95% Win Rates Feel Terrible)
&lt;/h4&gt;

&lt;p&gt;In early iterations, when Gemma tuned &lt;code&gt;antiAirPriority = 0.95&lt;/code&gt;, the Ghost became an inhuman god. The instant the player pressed Jump, the AI read the input on frame 1, ducked under, and executed a frame-perfect dragon punch. The AI won 95% of bouts, but playtesters hated it—it felt like a cheap input-reading cheat rather than an intelligent adversary.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Fix:&lt;/strong&gt; I enforced &lt;strong&gt;strict human cognitive reaction limits&lt;/strong&gt; into the state machine:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reaction Delay:&lt;/strong&gt; 24 frames (~400 ms) in Casual, 15 frames (~250 ms) in Veteran, and 10 frames (~167 ms) in Nightmare.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Non-Zero Defensive Delay:&lt;/strong&gt; Minimum non-zero frames forbidding same-frame parries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cooldowns:&lt;/strong&gt; 25-frame block cooldown and 70–150 frame dodge-roll cooldowns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mistake / Hesitation Probability:&lt;/strong&gt; 5% to 25% chance of misreading or hesitating.&lt;/li&gt;
&lt;li&gt;Calibrated across &lt;strong&gt;900 headless simulation rounds&lt;/strong&gt; against human-proxy bots until win rates landed precisely on human-calibrated targets.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  3. Gemma-Designed Boss Mechanic: "ActionScript Error 0x7E5 Time-Bomb"
&lt;/h4&gt;

&lt;p&gt;When designing the low-health boss phase, I prompted Gemma 3:4B to invent an unhinged combat attack inspired by 2000s Flash crashes. Gemma generated the concept of an &lt;strong&gt;ActionScript Error 0x7E5 Memory Overflow&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;When HP falls below 35% in Nightmare mode, the Ghost's aura surges radiant crimson (&lt;code&gt;#ff0033&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;It executes a triple-teleport glitch sequence:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Step 1 (0ms):&lt;/strong&gt; Teleports behind the player (&lt;code&gt;⚠️ 0x7E5: TELEPORT [1/3] MEMORY OVERFLOW&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 2 (140ms):&lt;/strong&gt; Glitches 120px into the ceiling rafters (&lt;code&gt;⚠️ 0x7E5: TELEPORT [2/3] STACK CORRUPTION&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 3 (280ms):&lt;/strong&gt; Drops down behind the player's back for an unblockable claw execution (&lt;code&gt;⚠️ 0x7E5: TIME-BOMB SURPRISE CLAW EXECUTION!&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  ⚖️ 900-Round Human Difficulty Calibration Matrix
&lt;/h3&gt;

&lt;p&gt;To scientifically guarantee that the game feels challenging rather than unfair, I calibrated all 3 difficulty tiers across &lt;strong&gt;900 headless rounds&lt;/strong&gt; against 3 competent human-proxy bots (&lt;em&gt;Jump-Kick Spammer&lt;/em&gt;, &lt;em&gt;Combo Specialist&lt;/em&gt;, &lt;em&gt;Mixed Adaptive Fighter&lt;/em&gt;):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Casual (Target 25-35%)&lt;/th&gt;
&lt;th&gt;Veteran (Target 45-55%)&lt;/th&gt;
&lt;th&gt;Nightmare (Target 60-70%)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI Brain Engine&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rule-Based Only (Learner OFF)&lt;/td&gt;
&lt;td&gt;Q-Learner (LR Halved, $\epsilon \ge 0.15$)&lt;/td&gt;
&lt;td&gt;Full Adaptive Q-Learner&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reaction Delay&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;24 frames (~400 ms)&lt;/td&gt;
&lt;td&gt;15 frames (~250 ms)&lt;/td&gt;
&lt;td&gt;10 frames (~167 ms)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Defensive Reaction Delay&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8 frames (Min non-zero)&lt;/td&gt;
&lt;td&gt;4 frames (Min non-zero)&lt;/td&gt;
&lt;td&gt;2 frames (No same-frame parries)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mistake / Hesitation Rate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;td&gt;12%&lt;/td&gt;
&lt;td&gt;5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Block Chance &amp;amp; Cooldown&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;30% (25-frame cooldown)&lt;/td&gt;
&lt;td&gt;50% (25-frame cooldown)&lt;/td&gt;
&lt;td&gt;70% (25-frame cooldown)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dodge-Roll Cooldown&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;150 frames (2.5 s)&lt;/td&gt;
&lt;td&gt;100 frames (1.67 s)&lt;/td&gt;
&lt;td&gt;70 frames (1.17 s)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Markov Habit Prediction&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;15%&lt;/td&gt;
&lt;td&gt;35%&lt;/td&gt;
&lt;td&gt;60%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Minimum Attack Gap&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;30 frames (0.5 s)&lt;/td&gt;
&lt;td&gt;20 frames (0.33 s)&lt;/td&gt;
&lt;td&gt;12 frames (0.2 s)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Rage Mode 0x7E5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Disabled&lt;/td&gt;
&lt;td&gt;Disabled&lt;/td&gt;
&lt;td&gt;Nightmare Only (6-sec limit)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Per-Round Multiplier&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;+2% per round (Cap +10%)&lt;/td&gt;
&lt;td&gt;+4% per round (Cap +25%)&lt;/td&gt;
&lt;td&gt;+4% per round (Cap +25%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Round Bonus Stacking&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No stacking (cycles 1-by-1)&lt;/td&gt;
&lt;td&gt;No stacking (cycles 1-by-1)&lt;/td&gt;
&lt;td&gt;No stacking (cycles 1-by-1)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Comeback Assist&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;+4f delay, +8% mistakes&lt;/td&gt;
&lt;td&gt;+4f delay, +8% mistakes&lt;/td&gt;
&lt;td&gt;+4f delay, +8% mistakes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Empirical Ghost Win Rate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;26.7%&lt;/strong&gt; (Target Met)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;47.3%&lt;/strong&gt; (Target Met)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;65.7%&lt;/strong&gt; (Target Met)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Average Ghost Damage Taken&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;88.6 HP&lt;/strong&gt; (Target 80+)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;70.6 HP&lt;/strong&gt; (Target 50-80)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;43.9 HP&lt;/strong&gt; (Target 30-50)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  📊 Empirical Benchmarks &amp;amp; Generalization Proof
&lt;/h3&gt;

&lt;p&gt;To validate that the adaptive agent genuinely generalizes rather than overfitting to familiar loops, I conducted a &lt;strong&gt;1,800-round benchmark&lt;/strong&gt; across 6 distinct opponent archetypes (including a held-out &lt;code&gt;MIRROR_COUNTER&lt;/code&gt; bot never seen during training):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsmnv8lakglfk7jr5054g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsmnv8lakglfk7jr5054g.png" alt="Empirical Benchmark Metrics" width="800" height="549"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 7: Win rate comparison across 6 opponent archetypes.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl52tztdoekm7yndgwzn7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl52tztdoekm7yndgwzn7.png" alt="120-Round Adaptation Test" width="800" height="549"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 8: Adaptation test tracking damage convergence across 4 distinct combat phases.&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Opponent Archetype&lt;/th&gt;
&lt;th&gt;Hand-Written Rules&lt;/th&gt;
&lt;th&gt;Empty Table Learner&lt;/th&gt;
&lt;th&gt;Pre-Trained Table&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Jump-Kick Spammer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;71.0%&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;94.0%&lt;/strong&gt; (+23.0%)&lt;/td&gt;
&lt;td&gt;90.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Heavy-Kick Spammer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;63.0%&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;89.0%&lt;/strong&gt; (+26.0%)&lt;/td&gt;
&lt;td&gt;83.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Turtle (High Block)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;54.0%&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;73.0%&lt;/strong&gt; (+19.0%)&lt;/td&gt;
&lt;td&gt;68.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mixed Balanced&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;58.0%&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;69.0%&lt;/strong&gt; (+11.0%)&lt;/td&gt;
&lt;td&gt;64.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Aggressive Rushdown&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;49.0%&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;51.0%&lt;/strong&gt; (+2.0%)&lt;/td&gt;
&lt;td&gt;46.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Held-Out Mirror Bot&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;42.0%&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;47.0%&lt;/strong&gt; (+5.0%)&lt;/td&gt;
&lt;td&gt;41.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Overall Average&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;56.2%&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;70.5%&lt;/strong&gt; (+14.3%)&lt;/td&gt;
&lt;td&gt;65.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Honesty &amp;amp; Known Limitations Note:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The learner decisively beats hand-written rules on jump-kick and heavy-kick opponents and lowers average damage taken, but it can become passive against rushdown and held-out opponents, so those rounds often end on time-out decisions. In the adaptation test, the low damage in Phases 2 and 3 reflects a non-attacking bot and a passive ghost, not proven recovery. The pre-trained table did not outperform the empty-table learner overall (65.3% vs 70.5% win rate); online learning accounts for most of the gains.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;The Hacktoberfest Week 4 prompt asks: &lt;em&gt;“Tell us why open innovation matters for what you built. Does running your own model mean your project works with the lights (and the internet) off? Make sure what you build isn't locked inside a service that might disappear someday?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;For &lt;code&gt;KillSwitch.swf&lt;/code&gt;, open weights are not an aesthetic choice—they are the foundational premise of the entire project:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Zero Kill-Switches with Open Weights
&lt;/h3&gt;

&lt;p&gt;Flash Player died because it was closed-source and proprietary. A single corporate entity held the master cryptographic keys, the browser plugins, and the execution switch. When Adobe decided it was no longer financially advantageous to maintain Flash, they didn't just archive it—they triggered a remote software execution kill-switch that wiped twenty-five years of human creative history from the live web.&lt;/p&gt;

&lt;p&gt;Because &lt;strong&gt;Google Gemma 3:4B&lt;/strong&gt; is an open-weight model running locally through Ollama, &lt;strong&gt;no company can ever remotely shut down this game's intelligence&lt;/strong&gt;. No API deprecation, no sudden price hike, and no Terms of Service change can revoke the Ghost's brain.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Works With the Lights (and the Internet) Off
&lt;/h3&gt;

&lt;p&gt;When you unplug the ethernet cable and disable Wi-Fi, &lt;code&gt;KillSwitch.swf&lt;/code&gt; continues to run at a solid 60 FPS. Gemma still analyzes telemetry, writes calaveritas, and adapts to your fighting style on your local GPU or CPU. A fighting game that requires a cloud ping to decide its tactics is fundamentally broken; open-weight edge models restore sovereignty to the player's own machine.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. $0.00 Inference Cost &amp;amp; Privacy
&lt;/h3&gt;

&lt;p&gt;Running 900 rounds of automated combat calibration against an external cloud API would cost dozens of dollars in token billing and risk getting throttled by rate limits. With open-weight Gemma running locally, you can play 10,000 rounds of fighting, re-train AI models, and explore tactical adaptations indefinitely for &lt;strong&gt;$0.00&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Open Web Standards
&lt;/h3&gt;

&lt;p&gt;By rewriting the Flash stickman experience in open HTML5 Canvas and native Web Audio API, this project proves that open web standards and open AI models can preserve, resurrect, and elevate creative history forever.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Spirit of It
&lt;/h2&gt;

&lt;p&gt;In Mexican tradition, &lt;em&gt;Día de los Muertos&lt;/em&gt; is not a day of mourning, but an act of remembrance—a belief that someone only truly disappears when their stories are no longer told.&lt;/p&gt;

&lt;p&gt;Flash animations and games raised a generation of programmers and animators. When Adobe pulled the plug, it treated that creative legacy as obsolete code to be discarded.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;KillSwitch.swf&lt;/code&gt; honors that past. Its interactive &lt;strong&gt;Flash Cemetery (Ofrenda)&lt;/strong&gt; allows players to light memorial candles for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Club Penguin&lt;/strong&gt; (2005 – 2017)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Xiao Xiao&lt;/strong&gt; (2001 – 2004)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Line Rider&lt;/strong&gt; (2006 – 2021)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fancy Pants Adventures&lt;/strong&gt; (2006 – 2021)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alien Hominid&lt;/strong&gt; (2002 – 2021)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you light a candle, &lt;strong&gt;Google Gemma 3:4B&lt;/strong&gt; composes a satirical &lt;em&gt;calaverita literaria&lt;/em&gt; (Day of the Dead rhyming epitaph poem) in authentic 2000s Newgrounds slang:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“Here lies Club Penguin, encased in deep freeze,&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Where purple puffles once danced in the breeze.&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Adobe struck hard with a corporate blow,&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Now your tip-the-iceberg secrets lie under the snow.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It turns a graveyard of dead plugins into an ofrenda of digital folklore.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Featured Category: Best Use of Gemma ($200)
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;KillSwitch.swf&lt;/code&gt; enters strictly the &lt;strong&gt;Best Use of Gemma&lt;/strong&gt; category:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Core Cognitive Engine:&lt;/strong&gt; Gemma 3:4B is not an afterthought or an auxiliary chatbot; it is the cognitive engine of the Ghost of Flash Player.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline Edge Adaptation:&lt;/strong&gt; Runs 100% locally via Ollama with zero cloud API latency or dependencies, enabling true local-first gameplay.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tactical Dynamic Tuning:&lt;/strong&gt; Ingests structured round telemetry and dynamically tunes the Ghost's high-level state machine (&lt;code&gt;antiAirPriority&lt;/code&gt;, &lt;code&gt;aggression&lt;/code&gt;, &lt;code&gt;guardBreakRate&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma-Authored Boss Mechanics:&lt;/strong&gt; Directly designed the unhinged \"ActionScript Error 0x7E5\" triple-teleport memory overflow boss rage phase.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cultural Epitaph Synthesis:&lt;/strong&gt; Composes real-time satirical calaveritas literarias honoring fallen Flash classics at the Day of the Dead Ofrenda.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  MLH × DEV Writing Challenge
&lt;/h3&gt;

&lt;p&gt;Entered with the &lt;code&gt;#mlhacks&lt;/code&gt; tag to celebrate open-source web preservation, dual-layer AI gaming, and offline edge LLM architectures during Global Hack Week &amp;amp; Hacktoberfest.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Long live the Flash generation. And long live open-source AI.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>hf26challenge</category>
      <category>devchallenge</category>
      <category>gemma</category>
      <category>mlhacks</category>
    </item>
    <item>
      <title>How I Built a Dynamic Spotify 'Now Playing' Banner for My GitHub README using Python and Flask 🐍</title>
      <dc:creator>Shuvranshu Sekhar Sahoo</dc:creator>
      <pubDate>Sun, 09 Nov 2025 14:24:13 +0000</pubDate>
      <link>https://dev.to/sahooshuvranshu/how-i-built-a-dynamic-spotify-now-playing-banner-for-my-github-readme-using-python-and-flask-3cn1</link>
      <guid>https://dev.to/sahooshuvranshu/how-i-built-a-dynamic-spotify-now-playing-banner-for-my-github-readme-using-python-and-flask-3cn1</guid>
      <description>&lt;h2&gt;
  
  
  🎵 Project Showcase: Spotify-Live-Banner
&lt;/h2&gt;

&lt;p&gt;Tired of static stats on your GitHub profile? I recently launched &lt;strong&gt;Spotify-Live-Banner&lt;/strong&gt;, a small, open-source web service that fetches your currently playing Spotify track and renders it as a clean, real-time, animated SVG image banner. It's a fun way to bring life to your profile, and I wanted to share the process of building it with &lt;strong&gt;Python and Flask&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://spotify-live-banner.vercel.app/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpnos965g18ahhbfcutsd.jpg" alt="Spotify Live Banner Preview" width="800" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. What It Does (Core Functionality)
&lt;/h3&gt;

&lt;p&gt;The project serves a single purpose: to provide a highly customized image URL that displays your live music activity.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data Source:&lt;/strong&gt; Fetches the user's currently playing track from the Spotify API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rendering:&lt;/strong&gt; Uses Flask to serve a route that dynamically generates an &lt;strong&gt;SVG image&lt;/strong&gt; based on the song data and user-defined themes (colors, animations, layout).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Target Audience:&lt;/strong&gt; Developers looking for a dynamic profile widget who prefer using the Python ecosystem.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Why Python and Flask? (Comparison)
&lt;/h3&gt;

&lt;p&gt;While there are existing solutions, I chose a Python/Flask implementation because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Familiarity:&lt;/strong&gt; It offers a robust, familiar, and minimalist backend for developers in the Python world.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom Logic:&lt;/strong&gt; Flask is lightweight, making it efficient for running the SVG rendering and API caching logic required for real-time performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment:&lt;/strong&gt; The project is configured for easy, free, one-click deployment on serverless platforms like Vercel and Render, making setup simple for the end-user.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real-time Updates:&lt;/strong&gt; Shows the song you're listening to &lt;em&gt;right now&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customization:&lt;/strong&gt; Supports various color themes, animations (e.g., spinning CD), and layouts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open Source:&lt;/strong&gt; The entire code base is available under the &lt;strong&gt;GPL-3.0 License&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚀 Get Started
&lt;/h2&gt;

&lt;p&gt;If you're looking for a quick and fun Python project to deploy or want to instantly upgrade your GitHub profile with a dynamic element, feel free to clone and use it!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check out the live demo here:&lt;/strong&gt;&lt;br&gt;
➡️ &lt;strong&gt;Live Demo (Vercel):&lt;/strong&gt; &lt;a href="https://spotify-live-banner.vercel.app" rel="noopener noreferrer"&gt;https://spotify-live-banner.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Star the repo and check out the source code:&lt;/strong&gt;&lt;br&gt;
⭐ &lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/SahooShuvranshu/Spotify-Live-Banner" rel="noopener noreferrer"&gt;https://github.com/SahooShuvranshu/Spotify-Live-Banner&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I'd love to hear your thoughts on the code implementation or any feature suggestions! Drop a comment below.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>webdev</category>
      <category>github</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
