Agent skill

Profiling

by kevinpbuckley in kevinpbuckley/VibeUE

Diagnose frame-rate bottlenecks (CPU vs GPU bound FIRST), control Unreal Insights traces, sample live frame times, and annotate performance captures.

MITAuto-check passedGame Development

Install Profiling

skills CLI
$ npx skills add kevinpbuckley/VibeUE --skill profiling -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install kevinpbuckley/VibeUE profiling --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/kevinpbuckley/VibeUE.git skills-src && mkdir -p .claude/skills && cp -r skills-src/Content/Skills/profiling .claude/skills/profiling && rm -rf skills-src

Use ~/.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/

Facts

Skill name
profiling
GitHub stars
717
Token cost
~4.5k tokens
SKILL.md length
1,808 words
Files
1
Skills in repo
39
Repo updated
First seen
Licence
MIT

At a glance

Diagnose frame-rate bottlenecks (CPU vs GPU bound FIRST), control Unreal Insights traces, sample live frame times, and annotate performance captures.

  • Works in 3 steps: Numeric thread split via log — reliable,… → Resolution-scaling test (decisive… → stat unit is the canonical overlay, but…
  • The game is slow
  • SKILL.md covers 🚦 STEP 0 — Is it CPU-bound or…, ⏱️ Frame-time budgets — what a…, 🛠️ CVars tune the renderer —… and ⚠️ Gotchas — read before…, plus 7 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Profiling is an agent skill from kevinpbuckley/VibeUE. Diagnose frame-rate bottlenecks (CPU vs GPU bound FIRST), control Unreal Insights traces, sample live frame times, and annotate performance captures. Use when FPS is low/bad, the game is slow, or you need to find what is limiting the frame rate.

Its SKILL.md is about 4.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Game Development, covering Game development. It works with Python. The repository describes itself as: Unreal Engine Vibe Coding tool. The licence is MIT.

When your agent uses it

  • The game is slow
  • You need to find what is limiting the frame rate

Example prompts

  • “/profiling”

Requirements

  • Python 3

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. Numeric thread split via log — reliable, works headless
  2. Resolution-scaling test (decisive GPU-bound proof) — sample frame time at full res via
  3. stat unit is the canonical overlay, but its numbers do not go to the log, and

What it can do on your machine

Read from SKILL.md and the folder at commit dc051be. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are python).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Profiling loads about 4.5k tokens when it runs. Until then it costs about 64 tokens; SKILL.md has 1,808 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~64
When it runs · the whole SKILL.md, loaded when a task matches
~4.5k

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.

Safety

Auto-check passed

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); files beside SKILL.md are not scanned.

SKILL.md

The full file from kevinpbuckley/VibeUE at commit dc051be, republished under its MIT licence (© kevinpbuckley). 1,808 words, ~4,496 tokens.

