process-raster
SkillDev toolsProcess raster data: clip by bounding box, stack multiple bands, mosaic GeoTIFFs, or convert between raster and vector formats.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the process-raster skill
What this skill tells your AI
The instructions your AI receives, as published by opengeos/geoai-skills in skills/process-raster/SKILL.md and read by ahel’s review.
You are helping the user process geospatial raster data using geoai.
Input: $@
Follow these steps in order.
Step 1 -- Determine the operation
Parse $@ to identify the requested operation:
| Operation | Triggers | Required inputs |
|---|---|---|
clip | "clip", "crop", "subset", --bbox present | input raster + bbox |
stack | "stack", "combine bands" | list of input rasters |
mosaic | "mosaic", "merge" | input directory or list of rasters |
raster-to-vector | "to vector", "vectorize", "polygonize" | input raster |
vector-to-raster | "to raster", "rasterize", "burn" | input vector + pixel size |
If the operation is unclear from the input, ask the user to specify.
Step 2 -- Resolve input file(s)
For single-file operations (clip, raster-to-vector, vector-to-raster):
find "$PWD" -name "INPUT_FILENAME" -not -path '*/.git/*' 2>/dev/null
For multi-file operations (stack, mosaic), if a directory is given:
find "INPUT_DIR" -name "*.tif" -o -name "*.tiff" 2>/dev/null | sort
If the user recently inspected or downloaded a file and did not specify an input, check the state file for context:
STATE_DIR=""
test -f .geoai-skills/state.json && STATE_DIR=".geoai-skills"
PROJECT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || echo "$PWD")"
PROJECT_ID="$(echo "$PROJECT_ROOT" | tr '/' '-')"
test -f "$HOME/.geoai-skills/$PROJECT_ID/state.json" && STATE_DIR="$HOME/.geoai-skills/$PROJECT_ID"
If state exists, read the last inspected or downloaded file:
python3 -c "
import json
with open('STATE_DIR/state.json') as f:
state = json.load(f)
if 'last_inspected' in state:
print(f'Last inspected: {state[\"last_inspected\"][\"path\"]}')
if 'downloaded_files' in state:
for f in state['downloaded_files']:
print(f'Downloaded: {f}')
"
Step 3 -- Execute the operation
Clip by bounding box
python3 -c "
import geoai
result = geoai.clip_raster_by_bbox(
input_raster='INPUT_PATH',
output_raster='OUTPUT_PATH',
bbox=[MINX, MINY, MAXX, MAXY],
)
print(f'Clipped raster saved to: {result}')
info = geoai.get_raster_info(result)
for k, v in info.items():
print(f'{k}: {v}')
"
Default output: ./clipped_<original_name>.tif
Stack bands
python3 -c "
import geoai
result = geoai.stack_bands(
input_files=['FILE1', 'FILE2', 'FILE3'],
output_file='OUTPUT_PATH',
)
print(f'Stacked raster saved to: {result}')
info = geoai.get_raster_info(result)
for k, v in info.items():
print(f'{k}: {v}')
"
Mosaic GeoTIFFs
python3 -c "
import geoai
result = geoai.mosaic_geotiffs(
input_dir='INPUT_DIR',
output_file='OUTPUT_PATH',
)
print(f'Mosaic saved to: {result}')
info = geoai.get_raster_info(result)
for k, v in info.items():
print(f'{k}: {v}')
"
Raster to vector
python3 -c "
import geoai
gdf = geoai.raster_to_vector(
raster_path='INPUT_PATH',
output_path='OUTPUT_PATH',
)
print(f'Vectorized: {len(gdf)} features')
print(f'Saved to: OUTPUT_PATH')
print(f'Columns: {list(gdf.columns)}')
"
Default output: ./<original_name>.gpkg
Vector to raster
python3 -c "
import geoai
result = geoai.vector_to_raster(
vector_path='INPUT_PATH',
output_path='OUTPUT_PATH',
pixel_size=PIXEL_SIZE,
)
print(f'Rasterized: {result}')
info = geoai.get_raster_info(result)
for k, v in info.items():
print(f'{k}: {v}')
"
Default pixel size: 1.0 (or infer from context). Default output: ./<original_name>.tif
Replace all placeholder values with actual paths and parameters before running.
Step 4 -- Update state
If a state directory exists, update it with the output file path using the same state resolution pattern as Step 2.
Step 5 -- Report and suggest
Report:
- Operation performed
- Input and output file paths
- Key properties of the output (dimensions, CRS, band count, feature count)
Then suggest: "Use /geoai-skills:inspect-geo to examine the result in detail."
Error handling
import geoaifails -> delegate to/geoai-skills:install-geoai.- File not found -> use
findto locate, suggest corrected path. - CRS mismatch (for stack/mosaic) -> report the issue and suggest reprojecting first.
- Insufficient disk space -> report the error.
- Memory error (very large rasters) -> suggest processing in tiles or using a smaller extent.
Signals
- GitHub stars
- 30
- Forks
- 4
- Last commit
- Jul 2026
Advanced
- Catalog kind
- skill
- Gateway key
process-raster- Source
- github.com/opengeos/geoai-skills