authoring-godot-prompt…
Use when writing or editing a SKILL.md, a skill's references/*.md, or an agent definition in this repo — required frontmatter,…
Use when using the Phantom Camera addon — PhantomCamera2D/3D with priority-based switching, follow and look-at modes, and tween transitions
Claude Code
$ npx -y skills add jame581/GodotPrompter --skill phantom-camera --agent claude-code
Codex
$ npx skills add jame581/GodotPrompter --skill phantom-camera -a codex -y
Cursor
$ npx skills add jame581/GodotPrompter --skill phantom-camera -a cursor -y
Gemini CLI
$ npx skills add jame581/GodotPrompter --skill phantom-camera -a gemini-cli -y
GitHub Copilot
$ npx skills add jame581/GodotPrompter --skill phantom-camera -a github-copilot -y
OpenCode
$ npx skills add jame581/GodotPrompter --skill phantom-camera -a opencode -y
Windsurf
$ npx skills add jame581/GodotPrompter --skill phantom-camera -a windsurf -y
name: phantom-camera description: Use when using the Phantom Camera addon — PhantomCamera2D/3D with priority-based switching, follow and look-at modes, and tween transitions
> **Related skills:** **camera-system** for hand-rolled camera patterns, **tween-animation** for the easing concepts the transitions build on.
> **Addon:** Phantom Camera · version `v0.11.0.4` · Godot 4.4+ · MIT · source: https://github.com/ramokz/phantom-camera · nodes are GDScript, plus an official C# wrapper API (`namespace PhantomCamera`) shipped as source `.cs` files in the addon. **Pre-1.0:** minor versions may break API.
> **Godot 4.8:** not yet confirmed by the addon. Issue [#694](https://github.com/ramokz/phantom-camera/issues/694) (open) reports the plugin not loading on 4.8-beta1; v0.11.0.4 shipped a fix for it, after which the maintainer could not reproduce the failure (checked 2026-11-12).
---
| Approach | Best for | |---|---| | Hand-rolled (`camera-system` skill) | One camera, simple follow/shake, no addon dependency | | **Phantom Camera** | Multiple camera "shots" that need priority-based switching, dead-zone/group/path/third-person follow logic, and smooth resource-driven tweens between them — Cinemachine-style workflow |
Reach for Phantom Camera when a scene needs several distinct camera behaviors (gameplay follow, a cutscene framing, a boss-fight group shot) that swap automatically based on priority, rather than one script juggling every case. It replaces the `Camera2D`/`Camera3D` positioning logic itself — you still keep exactly one real `Camera2D`/`Camera3D` per viewport; Phantom Camera nodes never render anything on their own.
---
**Asset Library (recommended):** Godot AssetLib → search "Phantom Camera" → Download (select only the `phantom_camera` directory) → **Project → Project Settings → Plugins** (**Project Settings → Addons → Plugins** on 4.8) → enable it.
**GitHub zip:** extract `addons/phantom_camera/` into the project root, then enable the plugin the same way.
Enabling the plugin auto-registers a `PhantomCameraManager` autoload singleton; since v0.11.0.4 it no longer restarts the editor (older versions did). No manual autoload setup is needed. If an older version reports a missing `PhantomCameraManager` after enabling, update to v0.11.0.4 (the #694 fix). Six custom node types become available in the "Create New Node" dialog: `PhantomCamera2D`, `PhantomCamera3D`, `PhantomCameraHost`, `PhantomCameraNoiseEmitter2D`, `PhantomCameraNoiseEmitter3D`, and `PhantomCameraTweenDirector`.
**C# projects:** the addon ships its official wrapper as plain `.cs` source files under `addons/phantom_camera/scripts/**` (`namespace PhantomCamera`) — no NuGet package to add. A C#-enabled Godot project (one with its own generated `.csproj`, `Godot.NET.Sdk`) picks these up automatically once the addon folder is present; `using PhantomCamera;` is then enough (§3–§7).
---
Two node kinds work together:
around). It reads the highest-priority `PhantomCamera2D`/`3D` in the scene and drives the real camera's transform every frame. Only the first `PhantomCameraHost` child of a given camera is used.
the player, inside trigger areas, cutscene rigs). Any number can exist; each one describes a candidate "shot" via `priority`, a follow mode, and (3D only) a look-at mode. They render nothing themselves.
# Scene tree: # Camera2D (or Camera3D) # └─ PhantomCameraHost # Player (CharacterBody2D) # └─ PhantomCamera2D (priority 0, follow_mode = SIMPLE, follow_target = Player) # BossArena # └─ PhantomCamera2D (priority 10, follow_mode = GROUP, follow_targets = [Player, Boss])
# CameraRig.gd — on the Camera2D/Camera3D
extends Camera2D
@onready var host: PhantomCameraHost = $PhantomCameraHost
func _ready() -> void:
# host.camera_2d / host.camera_3d are populated automatically from get_parent()
var active := host.get_active_pcam()
print("Active PCam: ", active.name if active else "none")// CameraRig.cs — on the Camera2D/Camera3D
using PhantomCamera;
public partial class CameraRig : Camera2D
{
private PhantomCameraHost _host;
public override void _Ready()
{
// Host.Camera2D / Host.Camera3D are populated automatically from GetParent()
_host = GetNode<Node>("PhantomCameraHost").AsPhantomCameraHost();
var active = _host.GetActivePhantomCamera();
GD.Print("Active PCam: ", active is PhantomCamera2D p ? p.Node2D.Name.ToString() : "none");
}
}`PhantomCameraHost.interpolation_mode` (C#: `InterpolationMode`, enum `Auto`/`Idle`/`Physics`/`Manual`) controls when the Host updates the real camera: `AUTO` (default — picks physics or idle based on the active PCam's target), `IDLE`, `PHYSICS`, or `MANUAL` (call `host.process(delta)` yourself each tick).
`host_layers` (render-layer flags: 2D on the Host and `PhantomCamera2D`, 3D on `PhantomCamera3D`) gate which PCams a given Host will consider — a PCam is only eligible if its `host_layers` bitmask overlaps the Host's.
---
Every `PhantomCamera2D`/`3D` has `priority: int = 0`. The `PhantomCameraHost` attached to the scene's real camera always follows the highest-priority PCam that shares a `host_layers` bit with it. Change `priority` at runtime with `set_priority(value)` / read with `get_priority()` — values are clamped to `>= 0`.
# TriggerArea.gd — raise priority while the player is inside, restore on exit
extends Area2D
@export var area_pcam: PhantomCamera2D
func _ready() -> void:
area_entered.connect(_on_entered)
area_exited.connect(_on_exited)
func _on_entered(area: Area2Agentic skills framework for Godot 4.x game development. Gives AI coding agents domain-specific expertise for GDScript and C# projects.
Use when writing or editing a SKILL.md, a skill's references/*.md, or an agent definition in this repo — required frontmatter,…
Use when cutting a GodotPrompter release or bumping its version — the version-bump sequence, tag-triggered workflow, and the…
Use when working with 2D-specific systems — TileMaps, parallax scrolling, 2D lights and shadows, canvas layers, particles 2D,…
Use when working with 3D-specific systems — materials, lighting, shadows, environment, global illumination, fog, LOD, occlusion…
Use when building or replacing an ability system — abilities with cost/cooldown, buffs/debuffs, stat modifiers, and gameplay…
Use when creating Godot editor plugins — EditorPlugin, @tool scripts, custom inspectors, and dock panels
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.