{"id":51503554,"url":"https://github.com/cameroncodesstuff/wobblywindows","last_synced_at":"2026-07-07T22:01:11.649Z","repository":{"id":368941332,"uuid":"1287620258","full_name":"CameronCodesStuff/WobblyWindows","owner":"CameronCodesStuff","description":"Wobbly Windows for Windows ","archived":false,"fork":false,"pushed_at":"2026-07-02T21:45:41.000Z","size":108,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-02T23:24:14.951Z","etag":null,"topics":["windows","wobbly","wobblywindows"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CameronCodesStuff.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-07-02T21:26:53.000Z","updated_at":"2026-07-02T21:48:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/CameronCodesStuff/WobblyWindows","commit_stats":null,"previous_names":["cameroncodesstuff/wobblywindows"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/CameronCodesStuff/WobblyWindows","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CameronCodesStuff%2FWobblyWindows","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CameronCodesStuff%2FWobblyWindows/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CameronCodesStuff%2FWobblyWindows/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CameronCodesStuff%2FWobblyWindows/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CameronCodesStuff","download_url":"https://codeload.github.com/CameronCodesStuff/WobblyWindows/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CameronCodesStuff%2FWobblyWindows/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35243953,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-07T02:00:07.222Z","response_time":90,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["windows","wobbly","wobblywindows"],"created_at":"2026-07-07T22:01:10.932Z","updated_at":"2026-07-07T22:01:11.623Z","avatar_url":"https://github.com/CameronCodesStuff.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WobblyWindows\n\nCompiz-style **wobbly windows** for Windows 11 — with real jelly deformation and a 3D tilt. Drag any app window (Chrome, Discord, Explorer, VS Code…) and its surface bends, stretches, ripples, leans into the motion, then rebounds and settles like soft rubber.\n\nNo frameworks, no dependencies, one C# source file + Win32.\n\n---\n\n## Where does it appear?\n\nWhen you launch it, a **popup confirms it was installed and is running successfully** and explains everything below. There is no main window — WobblyWindows lives in the **system tray**, the icon area in the **bottom-right of the taskbar next to the clock**. Windows 11 hides new tray icons, so click the **`^` (Show hidden icons)** arrow to find it. Right-click the icon for the menu (Enabled, Jelly deformation, 3D tilt, Edge snap, Open log file, Exit).\n\n## Running it\n\nRequires the [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0).\n\n```\ndotnet run -c Release\n```\n\nor build a portable single exe:\n\n```\nbuild.bat        →  dist\\WobblyWindows.exe   (double-click that)\n```\n\n## Everything is wobbleable\n\n- **Title bars \u0026 drag regions** — plain drag. Works on native title bars and custom ones (Chrome's tab strip, Discord's top bar).\n- **Any window, from any point** — hold **Ctrl+Alt** and drag anywhere on it. No title bar needed.\n- **Maximized windows** — grab the title bar and pull: the window restores under your cursor (native behavior) and wobbles from there.\n\nQuick test: open Notepad, grab the title bar, fling it in a circle, let go.\n\n## How it works (v3 architecture)\n\nWindows can't bend another app's live window, and rapidly resizing a real window just looks like glitchy resizing. So WobblyWindows does what Compiz does:\n\n1. **On grab**, a snapshot of the window is captured (`PrintWindow` with `PW_RENDERFULLCONTENT`) and the real window is made invisible **in place** (`WS_EX_LAYERED` alpha 0). It never moves during the drag.\n2. The snapshot is drawn onto a deforming **6×6 soft-body mesh** (drawn as clipped triangle pairs per cell — exact affine maps, so no seams even under the 3D perspective) inside a click-through, per-pixel-alpha overlay (`UpdateLayeredWindow`). The grab point is **hard-pinned to the cursor** — zero lag at your hand — while every other mesh point trails on springs (stiff near the grab, loose far away), with structural springs (neighbors + cell diagonals) carrying ripples across the surface.\n3. A **pseudo-3D tilt** is layered on top: the whole sheet rotates toward the motion via a perspective projection, and on release the tilt spring oscillates back — the window visibly wobbles in 3D.\n4. When every mesh point has settled and the tilt has died out, the **real window is moved exactly once** to the final position, its alpha restored, and the overlay hidden. No resize thrash, no fighting the app.\n\nIf capture or transparency isn't possible on a particular window (already-layered apps, elevated apps without admin), it automatically falls back to a rigid spring-follow drag, so dragging always works.\n\n## Settings\n\nRight-click the tray icon → **Settings…** for a live control panel (saved to `%LOCALAPPDATA%\\WobblyWindows\\settings.json`):\n\n- **Speed** — how fast the jelly reacts and settles\n- **Wobble amount** — how many rebounds after release (0 = none)\n- **Softness** — how rubbery the trailing stretch is\n- **Max stretch** — cap on how far the surface can smear\n- **Tilt angle** + 3D tilt on/off\n- Toggles for jelly deformation, edge snap, and the startup welcome popup\n\nChanges save automatically and apply to the next drag.\n\n## Deep tuning\n\nInternals not in the UI live in `Config` at the top of `src/Program.cs`:\n\n| Constant | Effect |\n|---|---|\n| `FocalLength` | Smaller = more dramatic 3D perspective |\n| `TiltPerVelocity`, `TiltDampingRatio` | Tilt responsiveness / post-release 3D wobble |\n| `GridCells` | Mesh resolution (5 → 6×6 points) |\n| `GlobalDamping`, `MaxSubstep`, `TickMs` | Simulation internals |\n\n## Troubleshooting — \"it's running but nothing wobbles\"\n\nEvery decision is logged to `%LOCALAPPDATA%\\WobblyWindows\\wobbly.log` (tray → **Open log file**). Click a title bar once, check the last lines:\n\n| Log says | Meaning | Fix |\n|---|---|---|\n| `HOOK INSTALL FAILED` | Antivirus / anti-cheat blocked the mouse hook | Whitelist the exe |\n| *nothing at all when you click* | Hook silently dropped by Windows | Tray → untick \u0026 re-tick **Enabled** (reinstalls hook) |\n| `hit=1 (not caption)` | That spot isn't a drag region | Grab the title bar, or **Ctrl+Alt+drag** |\n| `hit-test FAILED (timeout/UIPI)` | Target app runs as admin | Run WobblyWindows as administrator |\n| `rigid fallback drag …` | Capture/transparency unavailable for that window | Normal — that window still drags with spring physics, just no deformation |\n| `PrintWindow returned false` | App refuses snapshot capture (DRM/protected) | Falls back to rigid automatically |\n| `skipped (maximized/minimized)` shouldn't appear in v3 | — | Maximized windows now restore-and-wobble |\n\nIf the exe was downloaded/copied: right-click → Properties → **Unblock** if the checkbox is there.\n\n## Known limitations\n\n- **Elevated apps** (Task Manager, admin terminals) need WobblyWindows run as admin.\n- During a drag the jelly shows a **snapshot** — a playing video inside the window freezes for the duration of the drag (Compiz shows live content; Win32 doesn't offer a warpable live surface).\n- **Esc-to-cancel** mid-drag isn't supported.\n- Windows' snap layouts don't trigger during a wobbly drag; the built-in edge snap (top = maximize, sides = half snap) covers the common cases.\n- Very large windows are auto-downscaled for the snapshot to keep rendering fast.\n\n## Uninstall\n\nPortable exe. Exit from the tray, delete the folder, optionally delete `%LOCALAPPDATA%\\WobblyWindows`. Nothing touches the registry.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcameroncodesstuff%2Fwobblywindows","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcameroncodesstuff%2Fwobblywindows","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcameroncodesstuff%2Fwobblywindows/lists"}