Download SKILL.mdSave it as .claude/skills/profiling/SKILL.md (or your agent's skills folder).
name
profiling
description
Diagnose frame-rate bottlenecks (CPU vs GPU bound FIRST), control Unreal Insights traces, sample live frame times, and annotate performance captures. Use when FPS is low/bad, the game is slow, or you need to find what is limiting the frame rate.
display_name
Profiling & Performance
vibeue_classes
PerformanceService
keywords
profiling, performance, trace, unreal insights, frame time, fps, low fps, bad fps, cpu, gpu, cpu bound, gpu bound, game thread, render thread, draw calls…

Profiling Skill

Unreal 5.8's native toolsets have no performance or tracing tools, so this is VibeUE's net-new capability: unreal.PerformanceService answers "are we CPU- or GPU-bound?" and drives Unreal Insights captures from Python with no C++ required. Run everything here through execute_python_code.

The whole API is small — read the live signatures once with discover_python_class(class_name="unreal.PerformanceService"):

MethodPurpose
frame_timing(target_fps=60.0)Game/Render/GPU/RHI thread ms + a CPU-vs-GPU bound verdict + a hint, plus a per-thread budget breakdown gated against target_fps (budget.meets_target PASS/FAIL). Run FIRST.
force_hitch(thread="game", ms=250.0, frames=1)Validation helper — deliberately stall a KNOWN thread ("game"/"render"/"both"/"gpu") to confirm the verdict fires. CPU paths are self-measuring: validate from the SAME response (observed_peak_*_ms, verdict_matched_expect) — do NOT follow up with frame_timing. Only the async gpu path is read back on a following frame. Clamped (≤5000 ms, ~10 s total) for safety.
report(title=..., source="both", file="")Write a self-contained, shareable HTML report (live verdict + budget + analyse stats + a data-driven "fix in this order" list) to Saved/VibeUE/Performance/report_<timestamp>.html.
start_pie() / stop_pie()In-process PIE so frame_timing/force_hitch read a live game world (PIE starts on the next tick — read on a following frame, pie_running flips true). Quick checks only; prefer start_standalone when the numbers must be trusted.
start_trace(name="mcp_capture", channels="")Start an Insights trace to file (default channel set if channels empty).
stop_trace()Stop the active trace; returns the trace file path + size.
get_trace_status()Whether a trace is active and which channels are enabled.
bookmark(name)Drop a point-in-time bookmark in the active trace.
region_start(name) / region_end(name)Begin / end a named region span in the active trace.
analyse(source="both", file="")Read back trace and/or log → frame stats, worst frames, hitches, notable log lines. Combined analysis reports complete, partial, or failed; partial is never top-level success.
start_standalone(name="standalone_capture", channels="")Request a separate process with a unique direct-to-file trace. The first response is start_pending; poll status for verified capture.
stop_standalone()Gracefully stop the exact tracked process and verify the exact trace finalized; forced/partial outcomes are explicit failures.
get_standalone_status()Session ID, PID, map, exact trace/log destinations, process state, and capture/finalization verification.

All methods return a JSON string. For a representative reading, profile under PIE or a standalone session (start_standalone), not the bare editor viewport.

🚦 STEP 0 — Is it CPU-bound or GPU-bound? (DO THIS FIRST, ALWAYS)

Never optimise before you know which processor is the bottleneck. The frame time is roughly max(GameThread, RenderThread, GPU) — these run in parallel, so only the longest one sets your FPS. Cutting GPU cost (shadows, Lumen, post-process) does nothing if the frame is actually game-thread or render-thread bound, and vice-versa. Getting this wrong wastes the whole session.

Fastest check — one call
python
import unreal, json
result = json.loads(unreal.PerformanceService.frame_timing())
print(result)  # game_thread_ms, render_thread_ms, gpu_ms, rhi_thread_ms, frame_ms, bound, hint

Start PIE first (see the pie-testing skill) and park in a representative/worst spot, then call it. It returns game_thread_ms, render_thread_ms, gpu_ms, rhi_thread_ms, the frame_ms, a bound verdict (GameThread / RenderThread / GPU), and a hint with what to do next. This is the same data the stat unit overlay shows, read straight from engine globals — no screenshots, no trace parsing.

⏱️ Frame-time budgets — what a target FPS actually costs

FPS is just 1000 / frame_ms. Because the threads run in parallel, every thread (GameThread, RenderThread, GPU) must individually finish inside the budget below — the slowest one alone sets your FPS. A 12 ms GPU is wasted if the game thread takes 25 ms: you still get ~40 FPS.

Target FPSPer-frame budgetMeaning
30 FPS33.33 msMaximum allowable time per frame
60 FPS16.66 msMaximum allowable time per frame
120 FPS8.33 msMaximum allowable time per frame
240 FPS4.16 msMaximum allowable time per frame
360 FPS2.77 msMaximum allowable time per frame

Read frame_timing() against this table: if game_thread_ms = 25, you are hard-capped at ~40 FPS no matter what you do to the GPU. To hit 60 FPS the game thread must drop under 16.66 ms; to hit 120 FPS, under 8.33 ms. Always state the bottleneck thread's ms next to the target budget so the gap is explicit (e.g. "game thread 25 ms vs 16.66 ms for 60 FPS → must cut 8.3 ms on the game thread").

You don't have to do this arithmetic yourself: frame_timing(target_fps=...) returns the gate — the budget block carries each thread's headroom / over_budget against the per-frame budget and a single budget.meets_target PASS/FAIL you can assert on (CI-style perf checks included). To prove the verdict logic works against a known ground truth, use force_hitch (see the API table).

🛠️ CVars tune the renderer — they do NOT fix the game thread

r.* console variables almost exclusively move GPU and RenderThread cost (Lumen, shadows, reflections, resolution, draw setup). There is no CVar that makes your Tick, AI, or animation logic cheaper. When bound == GameThread, the fix lives in code and Blueprints, driven by what the profiler shows:

Profiler symptom (stat dumpframe -root=gamethread)Fix lives inTypical change
High FTickFunctionTask / many ticking actorsC++ / BlueprintThrottle PrimaryActorTick.TickInterval, disable tick when idle/far, event-drive instead of polling every frame
High AnimGameThreadTime / many skeletal meshesC++ / mesh setupEnable URO (bEnableUpdateRateOptimizations), VisibilityBasedAnimTickOption = OnlyTickPoseWhenRendered
Expensive Blueprint ReceiveTickBlueprint graphMove per-frame logic to timers/events, cache results, early-out
CharacterMovement / physics / AI heavyC++ / configSignificance-based LOD, fewer simulated bodies, coarser AI update rate
Per-frame SetTimer, allocations, logging in hot pathsC++ / BlueprintRemove redundant work; gate UE_LOG behind a debug flag

So the workflow for a game-thread bottleneck is: profile → read the offending scope → edit the code/Blueprint that owns it → rebuild → re-profile to confirm. Reaching for CVars here is a category error; they will not move the number.

Decision tree
boundMeaningWhere to look next
GameThreadCPU, game threadTick / Blueprint / AI / animation. Run stat dumpframe -ms=0.5 -root=gamethread then read the log (LogsToolset). Fix is code/Blueprint, not CVars (see "CVars do NOT fix the game thread" above): throttle ticks, enable anim URO, event-drive logic. Compare the ms to the budget table.
RenderThreadCPU, render threadDraw calls & primitives, dynamic shadow-casting lights. Check stat scenerendering. Instance/merge meshes, enable Nanite, cut dynamic lights.
GPUGPUNow run ProfileGPU (below). Shadows (VSM), Lumen, translucency, resolution.
Confirm / fallback methods
  1. Numeric thread split via log — reliable, works headless:
    python
    import unreal
    w = unreal.get_editor_subsystem(unreal.UnrealEditorSubsystem).get_game_world()
    unreal.SystemLibrary.execute_console_command(w, "stat dumpframe -ms=0.5 -root=gamethread")
    unreal.SystemLibrary.execute_console_command(w, "stat dumpframe -ms=0.5 -root=renderthread")
    Then read the dump with the engine LogsToolset (tail the main log, ~150 lines) — it prints the full thread hierarchy in ms (e.g. World Tick Time, FTickFunctionTask, individual Blueprint ReceiveTick costs). This is the single most useful CPU drill-down.
  2. Resolution-scaling test (decisive GPU-bound proof) — sample frame time at full res via frame_timing(), then r.ScreenPercentage 50, and compare. FPS jumps a lot → GPU-bound. FPS barely moves → CPU-bound.
  3. stat unit is the canonical overlay, but its numbers do not go to the log, and PIE often runs in a separate window so screenshots are unreliable. Prefer frame_timing() or methods 1–2 over trying to OCR stat unit.
Show full SKILL.md (711 more words)Show less

⚠️ Gotchas — read before writing any code

  1. ProfileGPU tells you WHERE GPU time goes, not WHETHER you are GPU-bound. It always produces a GPU breakdown even on a CPU-bound frame — so reading it first will happily send you optimising shadows on a frame whose real cost is the game thread. Run STEP 0 (frame_timing()) first; only reach for ProfileGPU once bound == GPU.

0b. Never run ProfileGPU (or stat dumpframe) during a trace you intend to average. Each ProfileGPU stalls the GPU for a full readback (hundreds of ms to seconds), and those stall frames poison the frame-time stats. Capture clean frame-time traces separately from GPU/CPU drill-downs.

0c. analyse() reports frame-time aggregates (avg/p95/worst frames, hitches, notable log lines), not the live CPU/GPU split. Use frame_timing() for the per-thread split.

  1. Profile under PIE or standalone, not the bare editor viewport. The empty editor viewport is not representative. Start PIE (pie-testing skill) or use start_standalone().

  2. Trace files are large — a ~10 second trace with default channels is 30–50 MB. Traces land under Saved/Profiling/ (already excluded from source control).

  3. A trace must be active before you bookmark / mark regions. bookmark() and region_start()/region_end() only do something while get_trace_status() reports a live trace. Call start_trace() first.


Trace Control

Start / stop a trace
python
import unreal, json

# Default channel set (frame, cpu, gpu, log, ...) — pass channels="" or omit
res = json.loads(unreal.PerformanceService.start_trace("combat_encounter"))
print(res)  # includes the trace file path

# ... reproduce the workload ...

stopped = json.loads(unreal.PerformanceService.stop_trace())
print(stopped)  # trace file path + size
Custom channels
python
# Comma-separated channel list (short names accepted by the service)
unreal.PerformanceService.start_trace("mem_capture", "frame,cpu,memalloc,memtag,object,loadtime")
Check status
python
import unreal, json
print(json.loads(unreal.PerformanceService.get_trace_status()))  # active? which channels?

Annotations — Mark Regions and Bookmarks

Use these while a trace is active to label interesting moments in the Unreal Insights timeline.

python
import unreal

# Single point-in-time bookmark (vertical line in Insights)
unreal.PerformanceService.bookmark("spawn_wave_3")

# Named region (coloured span)
unreal.PerformanceService.region_start("loading_level")
# ... trigger the thing you want to measure ...
unreal.PerformanceService.region_end("loading_level")

Reading a capture back — analyse()

analyse() reads a finished trace and/or the log and returns a perf summary (frame stats, worst frames, hitches, notable log lines) without opening Unreal Insights:

python
import unreal, json

summary = json.loads(unreal.PerformanceService.analyse("both"))   # "trace", "logs", or "both"
print(summary)  # avg/p95/worst frame ms, hitches, notable log lines

# Analyse a specific file instead of the last trace started/stopped
unreal.PerformanceService.analyse("trace", "Saved/Profiling/combat_encounter.utrace")

For source="both", inspect status: complete means both sources succeeded, partial means exactly one did, and failed means neither did. A partial result deliberately has success=false and names available_sources / failed_sources; this prevents a missing trace from masquerading as a successful capture. Log output separates pso_hitch_event_lines, cumulative pso_hitches_reported, and pso_hitch_summary_lines; repeated cumulative summary lines are not summed. The backward-compatible pso_hitches field is the best supported count.

Remember: analyse() is frame-time aggregates only — use frame_timing() for the CPU/GPU split.


Standalone capture — representative readings

The editor viewport (and even PIE) is not always representative of a packaged run. start_standalone() launches the game as a separate standalone process with one unique, direct-to-file trace. It does not use the global Unreal Trace Server store and never substitutes an unrelated "latest" trace:

python
import unreal, json

start = json.loads(unreal.PerformanceService.start_standalone("standalone_capture"))
# start is request_accepted=true, success=false, pending=true until the child and trace exist
status = json.loads(unreal.PerformanceService.get_standalone_status())
# poll on later editor ticks until status["capture_verified"] is true

# ... let it run / drive the workload ...

stopped = json.loads(unreal.PerformanceService.stop_standalone())
# require stopped["success"] and status == "finalized" before trusting the trace

Record the returned session_id, pid, map, trace_file, and log_file with benchmark results. If shutdown is forced or the exact trace stays missing/empty, stop returns failure and may mark the available log/partial trace as partial; do not silently use another store trace. analyse("both") can still return a clearly marked log-only partial summary.

For comparisons, keep map/route, resolution, scalability, difficulty, power mode, and warm-up fixed; disable editor background throttling for unattended runs and restore its prior value afterward. Treat short or sparse samples as observations, not stable averages. Compare median/p95/p99 and frame counts above 33/50/100 ms, and separate cold-start/shader/PSO runs from warm-cache runs. Run ProfileGPU or stat dumpframe separately because their instrumentation stalls contaminate traces.


python
import unreal, json

# 1. CPU vs GPU verdict FIRST (PIE running, parked in a representative spot)
print(json.loads(unreal.PerformanceService.frame_timing()))

# 2. Capture a clean trace around the workload
unreal.PerformanceService.start_trace("combat_encounter")
unreal.PerformanceService.region_start("wave_spawn")
# (trigger the gameplay here)
unreal.PerformanceService.region_end("wave_spawn")
res = json.loads(unreal.PerformanceService.stop_trace())
print("trace:", res)

# 3. Summarise without leaving Python
print(json.loads(unreal.PerformanceService.analyse("both")))

Channel Reference

start_trace / start_standalone accept a comma-separated channels string; empty uses the default set (frame, cpu, gpu, log, …). Common channels:

ChannelWhat it capturesUse for
frameFrame boundaries, wall timeAlways include — baseline for everything
cpuCPU named scopesCPU hotspots, Blueprint tick
gpuGPU pass timingsGPU bound? Where are draw calls going?
statsUE stat countersActor/component counts, frame budget
logLog output embedded in traceCorrelate log spam with frame spikes
memallocPer-allocation callstacksMemory churn, GC pressure
memtagHigh-level memory category totalsWhich system is eating RAM?
objectUObject create/destroyAsset streaming, actor spawning
niagaraNiagara system tickParticle perf
animationAnimation graph evaluationAnim Blueprint cost
netReplication, RPC timingMultiplayer performance
slateUI widget tick and paintUI overhead
loadtimeAsset streaming / load eventsLoad hitches

Channel naming may vary slightly by build; call get_trace_status() after start_trace() to see the channels actually enabled.

Common channel presets
Investigationchannels string
General (balanced)frame,cpu,gpu,stats,log
Memoryframe,memalloc,memtag,object,loadtime
Animation / characterframe,cpu,animation,stats
UI / Slateframe,cpu,slate,stats
Niagara / VFXframe,cpu,gpu,niagara
Multiplayerframe,cpu,net,stats
Load / streamingframe,loadtime,object,log

Opening Traces in Unreal Insights

analyse() covers most needs from Python, but you can open a .utrace for the full timeline UI:

Editor menu: Tools → Run Unreal Insights

Or from the command line:

"<UE install>/Engine/Binaries/Win64/UnrealInsights.exe" "<path>/combat_encounter.utrace"

Trace files are written under:

<project root>/Saved/Profiling/<name>.utrace

© kevinpbuckley, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in Content/Skills/profiling of kevinpbuckley/VibeUE.

Open the folder on GitHubat commit dc051be

Compare with similar skills

Profiling 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.

Profiling compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Profiling this skillkevinpbuckley/VibeUE717—~4.5kAutomated safety check: PassMIT
2D Map and Scene Generator0x0funky/agent-sprite-forge4.3k—~2.9kAutomated safety check: PassMIT
Spine AnimationGenielabsOpenSource/spine-animation-ai512—~17kAutomated safety check: PassCC-BY-NC-4.0
Unreal BridgeTornLux/UnrealBridge305—~8.4kAutomated safety check: NotesMIT
Text To 3D AssetLaurentiuGabriel/unreal-game-assets-creation-skill146—~2.1kAutomated safety check: PassNone
Substance 3D Texturingfreshtechbro/claudedesignskills986—~4kAutomated safety check: PassMIT

Similar skills

  • 2D Map and Scene Generator

    0x0funky/agent-sprite-forge

    Plans and builds 2D game maps and scenes, from tilemaps and parallax backgrounds to HD-2D plates, with collision checks, a playable HTML preview and Tiled, Godot or LDtk export.

    4.3k GitHub stars~2.9k tokensUpdated yesterday
    Game DevelopmentAuto-check passed
  • Spine Animation

    GenielabsOpenSource/spine-animation-ai

    Create Spine 2D skeletal animations from pre-existing character assets (separated body-part PNGs, atlas spritesheet, or a full character image).

    512 GitHub stars~17k tokensUpdated 1 mo ago
    Game DevelopmentAuto-check passed
  • Unreal Bridge

    TornLux/UnrealBridge

    Execute Python scripts inside a running Unreal Engine 5.3+ editor via TCP bridge.

    305 GitHub stars~8.4k tokensUpdated 6 days ago
    Game DevelopmentAuto-check: notes
  • Text To 3D Asset

    LaurentiuGabriel/unreal-game-assets-creation-skill

    Generate a game-ready 3D asset by running the local AI pipeline sequentially: Fooocus (SDXL text-to-image) - Hunyuan3D-2 (image-to-textured-GLB) - optional Blender FBX convert + Unreal import.

    146 GitHub stars~2.1k tokensUpdated 2 mo ago
    Game DevelopmentAuto-check passed
  • Substance 3D Texturing

    freshtechbro/claudedesignskills

    Comprehensive skill for Adobe Substance 3D Painter texturing and material creation workflow.

    986 GitHub stars~4k tokensUpdated 10 mo ago
    Game DevelopmentAuto-check passed
  • A skill your agent uses when writing or fixing Maya pipeline code in Python: mayapy batch jobs over many scenes, validating and auto-fixing scenes, FBX export for Unreal or Unity (static, skeletal…

    898 GitHub stars~4.7k tokensUpdated today
    Game DevelopmentAuto-check passed

More from kevinpbuckley/VibeUE

All 39 skills in this repo
  • Unreal Animation Bone Editor

    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.

    717 GitHub stars~1.3k tokensUpdated 5 days ago
    Auto-check passed
  • Unreal Animation Montage

    kevinpbuckley/VibeUE

    Creates and edits Unreal Engine Animation Montages through AnimMontageService: sections, slots, segments, branching points, notifies and blend settings.

    717 GitHub stars~3.6k tokensUpdated 5 days ago
    Auto-check passed
  • Unreal AnimSequence Editor

    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.

    717 GitHub stars~3.2k tokensUpdated 5 days ago
    Auto-check passed
  • Unreal Asset Import and Export

    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.

    717 GitHub stars~6.5k tokensUpdated 5 days ago
    Auto-check passed
  • Unreal Engine Settings Control

    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.

    717 GitHub stars~1.3k tokensUpdated 5 days ago
    Auto-check passed
  • Unreal Enhanced Input Setup

    kevinpbuckley/VibeUE

    Creates and wires Unreal Engine Enhanced Input assets through VibeUE's InputService: Input Actions, Mapping Contexts, key bindings, triggers and modifiers.

    717 GitHub stars~2.4k tokensUpdated 5 days ago
    Auto-check passed

Works with

Questions about Profiling

What does Profiling do?

Diagnose frame-rate bottlenecks (CPU vs GPU bound FIRST), control Unreal Insights traces, sample live frame times, and annotate performance captures. Profiling is an agent skill from kevinpbuckley/VibeUE. Diagnose frame-rate bottlenecks (CPU vs GPU bound FIRST), control Unreal Insights traces, sample live frame times, and annotate performance captures.

When should I use Profiling?

Profiling fits situations like: the game is slow; you need to find what is limiting the frame rate.

How do I install Profiling in Claude Code?

Run `npx skills add kevinpbuckley/VibeUE --skill profiling -a claude-code`. Or copy the skill folder (Content/Skills/profiling in kevinpbuckley/VibeUE) into .claude/skills/profiling in your project. Claude Code loads it when a task matches its description.

How do I install Profiling in Codex?

Run `npx skills add kevinpbuckley/VibeUE --skill profiling -a codex`. Or copy the skill folder (Content/Skills/profiling in kevinpbuckley/VibeUE) into .agents/skills/profiling in your project. Codex loads it when a task matches its description.

Can I use Profiling in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add kevinpbuckley/VibeUE --skill profiling -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/profiling, .gemini/skills/profiling, .github/skills/profiling and .opencode/skills/profiling in your project.

What does Profiling need to run?

SKILL.md names no scripts, command-line tools or credentials: Profiling is instructions for the agent only. Our summary lists: Python 3.

Does Profiling access the network?

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.

Is Profiling safe to install?

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. Review the folder before installing.

What licence does Profiling use?

Profiling is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Profiling use?

About 4.5k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Profiling?

Skills that share tags, products or a category with Profiling: 2D Map and Scene Generator (0x0funky/agent-sprite-forge, 4.3k stars), Spine Animation (GenielabsOpenSource/spine-animation-ai, 512 stars), Unreal Bridge (TornLux/UnrealBridge, 305 stars) and Text To 3D Asset (LaurentiuGabriel/unreal-game-assets-creation-skill, 146 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Profiling?

kevinpbuckley (a GitHub user) maintains it in kevinpbuckley/VibeUE, which has 717 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on October 1, 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.