This list contains changes made to Yuki since January 11, 2026.
YukiTheater
SGS Social
Yuki Base
Yuki Minigolf
SGS Base
Yuki Website
SGS Website
Happy Halloween! Love You All!
YukiTheater
- Extensions (Time): Increase Auto-Restart time from 18 to 24 hours (THE DOUBLE CURTIME IS REAL!!!)
- Slot Machine: Announce Jackpot wins to Discord Global Chat, same as Lottery wins
- Slot Machine: Require a valid player to win; the ANY_TWO_ONIGIRI wildcard rows could still match after a mid-spin disconnect, and the resulting NULL entity error left isSpinning stuck (machine unusable until restart)
- GUI (MOTDWeb): Slowly flash exit button so new players know what to do
- Slot Machine: Easter egg now works on Free Spin wins too
- Slot Machine: Play stop3.mp3 on every third reel stop (was losses only), play payout.mp3 when a win triggers Redscreen, and don't double up payout sounds when a Free Spin chain ends
- Slot Machine: Count Slots_NumJackpots/UpdateStatistics for Jackpots hit on a regular spin too, previously only Free Spin Jackpots were counted
- Slot Machine: Add Activity HUD Hint for Exiting Slots
- Easter Egg Hunt: Add inaccessible Arcade / Bowling Alley to the location blacklist (will be removed after Map v3 Beta8)
- Beachball: Set mass/buoyancy once at spawn instead of every physics tick (+use drop restores mass properly now; hopefully buoyancy too)
- GUI (HUD): Remove old Wake Up prompt when sleeping
- Chat (YukiBot): Merge "how customize" and "/skin" responses
- Chat (YukiBot): Add aliases for "change avatar/character/model" for "how customize"
- Chat (YukiBot): Add /revive alias for "how respawn"
- Global: Escape usernames for Discord Global Chat
- Contests: Validate all reward Item IDs up front before paying anything out
- Contests: Record the Statistics.Contests entry before paying, so a mid-payout error fails closed instead of double-paying on rerun
- GUI: Fix the MOTD popping back up on every Lua Refresh
- Global: surface.DrawPoly -> surface.DrawPolyWithReset
- Global: draw.DrawText -> draw.SimpleText (except stuff that uses newlines)
- Global: Old Text Shadow method -> draw.SimpleTextShadowed
- Global: string.StartWith -> string.StartsWith
- Slot Machine: Merge StartFreeSpin into StartSpin (passing a previousWinMultiplier means it's a Free Spin), resolving the old DRY TODO
- Slot Machine: Rename TriggerWinscreen's `time` local to soundDuration so it no longer shadows the time library
SGS Social
- Media: Add 13 New Services!
- Miruro: Replaces HiAnime (RIP), and picks Sub or Dub by your Preferred Audio Language
- Cinecat: Replaces P-Stream (RIP), and links from other movie-web sites work too
- AnimeAV1: Replaces AnimeFLV (RIP), with Sub (Spanish subtitles) or Dub (Latin American Spanish) picked by your Preferred Audio Language
- SoundCloud: Plays as real in-game audio, so visualizers and 3D speakers work with it
- Tubi: Free movies, shows and Live TV
- Pluto TV: Free Live TV channels, plus movies and shows on demand
- Niconico: Comments included!
- Bilibili: bilibili.com (comments included!), bilibili.tv and live rooms
- AniWorld: German anime, with German Dub, German Sub or English Sub picked by your language settings
- Voiranime: French anime (VF and VOSTFR are separate episode pages, so request the one you want)
- Animes Digital: Brazilian Portuguese anime (Dublado and Legendado are separate series, so request the one you want)
- MegaCartoons: Cartoons!
- NTV: Live TV channels
- Media: Add a shared client base for CEF services
- If a video can't play, you'll know within about 15 seconds, and the screen shows the error and what to try instead of a minute of nothing
- Sign In and CAPTCHA prompts pause the timeout, so you've got about 3 minutes to log in
- Your language, subtitle and Internal Video Resolution settings now work on a LOT more services, including sites that hand off to other video hosts
- Videos stay muted until your volume is applied, so nothing blasts at the site's own volume
- Media: Fix seeking outside an audio track locking up the game (!!!)
- Media (TikTok): Fix videos never loading
- Share links from the TikTok app (vm.tiktok.com and vt.tiktok.com) work too
- Media (Kick): Fix every video timing out
- Kick moved their video player on live, VOD and clip pages, so we had to go find it again
- Media (Twitch): Play channels and VODs in the official embed player
- Internal Video Resolution and captions finally work on Twitch (captions follow your Media Subtitle Mode)
- Media: Fullscreen now uses GMod's actual aspect ratio instead of forcing 16:9
- Media: Media Video Resolution -> Max Media Video Resolution (Use GMod's native resolution in Fullscreen up to a cap; world panels still render with the exact setting)
- Media: Retire P-Stream and HiAnime since they're dead
- Media: Retire AnimeFLV since it's dead
- Media (YouTube): Retry a video that freezes mid-play
- Media (YouTube): Use regular embed site instead of nocookie since YouTube keeps flagging players as bots
- Media (YouTube): Update the Referer hack again so at least some embeds work
- Media (YouTube): Fall back to full-site for ALL errors except HTML5 Unsupported Video (embeds on suicide watch)
- Media (Crunchyroll): Rewrite for their inline Bitmovin player
- Media (Kick): Fix VODs not playing
- Media (Paramount+): Fix long pre-roll ads timing out the media
- Media (Sub-Services): Fix OK.ru videos stopping after a few seconds
- Media Screen: Fix audio visualizer bars not drawing
- Achievements: Fix reconnect loop for partially initialized accounts
- Media: Fix paused media's audio jumping ahead when it finishes loading
- Media: Fix repeat ClientMediaInfo reports being thrown away
- Media: Don't start Live media over when the client reports its Duration
- Media: Show the chat's "Try this" steps on media screens too
- Taunts: Allow "walking out" of emotes that don't allow movement
- Media (Sub-Services): Add Internal Video Resolution support
- Media (Sub-Services): Switch quality and languages on hls.js hosts
- Media (Sub-Services): Fix JW Player language and quality switching
- Media (Sub-Services): Add language switching to Video.js hosts
- Media (Sub-Services): Add caption switching to Plyr hosts
- Media (Sub-Services): Mute Plyr hosts until our volume is set
- Media (Sub-Services): Fix the Dailymotion handler never running
- Media: Try the plain HTML5 handler on unknown sub-service hosts
- Media (AnimePahe): Update Reverse URL and valid domain list
- Media (AnimePahe): Try fallback embeds in Preferred Audio Language order
- Media (Kick): Fix Internal Video Resolution doing nothing
- Media (Kick): Fix copied clip links not matching
- Media (Paramount+): Ask to sign in on their new signed-out pages
- Media (Paramount+): Fail right away on the ad SDK's error panel
- Media (Amazon): Match storefront links with no trailing slash
- Media (YouTube): Fix Volume Normalization not updating on change (or maybe not even applying in some scenarios)
- Media (YouTube): Fix full-site in-page errors never being visible
- Media (YouTube): Fallback to filling the screen with the video player if we can't find the player container
- Media (Solstream): Target -12s from live edge, actually reference the wall clock when possible so everybody syncs to roughly the same position, and re-enable Max Sync Diff around it
- Media (Solstream): Fix Internal Video Resolution with two 1080p levels
- Media (Direct Audio): Only seek when out of sync
- Media (Internet Archive): Fix requeuing from request history
- Media (Internet Archive): Show an audio-only item's image while it plays
- Media (Internet Archive): Accept www.archive.org too
- Media (Internet Archive): Fail a missing item as "Item Not Found"
- Media: Increase max resolution default to 1440p and make it capped to the ScrH (so if it's below 1440p, it'll use that instead)
- Media: Give each Media Controller its own FFT tables
- Media: Fix visualizers placed mid-song not reacting to the audio
- Media: Fix any media change on the server closing your Sign In prompt
- Media: Close the Sign In / CAPTCHA prompt with the media that opened it
- Media: Only ask to sign in once per panel
- Media: Point Windows players at Linux when DRM video fails
- Media: Don't play media for people who aren't in the theater
- Media: Only show the video's own controls for debugging
- Media: Match URLs case-insensitively
- Media (Blacklist): Fix blacklisting missing playing and queued media
- Media: Fix a 57s video being taken for the 60s placeholder
- Media: Don't send Live media to the audio converter
- Media: Only warn about Internal Video Resolution if it isn't Auto
- Media Screen: Fix Karaoke small screen having weird font outline sizes
- Media Screen: Max font height is 255 in DrawPaused too
- Seats: Add Activity HUD Hint for Exiting Seats
- Taunts: Add "Stop Emote" HUD Hint
- Taunts: Fix "Stop Emote" showing up for everyone when one player starts emoting
- Taunts: Fix sequence command check for "walk out" exit
- Media: Fix ClientMediaInfo Titles skipping the hostname rules
- Global: Escape usernames for Discord Global Chat
- Media (TikTok): Mostly fix TikTok service
- Media: Move YouTube and Kick onto the shared client base
- Media: Move Netflix, Hulu, Amazon and Paramount+ onto the client base
- Media (AnimePahe): Move onto the shared client base
- Media (TikTok): Move onto the shared client base
- Media (Solstream): Move onto the shared client base
- Media (Internet Archive): Move onto the shared client base
- Media (Direct Video): Move onto the shared client base
- Media (Toonami Aftermath): Move onto the shared client base
- Media (Solstream): Increase live edge from 6 to 10 seconds
- Media (Solstream): Enforce max latency of 30 seconds
- Media (Solstream): Increase nudging limit from 3 to 30
- Media (Solstream): Pin hls.js to 1.7.0
- Media (Sub-Services): Match hosts case-insensitively
- Media: Match service hosts by exact domain or a real subdomain
- Media: Only offer custom-scheme URLs to their own service
- Media: Only announce "Client Media Info loaded." once
- Media Screen / Thumb: Fix using the old Media Controller after a reload
- Media (YouTube): Fix curMedia typo
- Inventory (Alcohol): Remove the mp_decals clamp (Facepunch blocked it)
- Light Item: Don't force set r_maxdlights anymore (removed from the engine and never worked anyway - garrysmod-issues#5738)
- Media: Put all services in the media module (slight performance bump)
- Media: Read client ConVars through module fields
- Media: Only set the Video Panel size once
- Media: Make sv_ files optional
- Media: MatchHost takes a list of domains now
- Media: Split sub-service code from cl_panel.lua to cl_subservices.lua
- Extensions (HTTP): Add http.ParseContentDisposition
- Global: surface.DrawPoly -> surface.DrawPolyWithReset
- Global: draw.DrawText -> draw.SimpleText (except stuff that uses newlines)
Yuki Base
- Inventory: Don't regen spawnicons again if they already have this session (Lua refresh fix on dev)
Yuki Minigolf
- WIP migration from GMCL to Yuki
SGS Base
- Extensions (Render): Semi-blind fix for _rt_ResolvedFullFrameDepth crash
- DHTML: Fix pages hanging on load when they console.log a cyclic object
- Discord (Global Chat): Send a message when the server starts up and when the server shuts down
- MySQL: Work around crashing issue with failed DB connections in MySQLOO v9.8.0-Beta3 (https://github.com/FredyH/MySQLOO/issues/148)
- DHTML: Fix pages breaking when they console.log deeply nested objects
- Tell players that can't join on New Year's Eve that the Event runs for every US Time Zone
- GUI: Add "Current Activity" HUD Hint support
- Scoreboard (Settings): sgs_media_resolution -> sgs_media_resolution_max
- Extensions (Multicore): Remove mat_forcemanagedtextureintohardware
- Extensions (surface): Add surface.DrawPoly multicore glitch fix from TTT2
- Inventory: Actually enforce rank requirement for item settings serverside
- Admin (Poll): Fix voting on a non-running poll creating an error instead of letting the player know
- Extensions (DownloadedTex): Fix not escaping quotes in the image URL
- Global: Escape usernames for Discord Global Chat
- Extensions (string): Better markdown escaping for headings/bullets/quotes
- SolAntiCheat: Fix certain rules
- Inventory: Fix <= 0 AddInventory item count throwing an error instead of reporting an error to the player/admins
- Locations: Fix same-tick ownership change warning
- Discord (Gateway): Fix "Unable to find matching SSL root certificate locally" error on Arch Linux (btw)
- Locations: Fix overlapping reload TRUNCATE callback re-filling the DB table with a stale or empty location set
- Locations: Fix trying to run OnReloaded on Apartments when APARTMENT.OnReloaded doesn't exist
- DHTML: Only start checkURLChanged once per document
- Extensions (ErrorLog): Remove ErrorNoHalt/Error overrides now that OnLuaError catches ErrorNoHalt too (was double-logging every ErrorNoHalt)
- MySQL: Use unix socket and require SSL
- Admin: Add Dev Bots for multiplayer-flow testing
- Achievements / Admin: Retire Olympus migration stuff
- Discord (Gateway): Add InitialConnect and ShutDown hooks
- Extensions (Time): Add time.IsNewYear
- Extensions (string): Add string.EscapeMarkdown
- Extensions: Add string.HTMLDecode
- Extensions: Add string.HTMLAttributeSafe
- Extensions: Add string.URLEncodePath
- Extensions (draw): Add draw.SimpleTextShadowed
- Extensions (surface): Add surface.DrawCachedTexture (combination of DrawTo and DrawFrom)
- Extensions (surface): Deprecate DrawTo/DrawFromCachedTexture
- Global: surface.DrawPoly -> surface.DrawPolyWithReset
- Global: draw.DrawText -> draw.SimpleText
- Extensions (Player): PlayerHullUpdate -> PlayerHullUpdate.Full / PlayerHullUpdate.Delta
- Locations: locations.Network -> locations.Network.Init / locations.Network.Update
- EntityNW / Admin: Be more explicit about not using ReadData/WriteUInt for len with ChunkedData
- EntityNW / Admin: Properly mark len as unused by ChunkedData
- Global: string.StartWith -> string.StartsWith
- Global: string.Implode -> table.concat
- Global: PANEL.SetDisabled -> PANEL.SetEnabled (not completely done)
- Global: Add a bunch of ---@diagnostic comments and tweak a bunch of code to make gmod-glua-ls happy
Yuki Website
- Profile: Show "Banned" instead of real rank if the player has an active ban
- Profile: Link to the Ban Log ID if the player is Banned
- Profile: Black background for avatars of Banned players
- Global: Add faux-rank for Banned players
- Loading / MOTD: Update announcement text
- Media JS / Media Logs: Update AnimePahe reverse URL
- Profile: Tweak ban link format
- Early Hints: Fix error log spam
- Global: Move all player rank colors to global CSS
- Update copyright year
SGS Website
- Fix Media (FAQ): Improve Linux "no main menu" guidance layout and Add Fedora-based distro note
- Fix Media (FAQ): More clearly separate the 3 primary identified reasons for CEF initialization failure on Linux
- Fix Media (FAQ): Properly bold sub-sections for Linux no-main-menu and Link to the issue comment with the fix for Fedora
- Fix Media (FAQ): Replace "ConnectError" with "error sending request"
- Fix Media (FAQ): Tweak Linux CEF initialize failure section
- Fix Media (FAQ): Yet more tweaks
- Donate (Stripe Checkout): Only warn the user when there's no subscription changes to apply rather than emailing us
- Home / Projects: Update Yuki backgrounds
- Workers (Webhooks): Fix GitHub commits showing whoever pushed instead of the Author, and Show the Committer too when they're different
- Workers (Webhooks): Send pushes in batches of 10 commits per message; Discord rejects the whole thing past 10 embeds
- Workers (Webhooks): Don't re-announce GitHub commits that were already pushed before (non-distinct, ex. merges)
- Workers (Webhooks): Fix slashed GitHub branch names only showing their last segment (ex. fix/foo showed as foo)
- Workers (Facepunch): Fix commit checks only comparing against the first repo's newest date (the other two got re-announced)
- Workers (Facepunch): Announce commits oldest first, and DRY the per-repo check blocks into a loop
- Home: Adjust small announcement image offsets
- Donate (Stripe Checkout/Webhook): Clarify which part of the Stripe payment cycle the error email is coming from
- Workers (Webhooks): Fix Bitbucket's "deleted branch" fallback (new comes as null, not missing), and Reject non-push events
- Workers (Webhooks): Delivery and error response cleanup
- Update copyright year
Happy Halloween! Love You All!