Agent skill

Geo Assets

by LunCoSim in LunCoSim/lunco-sim

Download and process lunar geo assets (DEMs, stable material albedo, ortho/slope/shade maps, normal maps) with the LunCoSim asset pipeline — Assets.toml entries, ROI cropping, terrain layer wiring…

Apache-2.0Auto-check passedDevelopment

Install Geo Assets

skills CLI
$ npx skills add LunCoSim/lunco-sim --skill geo-assets -a claude-code

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

GitHub CLI
$ gh skill install LunCoSim/lunco-sim geo-assets --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/LunCoSim/lunco-sim.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/geo-assets .claude/skills/geo-assets && 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
geo-assets
GitHub stars
107
Token cost
~5.8k tokens
SKILL.md length
2,853 words
Files
1
Skills in repo
40
Repo updated
First seen
Licence
Apache-2.0

At a glance

Download and process lunar geo assets (DEMs, stable material albedo, ortho/slope/shade maps, normal maps) with the LunCoSim asset pipeline — Assets.toml entries, ROI cropping, terrain layer wiring…

  • Works in 5 steps: Find the product:… → For an LROC PDS3 source, read its .LBL:… → Pick center_lat/lon (the POI), window_m… → …
  • Adding a terrain site to a twin
  • SKILL.md covers Quick commands (run from this…, Joining a cropped DEM to the…, Where files live (cache… and Git hygiene for downloaded and…, plus 5 more sections
  • Calls cargo, kind and git; reaches data.lroc.im-ldi.com and pds.lroc.im-ldi.com

What it does

Geo Assets is an agent skill from LunCoSim/lunco-sim. Download and process lunar geo assets (DEMs, stable material albedo, ortho/slope/shade maps, normal maps) with the LunCoSim asset pipeline — Assets.toml entries, ROI cropping, terrain layer wiring in USD, quality presets, bake keys. Use when adding a terrain site to a twin, baking layer maps, or debugging the asset pipeline.

Its SKILL.md is about 5.8k 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 Development, covering Game assets and audio. The repository describes itself as: Collaborative Multiphysics Cosimulator For Space Missions 🌎🚀🌚. The licence is Apache-2.0.

When your agent uses it

  • Adding a terrain site to a twin
  • Baking layer maps
  • Debugging the asset pipeline

Example prompts

  • “/geo-assets”

Workflow steps

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

  1. Find the product: https://data.lroc.im-ldi.com/lroc/view_rdr/NAC_DTM_;
  2. For an LROC PDS3 source, read its .LBL: MAP_PROJECTION_TYPE
  3. Pick center_lat/lon (the POI), window_m (scene size),
  4. sha256 = "" on first download → the tool prints the hash; paste it in.
  5. PDS3 .IMG sources declare extent/scale in their label — src_* may be

What it can do on your machine

Read from SKILL.md and the folder at commit 43f1301. 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

    Shell commands in SKILL.md call:

    • cargo
    • kind
    • git

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

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • data.lroc.im-ldi.com
    • pds.lroc.im-ldi.com

    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

Geo Assets loads about 5.8k tokens when it runs. Until then it costs about 84 tokens; SKILL.md has 2,853 words of instructions outside code blocks.

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

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 LunCoSim/lunco-sim at commit 43f1301, republished under its Apache-2.0 licence (© LunCoSim). 2,853 words, ~5,783 tokens.

Download SKILL.mdSave it as .claude/skills/geo-assets/SKILL.md (or your agent's skills folder).
name
geo-assets
description
Download and process lunar geo assets (DEMs, stable material albedo, ortho/slope/shade maps, normal maps) with the LunCoSim asset pipeline — Assets.toml entries, ROI cropping, terrain layer wiring in USD, quality presets, bake keys. Use when adding a terrain site to a twin, baking layer maps, or debugging the asset pipeline.

Geo assets: download & process lunar terrain for a Twin

The application pipeline is composed by crates/lunco-assets; the heavy native processors live in crates/lunco-assets-processing. Pure Rust — no GDAL. Sources may be GeoTIFF or PDS3 .IMG (attached or detached .LBL; lunco-assets-processing/src/pds_img.rs); polar-stereographic products are refused loudly because the crop affine is equirectangular-only. Use the target Twin's own Assets.toml as the worked example and inspect its current scene before wiring outputs.

Wire baked terrain outputs into a scene through LunCoSim's USD document authoring commands. Open the exact USD source, inspect its layer and target, apply typed ApplyUsdOp(s) or the existing terrain-material planner, save, and read back the authored value. Do not patch .usd* text directly; if the available command surface cannot author a required standard field, add the smallest typed operation at the owning USD layer first.

Quick commands (run from this repo's root)

bash
cargo run -p lunco-assets -- list     --twin <TWIN>
cargo run -p lunco-assets -- download --twin <TWIN>            # ALL entries (can be GBs)
cargo run -p lunco-assets -- download --twin <TWIN> -a <key>   # one entry
cargo run -p lunco-assets -- process  --twin <TWIN> -a <key> --quality coarse|good

<TWIN> = a folder holding Assets.toml + twin.toml. -a <key> = the [section] name in its Assets.toml. The same entries appear in-app under Settings ▸ Downloadable data and the Twin inspector once the Twin is open (scanned on open). Asset-consuming domains begin only after the asset owner publishes TwinAssetMounted; they must not depend on observer registration order. If a declared dataset is missing, the interactive app asks which entries to download before terrain generation; nothing downloads until the user confirms there or uses a CLI run. Closing a Twin retires its dataset rows under the shared download/process commit barrier and cancels their cooperative tasks before another Twin can reuse the authority. A failed mount or poisoned lifecycle lock is surfaced as an error, never reported as a successful asset postcondition. --quality coarse quarters target_resolution (floor 64) for a seconds-fast quick-start bake; re-run with good (default) for full res.

Downloads use the shared download section in the user settings file (lunco-settings::DownloadSettings): attempts include the first request, delays are exponential and capped, and a failed body read resumes from the received prefix with HTTP Range when the source supports it. The CLI and the interactive window therefore have one policy and one cache/path resolver.

Joining a cropped DEM to the rendered globe

The site keeps its own cropped DEM as the only elevation input for its handoff. The DEM asset and retained base grid remain unchanged, and the composed local surface preserves their relief throughout the crop. The crop's border datum sets the visible globe shell radius; celestial and physics state keep the canonical body radius. A worker-prepared exterior collar continues the measured edge profile from the exact crop boundary to the analytic sphere. This collar is visual closure outside the crop; terrain queries and colliders remain on the local surface. Globe tiles cut out the collar footprint with bounded orthographic edge sampling. Do not copy the collar into each tile or make global LOD follow DEM posting density. No body-wide raster asset is required.

Exterior smoothing preserves the first native posting and filters only the continuation in its preparation worker, without increasing mesh density. Keep the DEM appearance visibly distinct. See the geometry contract for ownership and sampling.

Derive the visual collar width from this crop's measured edge relief and one-sided edge slope with a 0.60 relief-grade sizing target. Continue the measured slope over one posting, then fade one nearest-perimeter signal to the sphere. Geometry and appearance share one width sized from maximum edge relief; the native inner posting lattice tapers to an outer boundary with at least 32 segments per side. Keep the DEM and all in-crop heights unchanged. Refine the globe only in the band between the exact crop and the collar's outer cutout; set the local minimum tile size from that handoff footprint, independent of DEM posting density. The collar reads map roles from the cropped DEM prim and appearance from the body's USD-selected UsdShade material. A continuation-capable WGSL shader and its USD Shader prim must declare the matching lunco.lunar-surface-continuation.v1 interface. Rhai admits compatible sources, waits for reflection, and holds simulation on a mismatch. The compositor keeps unadmitted collars hidden; the globe cutout waits for the composed material and visibility. RunLint checks the composed declaration against reflected WGSL. Read the body's composed look from GlobeLod, with its authored declaration entity as validation provenance. The shader asset path is never selected in Rust. Inspect the actual boundary vertices through bounded TerrainLodStatus geometry pages; mesh_entity selects a CPU-retained DEM boundary tile, including its morph positions. Use boundary_only: true to page only the finite perimeter. When bake sampling math changes, update the persistent visual tile cache revision in the same change. Check both rendered edges against mission queries before accepting a corner join.

The active crop supplies its own georeference, posting spacing, border datum, and measured edge profile, so this works with Twin-local crops at different sites and resolutions. A body currently has one built crop handoff; multiple built crops for the same body are a visible input error, not a size-based selection.

Verify automatic lunar DEM registration

For automatic lunar DEM registration, verify both repository fixtures scenes/tests/lunar_dem_continuation.usda (omitted coordinates) and scenes/tests/lunar_dem_georeferenced.usda (DEM-authored coordinates) in an owned headful production session. The shared continuation scenario waits for material admission and settled DEM streaming. Headless scene tests do not provide the GPU-retained boundary geometry required by this graphics verdict. The scene-site projection and zero defaults are specified in the geometry contract; no tutorial script installs the handoff.

Where files live (cache resolution)

  • Shared cache — the OS-global cache (~/.cache/lunco on Linux, ~/Library/Caches/lunco on macOS, %LOCALAPPDATA%\\lunco on Windows). LUNCOSIM_CACHE remains an explicit CI/custom-install override. Every worktree and Twin therefore shares one pool of regenerable data (source libraries, textures, ephemeris, downloaded sources).
  • Twin cache — <TWIN>/.cache. A Twin's default-owned downloads land beside the Twin. twin:// reads resolve <twin>/<rel> first, then <twin>/.cache/<rel>, then the global cache <cache>/<rel>.
  • shared = true on an entry sends its write to the global pool instead (<cache>/sources/<sha256(url)[..16]>/<basename>) — one download per URL, reused by every twin and worktree. Use it when several Twins intentionally share a multi-GB upstream product; a Twin that must be self-contained should set shared = false.
  • Raw downloads: entries without dest land in <owner cache>/sources/<url-hash>/<basename> — owner being the twin (--twin) or the shared cache (crate manifest). Author dest only when a file must sit at a specific path; it is then resolved against that same owner cache.
  • Baked outputs (output_root = "twin"): inside the twin at output, where the scene's demSource/layer attrs expect them. Per-twin, always.

Git hygiene for downloaded and generated bytes

Before downloading a Twin dataset, add and verify ignore rules for the raw cache and generated processing outputs. The canonical policy is:

gitignore
twins/**/.cache/
twins/**/terrain/*/materials/
twins/**/terrain/*/.bakekey

Raw downloads belong under the Twin's .cache (or the shared global cache when shared = true); processed DEMs, maps, and bake stamps are regenerable bytes. Commit Assets.toml, processing/reprojection tools, provenance and parameter reports, and USD references. Do not force-add cache or generated terrain bytes. Use git check-ignore -v <raw-file> <processed-file> before staging. A download-only manifest entry is honest when a source projection is unsupported; do not add a misleading [entry.process] section just to make a polar product look native. Use an explicit reprojection adapter and record its command and vertical datum, or record the native-tool gap as blocked work.

Process kinds (in [key.process])

kindInputOutput
demDTM (GeoTIFF/.IMG)<output>/materials/textures/heightmap.tif — square float32, georef in tags. output is a FOLDER; scenes reference it as the search path demSource = @terrain/<site>@, found from any scene folder through the Twin root/cache
mapco-registered raster (ortho .IMG, _SHADE/_SLOPE/_CLRGRAD .TIF)8-bit RGB PNG at output (a FILE). Gray sources get a 1–99 percentile stretch in linear contrast space, then sRGB encoding for the runtime loader
albedograyscale PDS3 .IMG or georeferenced TIFF orthophotostable linear material-albedo PNG at output (a FILE)
normalmapDTMDEM-local ENU normal PNG (RGB = n*0.5+0.5, decoded by the shared terrain-surface shader kernel)
textureany imageresized PNG (non-geo default)
gltf.glbDraco-normalized .glb; WebP extension conversion pending

The built-in processors are registered through lunco-assets-processing::process::ProcessorRegistry. A domain-specific native baker should register a ProcessorSpec and publish its sidecars through the shared staging/commit path. Put processor-specific manifest values in [key.process.parameters]; do not add a new shared manifest field for every domain. Keep selection, ordering, and onboarding policy in the reusable Rhai assets tool library or a Twin-owned script; Rust remains the owner of decoding, heavy math, cancellation, and atomic publication.

DatasetRegistry rejects process outputs that overlap another process output or any declared download source, including file paths nested under a directory output. The dem processor replaces its complete configured folder when it commits. Store independent material maps in sibling paths and point the scene at the DEM folder.

Use the existing assets Rhai library to process declared sources at runtime: assets::bake(id) dispatches ProcessDataset, and assets::bake_scope(scope) queues each idle processing declaration in a scope. Both read source identity and pipeline settings from Assets.toml; the command carries only the dataset id. ListDatasets reports completion through each entry's state. Calling bake again is safe: the content bake key skips current outputs. Adding another source or changing its output size/ROI therefore needs manifest and Rhai edits only; add a Rust processor only for a new transform.

Shared ROI fields: center_lat, center_lon, window_m, target_resolution = [n, n], pixel_scale_m, src_min/max_lat, src_min/max_lon, frame = "MOON_ME", output_root = "twin".

For a grayscale orthophoto used as terrain colour, add a separate albedo process entry. Its optional native-only parameters are albedo_base_linear (neutral material base, default 0.13), albedo_detail_strength (retained local contrast, default 0.35), and albedo_illumination_radius_m (low-frequency field radius, default 40). The processor writes a stable albedo.png; it does not claim to perform full photometric calibration. PDS3 .IMG sources supply their projection extent and pixel scale from the attached or detached label. A grayscale TIFF albedo source must author pixel_scale_m and all four src_* bounds in the process table; the grayscale TIFF decoder does not infer those geographic facts from its tags. Keep map for analysis/display outputs. In Rhai, assembly_builder::lunar_albedo_material_plan(...) returns standard USD SetAttribute operations for the produced albedo/normal assets; submit those through assembly_edit::batch or assembly_edit::propose. This keeps heavy image math in Rust while making the assembly policy replaceable and extensible.

Show full SKILL.md (1,204 more words)Show less

Adding a new territory to a twin

  1. Find the product: https://data.lroc.im-ldi.com/lroc/view_rdr/NAC_DTM_<SITE>; files under https://pds.lroc.im-ldi.com/data/LRO-L-LROC-5-RDR-V1.0/LROLRC_2001/DATA/SDP/NAC_DTM/<SITE>/.
  2. For an LROC PDS3 source, read its .LBL: MAP_PROJECTION_TYPE (EQUIRECTANGULAR → processable; POLARSTEREOGRAPHIC → download-only entry, no [*.process]), MAP_SCALE → pixel_scale_m, and MIN/MAXIMUM_LATITUDE + EASTERNMOST/WESTERNMOST_LONGITUDE → the four src_* fields. Label longitudes are 0–360 °E — author center_lon in the same convention. Never trust CENTER_LONGITUDE (body-frame quirk). For a GeoTIFF, verify its CRS/geotransform is equirectangular, then author pixel_scale_m and all four geographic extent fields explicitly; the grayscale decoder does not read those facts from TIFF tags.
  3. Pick center_lat/lon (the POI), window_m (scene size), target_resolution ≈ window_m / native m-per-px (square).
  4. sha256 = "" on first download → the tool prints the hash; paste it in.
  5. PDS3 .IMG sources declare extent/scale in their label — src_* may be omitted (an authored manifest extent wins when all four are set).

Wiring maps as terrain layers (USD)

Maps bind through a stock UsdShade Material network — the only authoring path. Bind the Terrain prim to a Material, whose surface output connects to a Shader carrying one asset inputs:<role>_map + float inputs:weight_<role> per layer. Inspect an existing terrain scene in the target Twin for its exact prim paths before adding a new network:

usda
def Xform "Terrain" ( prepend apiSchemas = ["LunCoTerrainAPI"] )
{
    string lunco:assetMode = "layered"
    rel material:binding = </Traverse/Looks/TerrainLook>
    # … dem/overzoom/rocks layers …
}

def Scope "Looks"
{
    def Material "TerrainLook"
    {
        token outputs:surface.connect = </Traverse/Looks/TerrainLook/Surface.outputs:surface>

        def Shader "Surface"
        {
            uniform token info:implementationSource = "sourceAsset"
            uniform asset info:wgsl:sourceAsset = @lunco://shaders/terrain_layered.wgsl@
            # Optional for streamed CDLOD; omit for a static/root mesh.
            uniform asset info:wgsl:vertexAsset = @lunco://shaders/terrain_geomorph.wgsl@
            asset inputs:albedo_map  = @terrain/<site>/materials/textures/albedo.png@
            float inputs:weight_albedo = 1.0
            asset inputs:normal_map  = @terrain/<site>/materials/textures/normal.png@
            float inputs:weight_normal = 0.5
            asset inputs:mineral_map = @terrain/<site>/materials/textures/slope.png@
            float inputs:weight_mineral = 0.0   # raise for a classification drape
        }
    }
}

For authored DEM terrain, terrain_layered.wgsl owns the canonical material fragment. terrain_geomorph.wgsl is only its optional CDLOD vertex stage; terrain_shadow.wgsl is an explicit material for non-authored terrain and is never an automatic recovery choice. Keep shared regolith detail and lunar photometry in the imported lunco::terrain and lunco::lunar shader modules. See the terrain rendering decision record before adding another terrain shader path.

Keep production albedo and normal rasters as authored assets. An illumination- bearing grayscale orthophoto is not intrinsic albedo: declare it as kind = "albedo" so native Rust removes its low-frequency acquisition-light field and retains stable local variation around the authored neutral regolith base. Bind the resulting albedo.png, which is lit once by the runtime sun and shadows. A calibrated reflectance raster may use texture when its colour contract is known. Do not replace an orthophoto with a hillshade, slope, or elevation-colour diagnostic to hide minification aliasing; those remain optional analysis products and their authored role/weight must stay explicit. The render binder still builds missing RGBA8 mip levels once per image asset version, off-thread and with role-aware filtering (linear-light colour, linear scalars, renormalized normals) before enabling trilinear/anisotropic sampling.

Physics parameters for a DEM generator

The dem child layer also owns the physics collider-ring lattice. Author these beside windowM, targetRes, lodViz, and colliderRing when a Twin needs a non-default contract:

For an authored rocks layer, lunco:layer:regionM is an optional half-extent in metres: omit it or leave it at 0 to cover the whole composed terrain; author a positive value only when a near-field scope is intentional. lunco:layer:density is per hectare, and the rendering-quality profile owns the total instance cap.

usda
int lunco:layer:colliderDepth = 8
int lunco:layer:colliderResolution = 49

These values are copied into the typed terrain-generation request and used by native, worker, GUI, and headless physics. They are deliberately independent of RenderingQualitySettings, camera-driven visual LOD, and targetRes; a graphics preset must never change collider tile count or resolution.

Asset paths are scene-root-relative and resolve through twin://, so they travel with the twin. The generic USD shader projection walks material:binding → Material → outputs:surface.connect → Shader and publishes one ShaderLook; the terrain source reconciler derives the typed roles from that same look. Roles are albedo, mineral, surface (packed R=rough G=AO B=rockDens), and normal.

The bound Shader also owns the render stages: info:wgsl:sourceAsset must expose @fragment, and optional info:wgsl:vertexAsset must expose @vertex. A single WGSL module may provide both. Missing or invalid stages are reported as a structured diagnostic and leave the material unbound. Rust never swaps in a neutral or terrain shader to hide a bad asset; if a Twin wants an explicit non-authored material, author that choice in USD/Rhai so it can be changed without rebuilding the renderer.

  • Every inputs:* is a live-tunable, journaled knob (networked, undoable) and the network is inspectable in usdview/Blender.
  • CONNECTED map inputs are skipped — a connected port is fed by a producer node (doc 18 Tier B), not an authored file.
  • mineral composites UNLIT after lighting, so a slope/classification drape stays readable inside shadow — its entire job.
  • albedo is the terrain colour source at its authored weight_albedo; at full weight the layered shader disables its procedural dust/mottle colour, while relief normals, roughness, AO, and photometry remain active.
  • The authored shader source and maps bind on both static and streamed terrain through the same ShaderLook; streamed LOD tiles add only their CDLOD geometry inputs, and the derived bake fills slots an authored map left empty.
  • The runtime derived bake is optional visual refinement after the DEM ground is ready. Its effective resolution is bounded by a static terrain's authored visual target, so a low-resolution static product does not pay for an invisible high-resolution map. The task is cancelled at scene teardown or when its liveness bound expires; the terrain remains usable and the status bus reports the terminal warning. This refinement status is separate from terrain tile streaming, so it cannot hide tile progress or make a presentable ground scene wait for an optional map.
  • For multi-site scenes, author these inputs inside a terrain variant and verify the composed variant through the production scene-test command; do not add a package-specific USD probe for this asset contract.

Node-graph authoring is outside this asset pipeline. Read the current multi-domain architecture before introducing a new graph owner.

Caching & staleness

  • Downloads skip when the resolved file exists with matching sha256.
  • Bakes stamp a .bakekey = sha256(source bytes ‖ effective config ‖ PIPELINE_VERSION) beside each output; a matching stamp skips the bake before the expensive decode. Changing the source, ROI, --quality, or bumping PIPELINE_VERSION (src/process.rs) rebakes exactly what changed. Never time-based.
  • The dataset registry treats that stamp as the completion boundary: a DEM output directory without .bakekey is partial and remains downloadable/ processable, even if the directory itself exists.
  • Processing roots are strict (cache, twin, or assets); an unknown root or missing required owner fails visibly. Processing uses a unique staging output and an atomic commit barrier, so cancellation cannot publish stale terrain.
  • The terrain derived bake keys through the oracle's canonical surface identity and does not re-hash the full DEM for every request.
  • A queued DEM build is an indeterminate state until its owner admits a task; do not show a numeric percentage for that scheduler hand-off. Phase changes are discrete status events and active work uses the existing progress entry.
  • Baked artifacts and the twin cache are gitignored by policy (terrain/*/materials/, any .bakekey stamp, .cache/, and extern/) — never commit downloaded or derived payloads. Keep only the Assets.toml declaration, source URL/hash, ROI, and processing configuration in Git.

Gotchas

  • *_50CM/*_2M .IMG companions are ORTHOPHOTOS (brightness), never elevation — kind = "albedo" for terrain colour, kind = "map" only for analysis/display, and never kind = "dem".
  • Confirm the DEM datum and the scene's celestial-body radius before combining terrain elevations with orbital or body-fixed coordinates. Do not encode a product-specific radius correction in the asset pipeline.
  • Heights are absolute body-datum metres: prims on a surface must be authored at the DEM's own elevation.
  • The runtime DEM reader requires square rasters; keep the scene's windowM/targetRes in step with the manifest ROI.
  • Optional QGIS/GDAL extras (custom-sun hillshade, slope ramps, contours) are external to lunco-assets; verify that the Twin supplies and documents its own tooling before invoking it.

© LunCoSim, Apache-2.0. 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 skills/geo-assets of LunCoSim/lunco-sim.

Open the folder on GitHubat commit 43f1301

Compare with similar skills

Geo Assets 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.

Geo Assets compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Geo Assets this skillLunCoSim/lunco-sim107—~5.8kAutomated safety check: PassApache-2.0
Chain Integrationshapeshift/web206—~20kAutomated safety check: NotesMIT
Game Art PipelinePersonalJarvis/PersonalJarvis159—~566Automated safety check: PassApache-2.0
Game Asset Generatorhtdt/godogen7.1k—~2.8kAutomated safety check: PassMIT
Threejs 3D Generatorvalkor-ai/loom1.2k1 repos~2.6kAutomated safety check: PassApache-2.0
2D Sprite Generator0x0funky/agent-sprite-forge4.4k—~3.6kAutomated safety check: PassMIT

Similar skills

  • Chain Integration

    shapeshift/web

    Integrate a new blockchain as a second-class citizen in ShapeShift Web.

    206 GitHub stars~20k tokensUpdated yesterday
    DevelopmentAuto-check: notes
  • Game Art Pipeline

    PersonalJarvis/PersonalJarvis

    Develop or redesign Personal Jarvis world art, buildings, characters and 3D assets through an authored Blender reference scene, runtime review and controlled asset rollout.

    159 GitHub stars~566 tokensUpdated yesterday
    Game DevelopmentAuto-check passed
  • Generates game art from text prompts: PNG images, GLB 3D models, rigged characters, animations and sprites, with background removal.

    7.1k GitHub stars~2.8k tokensUpdated 9 days ago
    Game DevelopmentAuto-check passed
  • Threejs 3D Generator

    valkor-ai/loom

    Generate, texture, rig, animate, stylize, convert, and download 3D assets for Three.js games via the Tripo API.

    1.2k GitHub starsUsed in 1 repo~2.6k tokens
    Game DevelopmentAuto-check passed
  • 2D Sprite Generator

    0x0funky/agent-sprite-forge

    Produces game-ready 2D characters, creatures, props, icons and effects as master stills, sheets or clips, and exports frames for common game engines.

    4.4k GitHub stars~3.6k tokensUpdated 4 days ago
    Game DevelopmentAuto-check passed
  • Unreal Material and VFX Workflow

    flopperam/unreal-engine-mcp

    Walks an Unreal Engine MCP agent through building materials, Niagara particle systems, Chaos destruction, and curve assets with inspect-then-edit steps.

    1.1k GitHub stars~927 tokensUpdated 3 mo ago
    Game DevelopmentAuto-check passed

More from LunCoSim/lunco-sim

All 40 skills in this repo
  • Nightly Changelog

    LunCoSim/lunco-sim

    Generate concise LunCoSim nightly GitHub release notes with platform downloads, installation guidance, an AI-agent mission prompt, and a changelog link.

    107 GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Build or repair a reusable scene component through a live LunCoSim Editor session.

    107 GitHub stars~4.4k tokensUpdated today
    Auto-check passed
  • Assembly Quality

    LunCoSim/lunco-sim

    Build or review a componentized LunCoSim USD assembly with a realistic, dimensionally checkable presentation.

    107 GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • Author Rhai Tests

    LunCoSim/lunco-sim

    Author and review LunCoSim behavioral, asset-backed, component, mission, visual, and requirements-verification tests.

    107 GitHub stars~3.5k tokensUpdated today
    Auto-check passed
  • Author Rhai Tool

    LunCoSim/lunco-sim

    Create, extend, register, or debug a reusable LunCoSim Rhai tool library for live USD authoring, component linting, inspection, or test support.

    107 GitHub stars~5.2k tokensUpdated today
    Auto-check passed
  • Author Tutorial

    LunCoSim/lunco-sim

    Author an interactive tutorial, guided lesson, onboarding flow, coach-mark tour, or objectives checklist in LunCoSim.

    107 GitHub stars~1.4k tokensUpdated today
    Auto-check passed

Questions about Geo Assets

What does Geo Assets do?

Download and process lunar geo assets (DEMs, stable material albedo, ortho/slope/shade maps, normal maps) with the LunCoSim asset pipeline — Assets.toml entries, ROI cropping, terrain layer wiring…. Geo Assets is an agent skill from LunCoSim/lunco-sim.toml entries, ROI cropping, terrain layer wiring in USD, quality presets, bake keys.

When should I use Geo Assets?

Geo Assets fits situations like: adding a terrain site to a twin; baking layer maps; debugging the asset pipeline.

How do I install Geo Assets in Claude Code?

Run `npx skills add LunCoSim/lunco-sim --skill geo-assets -a claude-code`. Or copy the skill folder (skills/geo-assets in LunCoSim/lunco-sim) into .claude/skills/geo-assets in your project. Claude Code loads it when a task matches its description.

How do I install Geo Assets in Codex?

Run `npx skills add LunCoSim/lunco-sim --skill geo-assets -a codex`. Or copy the skill folder (skills/geo-assets in LunCoSim/lunco-sim) into .agents/skills/geo-assets in your project. Codex loads it when a task matches its description.

Can I use Geo Assets 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 LunCoSim/lunco-sim --skill geo-assets -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/geo-assets, .gemini/skills/geo-assets, .github/skills/geo-assets and .opencode/skills/geo-assets in your project.

What does Geo Assets need to run?

Going by SKILL.md and its folder, Geo Assets needs the command-line tools its instructions call (cargo, kind and git).

Does Geo Assets access the network?

SKILL.md names 2 domains. In commands or code: data.lroc.im-ldi.com and pds.lroc.im-ldi.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.

Is Geo Assets 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 Geo Assets use?

Geo Assets is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Geo Assets use?

About 5.8k tokens (SKILL.md is roughly 23k 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 Geo Assets?

Skills that share tags, products or a category with Geo Assets: Chain Integration (shapeshift/web, 206 stars), Game Art Pipeline (PersonalJarvis/PersonalJarvis, 159 stars), Game Asset Generator (htdt/godogen, 7.1k stars) and Threejs 3D Generator (valkor-ai/loom, 1.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Geo Assets?

LunCoSim (a GitHub organization) maintains it in LunCoSim/lunco-sim, which has 107 GitHub stars. The repository holds 40 skills in this directory. The repository was last updated on October 10, 2026.

Source: LunCoSim/lunco-sim on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.