---
title: "Workmelt"
url: "https://aigamehub.app/en/games/workmelt-b5072e"
source: "https://github.com/eriknomitch/workmelt"
source_type: "github"
play_url: "https://workmelt.com"
platform: "desktop"
login_required: false
pricing: "free"
origin: "original"
ai_tools: []
game_languages: ["en"]
author: "eriknomitch"
author_handle: "eriknomitch"
category: "Action"
categories: ["action"]
tags: ["browser", "fps", "multiplayer", "threejs", "webgl"]
added: "2026-10-24T02:45:29.827Z"
updated: "2026-10-24T02:46:04.206Z"
locale: "en"
content_locale: "en"
---

# Workmelt

A browser-based multiplayer first-person shooter built with Three.js and WebGL2, with procedurally generated assets and bot matches; npm run dev serves it locally and it is playable at workmelt.com.

## Description

Workmelt is a first-person shooter that runs in the browser, built with Three.js r180 and WebGL2. All textures, meshes and animations are generated procedurally at load time from code, with audio mixing procedural synthesis and sampled effects; the only runtime dependency is three. Players start on a Match Start screen, choose a map and bot garrison, or wait for a friend to join the room and ready up together. Controls use WASD to move, mouse to aim, LMB to fire, RMB or X for ADS, R to reload, Shift to sprint, Ctrl to crouch, Space to jump and Q/E to lean; there are dedicated trackpad and ADS toggle options. Graphics default to an Auto preset calibrated on first launch, with advanced tabs for display, textures, shading, post-processing and visibility settings. Source is forked from mshumer/Claude-of-Duty under the MIT license.

## Original post

A multiplayer FPS shooter break with your co-workers in the browser

Topics: claude, claude-code, game, game-dev, html, html5-game, shooter, three, threejs

# Workmelt Forked from [mshumer/Claude-of-Duty]([url](https://github.com/mshumer/Claude-of-Duty)) A first-person shooter built in the browser with Three.js r180 and WebGL2. Roughly 55k lines across 13 subsystems, written by a fleet of AI agents under orchestration. Every texture, mesh and animation is generated procedurally at load time from code — no models, no HDRIs, no image files. Audio combines a procedural synthesis layer with sampled sound effects. The only runtime dependency is `three`. ```bash npm install npm run dev # http://127.0.0.1:5273 (override with OW_PORT) ``` The game opens on a **Match Start** screen rather than dropping you mid-firefight: pick a **map**, pick a bot garrison and start on your own, or wait for a friend to join your room and ready up together. Once the match is live, click the canvas to lock the cursor. WASD move, mouse aim, LMB fire, RMB hold to ADS, X to toggle ADS, R reload, Shift sprint, Ctrl crouch, Space jump, Q/E lean, Esc release. **On a trackpad**, aiming down sights has its own settings, because a two-finger click cannot be held while a one-finger click fires. The keyboard bind is the default fix: **X** raises the optic and a second tap lowers it, so aiming needs neither the pointer nor a hold out of the box (**ADS Key** rebinds it). For the mouse itself, **Aim (Mouse)** switches the right button between `hold` — the classic default — and `toggle`. Both are stored per browser. Graphics default to **Auto** per browser profile. On first launch the game estimates the active display cadence, calibrates a Performance/Low/Medium/High/Ultra pipeline, then adjusts internal resolution within that tier to pursue stable p95 frame pacing. Open the pause menu to choose a fixed preset or a target from 30–240 FPS; settings are stored locally and never synchronized in multiplayer. ### Advanced graphics Auto is a starting point, not a ceiling. The pause menu's graphics tabs expose every knob the renderer has, each of which follows the preset until you touch it: **Display** (internal resolution scale up to 200% supersampling, the device-pixel-ratio cap, anti-aliasing, weapon MSAA), **Textures & Detail** (world bake resolution, character bake resolution, anisotropic filtering, parallax occlusion, micro detail, particle and decal budgets), **Shading & Lighting** (cascade count and resolution, shadow distance and density, ambient occlusion, contact shadows, screen-space reflections, volumetrics), **Post-Processing** (bloom, motion blur, ADS depth of field, sharpening, grain, chromatic aberration, vignette, grade strength) and **Visibility** (brightness, auto-exposure lock, exposure key, shadow lift, lamp brightness, FOV). Anything the renderer can take mid-frame is applied as you move it. Anything that is built once at boot — a post pass, a render target, a texture bake — is marked `RESTART`, saved immediately, and applied when you press **Apply & Restart**. The Auto Status row reports the resolution you are actually render
