|
8830
|
AgentSwarm by @nikhil_nagaraj | Stardance
|
nikhil_nagaraj
|
0
|
73.75
|
0
|
[]
|
[{"post_id": 64019, "ts": "202 [{"post_id": 64019, "ts": "2026-09-08T04:01:56Z", "hours": 9.74, "text": "Devlog 8 Went nuclear and did a git reset because smth was killing my code. I still don’t know what, but it is what it is. At least now I’ll be able to fix it and get back to my old stage. Im working on fixing it. Btw this guy is gonna be the death of me"}, {"post_id": 63028, "ts": "2026-09-06T16:22:29Z", "hours": 9.8806, "text": "Devlog 7 hey guys. seventh devlog. devlog six gave the swarm a memory - metrics, cache stats, handoff index, overdue tasks. TUI parsing tui/runner.py parses agent markers now with parse_agent_marker, soprogress is real instead of spinner theater. short_status_line rendersprogress like 2 of 6 with percent plus writer in the footer, and acancel sentinel lets Ctrl+C set a flag file the worker checks insteadof killing mid-write. no more half decks on cancel. the web app remembers and shares app.py appends every job to job history json (last fifty kept),so refresh does not wipe your day. zip_outputs bundles pptx, docx,html, xlsx, pdf, and md into one download, and safe_filenamesanitizes anything weird before it hits the header. small endpoints,big usability win. the guards got pickier agents/pipeline_guards.py added three focused gates. readabilityfails on filler density and paragraph-bullets, heading structurerequires at least three real sections, evidence coverage requires atleast two distinct http sources. they run cheap, explain themselvesin one line, and catch the exact slop the critic used to wavethrough. the creator writes decently now agents/creator_quality.py grew humanize_text_v2 - in order becomes to, due to the fact that becomes because, unlock the power of becomes use. score_section_visual picks timeline, comparison,stats, bento, or text from actual cues instead of forcing one layout. tighten_bullets clips at word boundaries with an ellipsis so slides never overflow their boxes. the orchestrator cleans up after itself agents/orchestrator.py quarantines suspect artefacts underquarantine folder instead of clobbering good output, exposesprogress_snapshot for both TUI and web UI, and should_resumedetects a checkpoint worth resuming. run_with_progress wraps nodeexecution with an optional callback so both frontends share oneprogress shape. tests lock it in tests/test_swarm_hardening.py covers the whole pass: cost math,empty summaries, filler rejection, heading minimums, url counting,cache stats, missing-handoff detection, marker parsing, and the humanizer scrub. nine tests, all deterministic, no network, no LLM.run them with pytest tests/test_swarm_hardening.py -v. where it stands open a fresh deck, site, doc, sheet, and pdf from the same draft -they share a brand, titles are short, bullets fit, images match the subject, motion is subtle, filler is gone. open the session folder -plan, research, analysis, draft, critique, creator, plus index.json.open the metrics - elapsed, hit rate, guard wins. the swarm finally feels like a tool you can run all day and trust. This is a website it created for a business"}, {"post_id": 62698, "ts": "2026-09-06T05:51:36Z", "hours": 8.9286, "text": "Devlog #6 I improved this project by a little bit Slideshows Slideshows now have backgrounds, images, graphics, fonts, designs, and nicer templates websites Websites now have animations, images, sections, and are customized and tailored to the research task! documents Docs now have colors to organize thoughts and sections, and as well as images and visuals every so often What’s next? Drastic imrpovement, and new output type soon"}, {"post_id": 61548, "ts": "2026-09-04T14:51:38Z", "hours": 9.2414, "text": "Devlog 5 hola fifth devlog. the last two got the decks real structure and stopped a bunch of problems with like backgrounds and other stuff. so this one is all about the creator. planner, researcher, writer can do their jobs fine. However, if the creator fumbles the last mile, nobody cares how good the draft was. the creator improved agents/creator.py was the biggest culprit. _clean_content_for_slides was stripping file paths and a handful of phrases, but “delve”, “tapestry”, “game-changer”, “seamless”, “robust”, all that stuff was sailing straight onto slides.it strips all of that now. expanded filler list, whitespace collapse, drops those **** divider lines that used to become phantom slides, truncates sanely instead of cutting mid-word.also added three little helpers i wish i’d had earlier. _premium_truncate cuts at a word boundary and adds the ellipsis, _humanize_heading cleans the [layout:...] tags and keeps titles under 60 chars with proper casing, _score_section_visual actually looks at the section — timeline words + 3 bullets = timeline, versus/comparison + 4 bullets = comparison, stats + numbers = stat grid, 5+ bullets = bento. no more forcing every section into the same text wall pptx is finally actually semi-decent with animations and stuff this one bugged me for a while. agents/pptx_builder.py had _add_shape_animation and it was literally a no-op. just return . so we’d promise motion and ship static decks. now it wires real entrance animations into the timing tree. The animations are appear, fade, fly, grow, wipe, with delay support. it’s still subtle, staggered, not the 2007 bounce-everything-in kind. charts ease in, bullets cascade, hero elements land in order. open it in PowerPoint and it actually feels presented, not pasted. the critic got pickier agents/critic.py would pass stuff with “showcasing” and “unlock” all over it as long as the structure was right. added _critic_visual_score , which checks min 4 sections for rhythm, flags filler hits, flags bullets over 110 chars, needs 82+ to pass. it’s caught three decks this week i would’ve shipped before. agents/polisher.py got the same strictness on the html side — enforces hierarchy, fixes those 10px body styles that slipped through, strips leftover ai-generated / placeholder / lorem classes. agents/visual_builder.py got cinematic helpers, so it has proper 21:9 captions, glass CSS token, bento span logic so the first cell gets the weight. where it stands opened five fresh outputs side by side yesterday — deck, site, doc, sheet, pdf from the same draft. for the first time they felt like the same brand. titles are short, bullets fit, images match the subject, motion is there but doesn’t shout, and i didn’t spot a single “delve” or “tapestry”."}, {"post_id": 61313, "ts": "2026-09-04T05:10:29Z", "hours": 9.0375, "text": "Devlog 4 Drastically improved the slideshow generator and website generator Not much here, just took me 6 HOURS TO FIGURE OUT WHY THEY SUCKED The agent didn’t have the capabilities to do a background, so it was always white. Also, it was stickign to very basic styles and templates. I made them so much better (still a WIP) Last 3 hours were spent actually working on and off Only the last 3 hours were actually spent doing real work, so I lowk am cooked. Here’s some fried rice and smoothie I made! The tanghulu was a failure but at least it tasted good :P"}, {"post_id": 60265, "ts": "2026-09-02T15:04:03Z", "hours": 7.9603, "text": "Devlog 3 hey guys. Third devlog. Devlog two shipped fifty-two templates and an art director,and the html pages finally looked somewhat decent. However, they still sucked. The slides on the first iteration had almost no images, no background, nothing. It sucked until I asked it a bunch of times to revise it. the forensics before writing a line of new render code i unzipped both decks and diffed the xml. Agentswarm: 15 identical stat slides, 1 picture total. the reference:13 slides, 12 large images, and a real story arc - full-bleed cover,overview dashboard, content slides with big image panels and labeled morning/afternoon/evening blocks, an insider-tip callout, a section divider. the gap wasn’t the fonts; it was structure and imagery. and since our renderer preferred keyless stock chains and fell back to random picsumgarbage when they failed, “the images are buns” was literally true.i also found the deck was leaking its own internals onto the slides:template names, character counts, a signature footer. nothing says”designed by an ai who gave up” like “generated with template vogue ”. the rebuild scripts/pptx_template_renderer.py got rewritten around one rule: atemplate is guidance, not law. it still picks a palette, typeface pairing,and hero flavor from the spec, but every layout is chosen from the actualcontent. the archetypes are the workhorses now:- full-bleed cover with scrim, eyebrow kicker, giant title, meta strip- agenda slide with real numbered sections and content-derived stat cards- feature slides: big image panel, up to three labeled blocks (the context / the detail / the takeaway), a key-takeaway callout- timeline, comparison, quote, and gallery variants for sections that call for them - capped so a deck never spams the same layout- section divider, sources, and a closing slideevery slide gets header chrome with a section badge and page numbers,plus speaker notes. the image pipeline now tries the ai generator firstwith per-section prompts (verified live - one image every ten seconds),then the stock chain, then a styled gradient. the red badge and randompicsum are gone. where it stands still deterministic, still no llm in the loop, still pyright clean. the bronze ox is gone because the pipeline finally knows the difference between a farm animal and a model name. still ahead: teaching the website renderer to generate its own images when the cache is cold, and pushing the same director thinking down into the pdf path. This is a one-shot result - it kind of sucks"}, {"post_id": 59977, "ts": "2026-09-02T02:02:54Z", "hours": 9.7839, "text": "Devlog 2 hey guys. second devlog. the first was about keeping the pipeline alive underpressure; this one is about making it actually good. the goal was to stop thecreator from reaching for the same handful of preset looks, and to make theresearcher think before it searches. along the way a few hundred errors inthe problems panel just magically fricking appeared and took me way too long to fricking solve. A bunch of new clean templates The previous set of templates that the creator agent was given were complete dodo, like worse than the gta 6 leaks by cyberpunk and thick of it. the old template system was a few hardcoded themes and a color swap. Now, there are fifty-two distinct templates across eight categories - editorial, corporate, tech, creative, minimal, data,storytelling, luxury. Each one is a complete design dna, not a recolored clone: its own palette, typography pairing, grid, signature element(oversized type, noise grain, gradient orbs, marble texture…), and section composition rules. both the html and pptx renderers consume the same specs,so a website and its matching deck look like siblings. New agent - art director Templates alone just give you more wallpaper, so the creator got an art director ( agents/art_director.py ). it maps the task and industry to a visual direction - palette mood, typography voice, imagery style, layout personality - across ten moods from editorial to brutalist to nightlife. a coffee shop brief lands on faded-sun vintage with grainy texture; a saas pitch gets cool slate and a bento grid. no llm, always available, and its direction folds into template selection so outputs stop looking like one fixed style. Added visuals to the slides (still need a lot of work) the pptx renderer’s primary path is now the spec-driven template renderer:one dominant focal point per slide - image plus caption, stat, quote,timeline, or comparison - short visible text, and human speaker notes onevery slide. something visual every slide, balanced against the words. quality passes before anything renders markdown now runs through deterministic passes in agents/creator_quality.py before the creator touches it. humanize_text scrubs the telltale ai-isms(moreover, leverage, delve, seamless…) so the voice reads human. narrative_arc_md makes sure sources land at the end instead of opening thepiece. annotate_visual_hints finds sections that would render as unbrokenprose and injects a takeaway bullet from the section’s own first goodsentence. and the new quality_gate self-reports coverage issues onproduced outputs. the researcher plans and verifies now research used to be: search, scrape, write whatever came back. now agents/research_plan.py turns the task plus the planner handoff into subtopics, key questions, and evidence targets that anchor every search round - targeted instead of spray-and-pray, with deterministic fallbacks so fast mode still works with zero llm calls. and agents/evidence.py extracts atomic claims from scraped sources, then verifies them across sources:corroborated, contradicted, or unsupported. the synthesis prompt now refuses to present a number as fact unless the evidence view backs it, and the researcher wires its handoff text back into the prompts it actually sends -which was fetch-and-forget before. This is a slideshow it made after a lot of tweaking (like 20+ prompts); I want it to be able to do such a thing in 1 prompt so still a lot of work to be done."}, {"post_id": 59319, "ts": "2026-09-01T01:26:41Z", "hours": 7.9281, "text": "Devlog 1 hey guys. foundatin for the project I built a simple foundation for the project with a nice TUI and simple functoinality (base version for each agent). Researcher agent The researcher agent so far has a base firecrawl api, simple web search, and does nothing else so far Analyst agent The analyst agent’s only job is to analyze and summarize all key info found by the researcher Writer agent The writer agent’s job is to write prompts for the creator agent including all relevant information from the research Creator agent The creator’s only job is to create slideshows and other outputs based on given info Critic agent The critic’s only job is to criticize the output quality of the creator agent These are all only rough implimentations of them, more is yet to come"}, {"post_id": 34128, "ts": "2026-07-24T16:51:43Z", "hours": 1.2469, "text": "I’m making a swarm of ai agents to help with research - but fully free, open source, and byo. That way, you aren’t locked to one ecosystem. Im just starting out. This is my current pipeline"}]...
|
Title: AgentSwarm by @nikhil_nagaraj | Stardance
Title: AgentSwarm by @nikhil_nagaraj | Stardance
Devlogs:
I’m making a swarm of ai agents to help with research - but fully free, open source, and byo. That way, you aren’t locked to one ecosystem. Im just starting out. This is my current pipeline
Devlog 1 hey guys. foundatin for the project I built a simple foundation for the project with a nice TUI and simple functoinality (base version for each agent). Researcher agent The researcher agent so far has a base firecrawl api, simple web search, and does nothing else so far Analyst agent The analyst agent’s only job is to analyze and summarize all key info found by the researcher Writer agent The writer agent’s job is to write prompts for the creator agent including all relevant information from the research Creator agent The creator’s only job is to create slideshows and other outputs based on given info Critic agent The critic’s only job is to criticize the output quality of the creator agent These are all only rough implimentations of them, more is yet to come
Devlog 2 hey guys. second devlog. the first was about keeping the pipeline alive underpressure; this one is about making it actually good. the goal was to stop thecreator from reaching for the same handful of preset looks, and to make theresearcher think before it searches. along the way a few hundred errors inthe problems panel just magically fricking appeared and took me way too long to fricking solve. A bunch of new clean templates The previous set of templates that the creator agent was given were complete dodo, like worse than the gta 6 leaks by cyberpunk and thick of it. the old template system was a few hardcoded themes and a color swap. Now, there are fifty-two distinct templates across eight categories - editorial, corporate, tech, creative, minimal, data,storytelling, luxury. Each one is a complete design dna, not a recolored clone: its own palette, typography pairing, grid, signature element(oversized type, noise grain, gradient orbs, marble texture…), and section composition rules. both the html and pptx renderers consume the same specs,so a website and its matching deck look like siblings. New agent - art director Templates alone just give you more wallpaper, so the creator got an art director ( agents/art_director.py ). it maps the task and industry to a visual direction - palette mood, typography voice, imagery style, layout personality - across ten moods from editorial to brutalist to nightlife. a coffee shop brief lands on faded-sun vintage with grainy texture; a saas pitch gets cool slate and a bento grid. no llm, always available, and its direction folds into template selection so outputs stop looking like one fixed style. Added visuals to the slides (still need a lot of work) the pptx renderer’s primary path is now the spec-driven template renderer:one dominant focal point per slide - image plus caption, stat, quote,timeline, or comparison - short visible text, and human speaker notes onevery slide. something visual every slide, balanced against the words. quality passes before anything renders markdown now runs through deterministic passes in agents/creator_quality.py before the creator touches it. humanize_text scrubs the telltale ai-isms(moreover, leverage, delve, seamless…) so the voice reads human. narrative_arc_md makes sure sources land at the end instead of opening thepiece. annotate_visual_hints finds sections that would render as unbrokenprose and injects a takeaway bullet from the section’s own first goodsentence. and the new quality_gate self-reports coverage issues onproduced outputs. the researcher plans and verifies now research used to be: search, scrape, write whatever came back. now agents/research_plan.py turns the task plus the planner handoff into subtopics, key questions, and evidence targets that anchor every search round - targeted instead of spray-and-pray, with deterministic fallbacks so fast mode still works with zero llm calls. and agents/evidence.py extracts atomic claims from scraped sources, then verifies them across sources:corroborated, contradicted, or unsupported. the synthesis prompt now refuses to present a number as fact unless the evidence view backs it, and the researcher wires its handoff text back into the prompts it actually sends -which was fetch-and-forget before. This is a slideshow it made after a lot of tweaking (like 20+ prompts); I want it to be able to do such a thing in 1 prompt so still a lot of work to be done.
Devlog 3 hey guys. Third devlog. Devlog two shipped fifty-two templates and an art director,and the html pages finally looked somewhat decent. However, they still sucked. The slides on the first iteration had almost no images, no background, nothing. It sucked until I asked it a bunch of times to revise it. the forensics before writing a line of new render code i unzipped both decks and diffed the xml. Agentswarm: 15 identical stat slides, 1 picture total. the reference:13 slides, 12 large images, and a real story arc - full-bleed cover,overview dashboard, content slides with big image panels and labeled morning/afternoon/evening blocks, an insider-tip callout, a section divider. the gap wasn’t the fonts; it was structure and imagery. and since our renderer preferred keyless stock chains and fell back to random picsumgarbage when they failed, “the images are buns” was literally true.i also found the deck was leaking its own internals onto the slides:template names, character counts, a signature footer. nothing says”designed by an ai who gave up” like “generated with template vogue ”. the rebuild scripts/pptx_template_renderer.py got rewritten around one rule: atemplate is guidance, not law. it still picks a palette, typeface pairing,and hero flavor from the spec, but every layout is chosen from the actualcontent. the archetypes are the workhorses now:- full-bleed cover with scrim, eyebrow kicker, giant title, meta strip- agenda slide with real numbered sections and content-derived stat cards- feature slides: big image panel, up to three labeled blocks (the context / the detail / the takeaway), a key-takeaway callout- timeline, comparison, quote, and gallery variants for sections that call for them - capped so a deck never spams the same layout- section divider, sources, and a closing slideevery slide gets header chrome with a section badge and page numbers,plus speaker notes. the image pipeline now tries the ai generator firstwith per-section prompts (verified live - one image every ten seconds),then the stock chain, then a styled gradient. the red badge and randompicsum are gone. where it stands still deterministic, still no llm in the loop, still pyright clean. the bronze ox is gone because the pipeline finally knows the difference between a farm animal and a model name. still ahead: teaching the website renderer to generate its own images when the cache is cold, and pushing the same director thinking down into the pdf path. This is a one-shot result - it kind of sucks
Devlog 4 Drastically improved the slideshow generator and website generator Not much here, just took me 6 HOURS TO FIGURE OUT WHY THEY SUCKED The agent didn’t have the capabilities to do a background, so it was always white. Also, it was stickign to very basic styles and templates. I made them so much better (still a WIP) Last 3 hours were spent actually working on and off Only the last 3 hours were actually spent doing real work, so I lowk am cooked. Here’s some fried rice and smoothie I made! The tanghulu was a failure but at least it tasted good :P
Devlog 5 hola fifth devlog. the last two got the decks real structure and stopped a bunch of problems with like backgrounds and other stuff. so this one is all about the creator. planner, researcher, writer can do their jobs fine. However, if the creator fumbles the last mile, nobody cares how good the draft was. the creator improved agents/creator.py was the biggest culprit. _clean_content_for_slides was stripping file paths and a handful of phrases, but “delve”, “tapestry”, “game-changer”, “seamless”, “robust”, all that stuff was sailing straight onto slides.it strips all of that now. expanded filler list, whitespace collapse, drops those **** divider lines that used to become phantom slides, truncates sanely instead of cutting mid-word.also added three little helpers i wish i’d had earlier. _premium_truncate cuts at a word boundary and adds the ellipsis, _humanize_heading cleans the [layout:...] tags and keeps titles under 60 chars with proper casing, _score_section_visual actually looks at the section — timeline words + 3 bullets = timeline, versus/comparison + 4 bullets = comparison, stats + numbers = stat grid, 5+ bullets = bento. no more forcing every section into the same text wall pptx is finally actually semi-decent with animations and stuff this one bugged me for a while. agents/pptx_builder.py had _add_shape_animation and it was literally a no-op. just return . so we’d promise motion and ship static decks. now it wires real entrance animations into the timing tree. The animations are appear, fade, fly, grow, wipe, with delay support. it’s still subtle, staggered, not the 2007 bounce-everything-in kind. charts ease in, bullets cascade, hero elements land in order. open it in PowerPoint and it actually feels presented, not pasted. the critic got pickier agents/critic.py would pass stuff with “showcasing” and “unlock” all over it as long as the structure was right. added _critic_visual_score , which checks min 4 sections for rhythm, flags filler hits, flags bullets over 110 chars, needs 82+ to pass. it’s caught three decks this week i would’ve shipped before. agents/polisher.py got the same strictness on the html side — enforces hierarchy, fixes those 10px body styles that slipped through, strips leftover ai-generated / placeholder / lorem classes. agents/visual_builder.py got cinematic helpers, so it has proper 21:9 captions, glass CSS token, bento span logic so the first cell gets the weight. where it stands opened five fresh outputs side by side yesterday — deck, site, doc, sheet, pdf from the same draft. for the first time they felt like the same brand. titles are short, bullets fit, images match the subject, motion is there but doesn’t shout, and i didn’t spot a single “delve” or “tapestry”.
Devlog #6 I improved this project by a little bit Slideshows Slideshows now have backgrounds, images, graphics, fonts, designs, and nicer templates websites Websites now have animations, images, sections, and are customized and tailored to the research task! documents Docs now have colors to organize thoughts and sections, and as well as images and visuals every so often What’s next? Drastic imrpovement, and new output type soon
Devlog 7 hey guys. seventh devlog. devlog six gave the swarm a memory - metrics, cache stats, handoff index, overdue tasks. TUI parsing tui/runner.py parses agent markers now with parse_agent_marker, soprogress is real instead of spinner theater. short_status_line rendersprogress like 2 of 6 with percent plus writer in the footer, and acancel sentinel lets Ctrl+C set a flag file the worker checks insteadof killing mid-write. no more half decks on cancel. the web app remembers and shares app.py appends every job to job history json (last fifty kept),so refresh does not wipe your day. zip_outputs bundles pptx, docx,html, xlsx, pdf, and md into one download, and safe_filenamesanitizes anything weird before it hits the header. small endpoints,big usability win. the guards got pickier agents/pipeline_guards.py added three focused gates. readabilityfails on filler density and paragraph-bullets, heading structurerequires at least three real sections, evidence coverage requires atleast two distinct http sources. they run cheap, explain themselvesin one line, and catch the exact slop the critic used to wavethrough. the creator writes decently now agents/creator_quality.py grew humanize_text_v2 - in order becomes to, due to the fact that becomes because, unlock the power of becomes use. score_section_visual picks timeline, comparison,stats, bento, or text from actual cues instead of forcing one layout. tighten_bullets clips at word boundaries with an ellipsis so slides never overflow their boxes. the orchestrator cleans up after itself agents/orchestrator.py quarantines suspect artefacts underquarantine folder instead of clobbering good output, exposesprogress_snapshot for both TUI and web UI, and should_resumedetects a checkpoint worth resuming. run_with_progress wraps nodeexecution with an optional callback so both frontends share oneprogress shape. tests lock it in tests/test_swarm_hardening.py covers the whole pass: cost math,empty summaries, filler rejection, heading minimums, url counting,cache stats, missing-handoff detection, marker parsing, and the humanizer scrub. nine tests, all deterministic, no network, no LLM.run them with pytest tests/test_swarm_hardening.py -v. where it stands open a fresh deck, site, doc, sheet, and pdf from the same draft -they share a brand, titles are short, bullets fit, images match the subject, motion is subtle, filler is gone. open the session folder -plan, research, analysis, draft, critique, creator, plus index.json.open the metrics - elapsed, hit rate, guard wins. the swarm finally feels like a tool you can run all day and trust. This is a website it created for a business
Devlog 8 Went nuclear and did a git reset because smth was killing my code. I still don’t know what, but it is what it is. At least now I’ll be able to fix it and get back to my old stage. Im working on fixing it. Btw this guy is gonna be the death of me...
|
1793872404.8438082
|
1794736404.8438082
|
|
46389
|
Street Fighter Model by @elvincheung0321 | Stardan Street Fighter Model by @elvincheung0321 | Stardance...
|
elvincheung0321
|
0
|
123.36
|
0
|
[]
|
[{"post_id": 54469, "ts": "202 [{"post_id": 54469, "ts": "2026-08-25T14:18:23Z", "hours": 2.1628, "text": "Work on hyperparameter tuning"}, {"post_id": 54351, "ts": "2026-08-25T09:40:51Z", "hours": 22.3614, "text": "Trained for a day, bad results due to poorly optimized hyperparameters"}, {"post_id": 51071, "ts": "2026-08-20T15:35:38Z", "hours": 2.3414, "text": "Added rewards for winning rounds"}, {"post_id": 50324, "ts": "2026-08-19T14:25:43Z", "hours": 8.5794, "text": "Street Fighter II Model - Model Regressing After training for another night, my model starting regressing again, now even losing to Guile Next steps The issue is once again my reward function, since its rewarding the model based on its damage, it would have a higher reward if it loses one round out of the three, since it would be able to deal more damage to bloat the rewards. My plan is to tweak the reward function again to incorporate rewarding it when it wins any rounds."}, {"post_id": 49609, "ts": "2026-08-18T14:30:41Z", "hours": 25.1297, "text": "Street Fighter II Model - Beaten Ken!! (Seconds level) After training for a bit more than a day, I was finally able to beat Ken, and move on to the next level to Zangief! (The car is sort of an intermission level)"}, {"post_id": 47960, "ts": "2026-08-16T07:29:56Z", "hours": 9.7558, "text": "Street Fighter II Model - Finally beats Guile!! (The first level) After around 10 hours of overnight training (17M timesteps/frames), the agent can finally beat Guile and reach Ken, but it still falls a bit short beating Ken. Reward bug This was the major bug that was making the model not even damage Guile before. Health resets from 0->176 when the model loses on the first round. This makes the reward become: old frame health - new frame health = damage taken 0 ( dead ) - 176 ( max health ) = - 176 reward = damage_dealt - ( damage_taken ) reward = damage_dealt - ( - 176 ) = damage_dealt + 176 Dying seemed like a large reward to the model, so it learned that dying was good instead of damaging Guile. The Fix damage_dealt = max ( 0 , old_enemy_hp - new_enemy_hp ) damage_taken = max ( 0 , old_player_hp - new_player_hp ) reward = damage_dealt - damage_taken This made it so that if any one of the players died the frame where it recovers health, it would return 0. Since the max function would return the largest value from the parameters given. For example: print ( max ( 0 , - 176 )) This would print: 0"}, {"post_id": 47546, "ts": "2026-08-15T14:59:47Z", "hours": 1.9953, "text": "Coding Hours: 2h Huge reward function bug fix After training my model for 5 million timesteps (basically 5 million frames), I realised a huge flaw in my reward function logic. It would award the players a huge reward after dying once and their health bar replenishing, since I failed to catch the specific case. This was why the previous models weren’t performing well (see the video below) I’m going to train my new model with the reward function fixed overnight today and see how it goes!"}, {"post_id": 47466, "ts": "2026-08-15T12:08:13Z", "hours": 8.9789, "text": "Finished hyperparameter tuning After running the tuning program overnight, I’m going to use those parameters to actually train the model overnight to see how it performs"}, {"post_id": 46947, "ts": "2026-08-14T14:56:42Z", "hours": 3.3322, "text": "Coding Hours: 2h Optimised model even further Stripped down the game window to a way smaller 84x84 resolution and also grayscaled the game. Also set up 4 parallel environments for the model to be able to train even faster than before. Started hyperparameter tuning before training the actual model to ensure it is able to train at the most effective and efficient way. Below is what the AI uses to train (example not the actual windows, they would be scaled down and be grayscaled so it would be easier to process for the model):"}, {"post_id": 46680, "ts": "2026-08-14T03:44:07Z", "hours": 10.3528, "text": "After Training for another million steps overnight, my model has now finally learnt to crouch and block, while it still doesn’t deal any damage, it is still an improvement. This model right now is very unoptimised, I’m working on an improvement to optimise everything to make training a lot faster and way more efficient."}, {"post_id": 46378, "ts": "2026-08-13T15:36:21Z", "hours": 1.8169, "text": "Coding Hours: 1 Hour 50 Mins Started making a custom reward function and also optimised the learning environemnt so that the model can learn more efficiently"}, {"post_id": 46196, "ts": "2026-08-13T08:05:45Z", "hours": 12.9761, "text": "Trained model overnight again, but it still showed little improvement. I will try to create an environment and setup the reward system so it can train more efficiently and also host train it on some free cloud websites rather than my own laptop."}, {"post_id": 45503, "ts": "2026-08-12T01:27:01Z", "hours": 9.4858, "text": "Coding hours: 1.5h Finished training my Street Fighter model for the first time! The model now is only capable of doing very simple actions, it won’t even move and only usually spams one button, but this will improve over time as I spend more time to train the model and tune it. This is just the results so far of training it for around 8 hours overnight on my own laptop."}, {"post_id": 45137, "ts": "2026-08-11T13:09:42Z", "hours": 4.0894, "text": "Coding Hours: 3.5h I’m still learning RL, in the process, I made a simple model that learnt how to play breakout. This was trained for about 30 minutes, I’m sure it can do better if I were to dedicate more time to training it, but this is primarily so I can get myself more familiar with RL before training a more complicated model for Street Fighter."}]...
|
Title: Street Fighter Model by @elvincheung0321 | Title: Street Fighter Model by @elvincheung0321 | Stardance
Devlogs:
Coding Hours: 3.5h I’m still learning RL, in the process, I made a simple model that learnt how to play breakout. This was trained for about 30 minutes, I’m sure it can do better if I were to dedicate more time to training it, but this is primarily so I can get myself more familiar with RL before training a more complicated model for Street Fighter.
Coding hours: 1.5h Finished training my Street Fighter model for the first time! The model now is only capable of doing very simple actions, it won’t even move and only usually spams one button, but this will improve over time as I spend more time to train the model and tune it. This is just the results so far of training it for around 8 hours overnight on my own laptop.
Trained model overnight again, but it still showed little improvement. I will try to create an environment and setup the reward system so it can train more efficiently and also host train it on some free cloud websites rather than my own laptop.
Coding Hours: 1 Hour 50 Mins Started making a custom reward function and also optimised the learning environemnt so that the model can learn more efficiently
After Training for another million steps overnight, my model has now finally learnt to crouch and block, while it still doesn’t deal any damage, it is still an improvement. This model right now is very unoptimised, I’m working on an improvement to optimise everything to make training a lot faster and way more efficient.
Coding Hours: 2h Optimised model even further Stripped down the game window to a way smaller 84x84 resolution and also grayscaled the game. Also set up 4 parallel environments for the model to be able to train even faster than before. Started hyperparameter tuning before training the actual model to ensure it is able to train at the most effective and efficient way. Below is what the AI uses to train (example not the actual windows, they would be scaled down and be grayscaled so it would be easier to process for the model):
Finished hyperparameter tuning After running the tuning program overnight, I’m going to use those parameters to actually train the model overnight to see how it performs
Coding Hours: 2h Huge reward function bug fix After training my model for 5 million timesteps (basically 5 million frames), I realised a huge flaw in my reward function logic. It would award the players a huge reward after dying once and their health bar replenishing, since I failed to catch the specific case. This was why the previous models weren’t performing well (see the video below) I’m going to train my new model with the reward function fixed overnight today and see how it goes!
Street Fighter II Model - Finally beats Guile!! (The first level) After around 10 hours of overnight training (17M timesteps/frames), the agent can finally beat Guile and reach Ken, but it still falls a bit short beating Ken. Reward bug This was the major bug that was making the model not even damage Guile before. Health resets from 0->176 when the model loses on the first round. This makes the reward become: old frame health - new frame health = damage taken 0 ( dead ) - 176 ( max health ) = - 176 reward = damage_dealt - ( damage_taken ) reward = damage_dealt - ( - 176 ) = damage_dealt + 176 Dying seemed like a large reward to the model, so it learned that dying was good instead of damaging Guile. The Fix damage_dealt = max ( 0 , old_enemy_hp - new_enemy_hp ) damage_taken = max ( 0 , old_player_hp - new_player_hp ) reward = damage_dealt - damage_taken This made it so that if any one of the players died the frame where it recovers health, it would return 0. Since the max function would return the largest value from the parameters given. For example: print ( max ( 0 , - 176 )) This would print: 0
Street Fighter II Model - Beaten Ken!! (Seconds level) After training for a bit more than a day, I was finally able to beat Ken, and move on to the next level to Zangief! (The car is sort of an intermission level)
Street Fighter II Model - Model Regressing After training for another night, my model starting regressing again, now even losing to Guile Next steps The issue is once again my reward function, since its rewarding the model based on its damage, it would have a higher reward if it loses one round out of the three, since it would be able to deal more damage to bloat the rewards. My plan is to tweak the reward function again to incorporate rewarding it when it wins any rounds.
Added rewards for winning rounds
Trained for a day, bad results due to poorly optimized hyperparameters
Work on hyperparameter tuning...
|
1793872414.47967
|
1794736414.47967
|