Unreal Bridge
TornLux/UnrealBridge
Execute Python scripts inside a running Unreal Engine 5.3+ editor via TCP bridge.
Finds and clears the five independent settings that cap the Unreal editor or game frame rate, so it runs uncapped or at a chosen target FPS.
$ npx skills add kevinpbuckley/VibeUE --skill frame-rate -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install kevinpbuckley/VibeUE frame-rate --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/kevinpbuckley/VibeUE.git skills-src && mkdir -p .claude/skills && cp -r skills-src/Content/Skills/frame-rate .claude/skills/frame-rate && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "frame-rate" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/frame-rate into .claude/skills/frame-rate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frame-rate", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/frame-rateType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add kevinpbuckley/VibeUE --skill frame-rate -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install kevinpbuckley/VibeUE frame-rate --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kevinpbuckley/VibeUE.git skills-src && mkdir -p .agents/skills && cp -r skills-src/Content/Skills/frame-rate .agents/skills/frame-rate && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "frame-rate" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/frame-rate into .agents/skills/frame-rate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frame-rate", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add kevinpbuckley/VibeUE --skill frame-rate -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install kevinpbuckley/VibeUE frame-rate --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kevinpbuckley/VibeUE.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/Content/Skills/frame-rate .cursor/skills/frame-rate && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "frame-rate" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/frame-rate into .cursor/skills/frame-rate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frame-rate", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/kevinpbuckley/VibeUE.git --path Content/Skills/frame-rate--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add kevinpbuckley/VibeUE --skill frame-rate -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install kevinpbuckley/VibeUE frame-rate --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kevinpbuckley/VibeUE.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/Content/Skills/frame-rate .gemini/skills/frame-rate && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "frame-rate" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/frame-rate into .gemini/skills/frame-rate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frame-rate", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install kevinpbuckley/VibeUE frame-rateInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add kevinpbuckley/VibeUE --skill frame-rate -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/kevinpbuckley/VibeUE.git skills-src && mkdir -p .github/skills && cp -r skills-src/Content/Skills/frame-rate .github/skills/frame-rate && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "frame-rate" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/frame-rate into .github/skills/frame-rate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frame-rate", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add kevinpbuckley/VibeUE --skill frame-rate -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install kevinpbuckley/VibeUE frame-rate --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kevinpbuckley/VibeUE.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/Content/Skills/frame-rate .opencode/skills/frame-rate && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "frame-rate" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/frame-rate into .opencode/skills/frame-rate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frame-rate", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
frame-rateFinds and clears the five independent settings that cap the Unreal editor or game frame rate, so it runs uncapped or at a chosen target FPS.
A frame rate stuck at 60 is almost never one setting, so the skill diagnoses first and reads all five caps before changing anything. They are the `t.MaxFPS` cvar (0 means uncapped), `r.VSync` and `r.VSyncEditor`, fixed frame rate in DefaultEngine.ini, smoothed frame rate and its range, which is the usual editor cap near 60, and CPU throttling when the editor is not in the foreground. A low frame rate that is not pinned at a round number is treated as a workload problem, and a frame timing check for a CPU versus GPU verdict comes first.
Reads and writes go through the EngineSettingsService in Python. To uncap, the agent sets `t.MaxFPS` to 0 or a high target such as 240 and clears the other four caps. Cvars apply immediately, while INI changes need a save and may need an editor restart. It then verifies that `t.MaxFPS` reads the target and checks the FPS overlay. A note says `r.FrameRateLimit` is not a console variable in UE 5.7. The folder has an uncap_fps script, and the excerpt is cut off in the verify step.
Read from SKILL.md and the folder at commit dc051be. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/, which the agent can run.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Unreal Engine FPS Cap Remover loads about 1.2k tokens when it runs. Until then it costs about 94 tokens; SKILL.md has 362 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from kevinpbuckley/VibeUE at commit dc051be, republished under its MIT licence (© kevinpbuckley). 362 words, ~1,211 tokens.
.claude/skills/frame-rate/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.A "locked at 60 FPS" editor or game is almost never caused by a single setting — there are five independent caps and any one of them holds the frame rate down. Check and clear them all, in this order, before declaring it fixed.
t.MaxFPS = 0 already means uncapped, so if the editor is still stuck at 60 the cap is
coming from somewhere else (usually VSync to a 60 Hz monitor, or the smoothed frame-rate
range). Read every source below before changing anything.
🩺 "Capped" vs "slow" are different problems. If the frame rate is low rather than pinned at a round number, it's not a cap — it's a workload. Run
unreal.PerformanceService.frame_timing()first (NEW service that replaced the removededitor_controltool) for a CPU-vs-GPU-bound verdict before touching any cap below. The caps here only matter when something is artificially holding FPS down. (Cvar/INI reads/writes in this skill stay onEngineSettingsService.)
| # | Setting | Where | "Uncapped" value |
|---|---|---|---|
| 1 | t.MaxFPS | cvar | 0 (or a high target like 240) |
| 2 | r.VSync / r.VSyncEditor | cvar | 0 — locks to monitor refresh (60 Hz) when 1 |
| 3 | bUseFixedFrameRate / FixedFrameRate | [/Script/Engine.Engine] DefaultEngine.ini | False |
| 4 | bSmoothFrameRate / SmoothedFrameRateRange | [/Script/Engine.Engine] DefaultEngine.ini | False — the usual ~60 editor cap |
| 5 | bThrottleCPUWhenNotForeground | [/Script/UnrealEd.EditorPerformanceSettings] EditorPerProjectUserSettings.ini | False — caps FPS when the editor isn't focused |
Note:
r.FrameRateLimitis not a console variable in UE 5.7 —set_console_variablewill report "Console variable not found". The INI key isFrameRateLimitunder[/Script/Engine.Engine], butt.MaxFPSis the reliable runtime cap.
import unreal
es = unreal.EngineSettingsService
for cvar in ["t.MaxFPS", "r.VSync", "r.VSyncEditor"]:
print(f"{cvar} = {es.get_console_variable(cvar)}")
eng = "/Script/Engine.Engine"
for key in ["bUseFixedFrameRate", "FixedFrameRate", "bSmoothFrameRate", "SmoothedFrameRateRange"]:
print(f"{key} = {es.get_engine_ini_value(eng, key, 'DefaultEngine.ini')!r}")
print("bThrottleCPUWhenNotForeground =",
es.get_engine_ini_value("/Script/UnrealEd.EditorPerformanceSettings",
"bThrottleCPUWhenNotForeground", "EditorPerProjectUserSettings.ini"))Set a target with t.MaxFPS (use 0 for fully uncapped, or e.g. 240 to cap high), then
clear the other four caps. cvars take effect immediately; INI changes need a save and may
require an editor restart.
import unreal, json
es = unreal.EngineSettingsService
TARGET_MAX_FPS = "240" # "0" = fully uncapped
# 1 + 2: runtime cvars (immediate)
es.set_console_variables_from_json(json.dumps({
"t.MaxFPS": TARGET_MAX_FPS,
"r.VSync": "0",
"r.VSyncEditor":"0",
}))
# 3 + 4: disable fixed and smoothed frame-rate caps (persisted to ini)
eng = "/Script/Engine.Engine"
es.set_engine_ini_value(eng, "bUseFixedFrameRate", "False", "DefaultEngine.ini")
es.set_engine_ini_value(eng, "bSmoothFrameRate", "False", "DefaultEngine.ini")
# 5: don't throttle FPS when the editor loses focus
es.set_engine_ini_value("/Script/UnrealEd.EditorPerformanceSettings",
"bThrottleCPUWhenNotForeground", "False",
"EditorPerProjectUserSettings.ini")
es.save_all_engine_config()
print("FPS caps cleared. t.MaxFPS now:", es.get_console_variable("t.MaxFPS"))After applying, confirm t.MaxFPS reads your target and the editor's FPS overlay (Show FPS,
or stat fps in PIE) climbs past 60. If it's still pinned at 60, the most likely remaining
cause is r.VSync/r.VSyncEditor re-enabled by a quality preset, or the monitor itself —
VSync can only go as high as the display refresh rate.
execute_python_code)scripts/uncap_fps.txt — read all five caps, then uncap to a target FPS.© kevinpbuckley, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (scripts) in Content/Skills/frame-rate of kevinpbuckley/VibeUE.
Open the folder on GitHubat commit dc051be
Unreal Engine FPS Cap Remover next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Unreal Engine FPS Cap Remover this skillkevinpbuckley/VibeUE | 730 | — | ~1.2k | Automated safety check: Pass | MIT | |
| Unreal BridgeTornLux/UnrealBridge | 306 | — | ~8.4k | Automated safety check: Notes | MIT | |
| Game DeveloperJeffallan/claude-skills | 12k | — | ~1.5k | Automated safety check: Pass | MIT | |
| Scenario Unreal Cinematicsscenario-labs/skills | 946 | — | ~5.1k | Automated safety check: Pass | MIT | |
| Scenario Unreal Pipeline Automationscenario-labs/skills | 946 | — | ~5k | Automated safety check: Pass | MIT | |
| Scenario Unreal Expertscenario-labs/skills | 946 | — | ~6.4k | Automated safety check: Pass | MIT |
TornLux/UnrealBridge
Execute Python scripts inside a running Unreal Engine 5.3+ editor via TCP bridge.
Jeffallan/claude-skills
Covers game programming in Unity and Unreal Engine: ECS design, physics, multiplayer networking, shaders and profiling toward a 60 FPS target.
scenario-labs/skills
A skill your agent uses when making a trailer, cutscene, cinematic or short film in Unreal Engine 5.8 with Sequencer: shot lists, master and shot sequences, cameras, lenses, depth of field, camera…
scenario-labs/skills
A skill your agent uses when importing FBX, USD, OBJ or glTF from Maya, ZBrush or Blender into Unreal Engine 5.8 in bulk or reimporting changed files, writing Editor Python tools, Interchange…
scenario-labs/skills
A skill your agent uses when an agent drives Unreal Engine 5.8 on a Mac for any task: Editor Python (the unreal module), headless UnrealEditor-Cmd -run=pythonscript jobs, Epic's Unreal MCP server…
scenario-labs/skills
A skill your agent uses when building or debugging UE5 gameplay: a character with double jump or dash, abilities with cooldowns, enemy AI that patrols, chases and attacks, a health bar or HUD…
kevinpbuckley/VibeUE
Previews, validates and bakes bone-rotation edits on Unreal Engine AnimSequences, enforcing a coordinate space and a constraint-checked preview-validate-bake loop.
kevinpbuckley/VibeUE
Creates and edits Unreal Engine Animation Montages through AnimMontageService: sections, slots, segments, branching points, notifies and blend settings.
kevinpbuckley/VibeUE
Creates and edits AnimSequence keyframes and bone tracks in Unreal Engine through AnimSequenceService, following an inspect, preview, validate and bake workflow with correct bone-space handling.
kevinpbuckley/VibeUE
Imports files into Unreal Engine, exports textures, reads the Content Browser selection and checks open assets via VibeUE, plus mesh reimport material fixes.
kevinpbuckley/VibeUE
Changes Unreal Engine console variables, scalability levels and raw INI values through VibeUE's Python API, now that registered settings moved to the engine's own toolset.
kevinpbuckley/VibeUE
Creates and wires Unreal Engine Enhanced Input assets through VibeUE's InputService: Input Actions, Mapping Contexts, key bindings, triggers and modifiers.
Works with
Categories
Finds and clears the five independent settings that cap the Unreal editor or game frame rate, so it runs uncapped or at a chosen target FPS. A frame rate stuck at 60 is almost never one setting, so the skill diagnoses first and reads all five caps before changing anything.ini, smoothed frame rate and its range, which is the usual editor cap near 60, and CPU throttling when the editor is not in the foreground.
Unreal Engine FPS Cap Remover fits situations like: the Unreal editor or game is stuck at 60 FPS; uncapping the frame rate or setting a max FPS target; telling a frame rate cap apart from a heavy workload; fixing low FPS when the editor window is in the background.
Run `npx skills add kevinpbuckley/VibeUE --skill frame-rate -a claude-code`. Or copy the skill folder (Content/Skills/frame-rate in kevinpbuckley/VibeUE) into .claude/skills/frame-rate in your project. Claude Code loads it when a task matches its description.
Run `npx skills add kevinpbuckley/VibeUE --skill frame-rate -a codex`. Or copy the skill folder (Content/Skills/frame-rate in kevinpbuckley/VibeUE) into .agents/skills/frame-rate in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add kevinpbuckley/VibeUE --skill frame-rate -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/frame-rate, .gemini/skills/frame-rate, .github/skills/frame-rate and .opencode/skills/frame-rate in your project.
SKILL.md names no scripts, command-line tools or credentials: Unreal Engine FPS Cap Remover is instructions for the agent only. Our summary lists: The Unreal Editor with the VibeUE tools and EngineSettingsService.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Unreal Engine FPS Cap Remover is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.2k tokens (SKILL.md is roughly 4.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Unreal Engine FPS Cap Remover: Unreal Bridge (TornLux/UnrealBridge, 306 stars), Game Developer (Jeffallan/claude-skills, 12k stars), Scenario Unreal Cinematics (scenario-labs/skills, 946 stars) and Scenario Unreal Pipeline Automation (scenario-labs/skills, 946 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
kevinpbuckley (a GitHub user) maintains it in kevinpbuckley/VibeUE, which has 730 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on October 7, 2026.
Source: kevinpbuckley/VibeUE on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.