Skip to content

gatos.paint_control

tool Debug and rendering

Opt in to paint rendering and color whole vessels, individual parts, templates, or EVA materials.

Use when
Changing vehicle or EVA appearance while preserving gatOS's explicit shader/material opt-in lifecycle.
Availability
control_enabled plus the corresponding parts or kittens runtime master; texture_* operations instead require the clutter texture store (paint_textures_enabled).

Input

FieldTypeRequirementDescription
operationstringRequiredPaint action suffix listed below; gatOS prefixes it with paint.
vessel_idstringOptional · ""Raw vessel or EVA id for vessel-, part-, and individual-kitten rules.
valuenumberOptional · 00 or 1 for enabled flags and clear triggers. For texture_bind it is the render mode: 0 = faithful (gatOS corrects the pixels so the image renders as authored — the default) and 1 = raw (upload the decoded bytes untouched, interpreted as a stock clutter texture would be).
colornumber[] | nullOptional · nullThree finite normalized sRGB channels [r,g,b], each in 0..1.
targetstring | nullOptional · nullBlend token, raw Part.Template.Id, uint part instance_id, semantic EVA material name, or — for texture_bind and texture_unbind — the stock clutter texture id, depending on operation.
filestring | nullOptional · nullUploaded image name for texture_bind, as uploaded through gatos.paint_texture. Maps to the command envelope's aux slot.

Operation call shapes

Choose an operation below. Its required payload and a complete call stay together—there is no second table to cross-reference.

parts_enabled / kittens_enabled

Canonical action: paint.parts_enabled / paint.kittens_enabled

Install or remove the relevant runtime rendering integration transactionally.

Arguments for this operation

{ operation, value: 0 | 1 }

Example

gatos.paint_control({"operation":"parts_enabled","value":1})

blend

Canonical action: paint.blend

Select the vehicle shader blend mode through target.

Arguments for this operation

{ operation: "blend", target: "multiply" | "tint" | "replace" }

Example

gatos.paint_control({"operation":"blend","target":"tint"})

global_enabled | global_color | global_clear | parts_clear

Canonical action: paint.global_* / paint.parts_clear

Manage the global vehicle rule or clear every retained vehicle rule. RGB channels are normalized 0..1.

Arguments for this operation

{ operation, value: 0 | 1 } for enabled/clear; { operation: "global_color", color: [r,g,b] } for color

Example

gatos.paint_control({"operation":"global_color","color":[0.12,0.55,0.95]})

template_enabled / template_color / template_clear

Canonical action: paint.template_*

Manage a Part.Template.Id rule named by target; color operations use color and enabled/clear use value.

Arguments for this operation

{ operation, target: part_template_id, value?: 0 | 1, color?: [r,g,b] }

Example

gatos.paint_control({"operation":"template_color","target":"FuelTankSmall","color":[0.8,0.2,0.1]})

vessel_enabled / vessel_color / vessel_clear

Canonical action: paint.vessel_*

Manage a live whole-vessel rule named by vessel_id.

Arguments for this operation

{ operation, vessel_id, value?: 0 | 1, color?: [r,g,b] }

Example

gatos.paint_control({"operation":"vessel_color","vessel_id":"Hunter","color":[0.12,0.55,0.95]})

part_enabled / part_color / part_clear

Canonical action: paint.part_*

Manage one stable uint part instance_id supplied as target within vessel_id.

Arguments for this operation

{ operation, vessel_id, target: part_instance_id_as_string, value?: 0 | 1, color?: [r,g,b] }

Example

gatos.paint_control({"operation":"part_color","vessel_id":"Hunter","target":"4123","color":[1,0.5,0]})

kitten_shared_enabled / kitten_shared_color / kitten_shared_clear / kittens_clear

Canonical action: paint.kitten_shared_* / paint.kittens_clear

Manage the shared EVA default or clear every retained EVA rule.

Arguments for this operation

{ operation, value?: 0 | 1, color?: [r,g,b] }

Example

gatos.paint_control({"operation":"kitten_shared_color","color":[0.7,0.7,1]})

kitten_shared_material_enabled / kitten_shared_material_color / kitten_shared_material_clear

Canonical action: paint.kitten_shared_material_*

Manage one shared semantic EVA material named by target.

Arguments for this operation

{ operation, target: semantic_material_name, value?: 0 | 1, color?: [r,g,b] }

Example

gatos.paint_control({"operation":"kitten_shared_material_color","target":"visor","color":[0.1,0.3,0.8]})

kitten_enabled / kitten_color / kitten_clear

Canonical action: paint.kitten_*

Manage one EVA's default rule through vessel_id.

Arguments for this operation

{ operation, vessel_id: eva_id, value?: 0 | 1, color?: [r,g,b] }

Example

gatos.paint_control({"operation":"kitten_color","vessel_id":"Valentina","color":[1,0.2,0.4]})

kitten_material_enabled / kitten_material_color / kitten_material_clear

Canonical action: paint.kitten_material_*

Manage one semantic material on one EVA through vessel_id and target.

Arguments for this operation

{ operation, vessel_id: eva_id, target: semantic_material_name, value?: 0 | 1, color?: [r,g,b] }

Example

gatos.paint_control({"operation":"kitten_material_color","vessel_id":"Valentina","target":"visor","color":[0.1,0.3,0.8]})

texture_bind

Canonical action: paint.texture_bind

Draw one stock ground-clutter texture with an uploaded image. target comes from gatos.paint_texture(operation:"catalog"); file must already be committed in the texture store. value picks the render mode: 0 = faithful (the default) rewrites the pixels so an ordinary sRGB PNG renders as authored and untinted by the biome; 1 = raw uploads them untouched for a like-for-like stock replacement. Re-binding the same pair in a different mode is a real change and re-uploads.

Arguments for this operation

{ operation: "texture_bind", target: stock_texture_id, file: uploaded_image_name, value?: 0 | 1 }

Example

gatos.paint_control({"operation":"texture_bind","target":"EarthGrassClutterDiffuse","file":"rock.png","value":0})

texture_unbind

Canonical action: paint.texture_unbind

Restore one stock ground-clutter texture; the upload itself is kept.

Arguments for this operation

{ operation: "texture_unbind", target: stock_texture_id }

Example

gatos.paint_control({"operation":"texture_unbind","target":"EarthGrassClutterDiffuse"})

texture_clear

Canonical action: paint.texture_clear

Global teardown: restore every stock ground-clutter texture, keeping the uploads.

Arguments for this operation

{ operation: "texture_clear", value: 1 }

Example

gatos.paint_control({"operation":"texture_clear","value":1})

Call example

gatos.paint_control({"operation":"vessel_color","vessel_id":"Hunter","color":[0.12,0.55,0.95]})

Result

Canonical paint command outcome correlated with the current snapshot.

Errors

  • EACCES when control is disabled; ENOENT for a missing live vessel/part/EVA; EINVAL for an unknown operation, target, flag, blend, or color.
  • EBUSY when another mod owns the global shader compiler prefix; EOPNOTSUPP when audited shader or material internals are incompatible.

Operational notes

  • Set the desired rule, then enable its rule flag and runtime master; disabling a master restores stock rendering but retains rules for re-enable.
  • Part precedence is instance > vessel > template > global > stock. EVA precedence is individual material > individual default > shared material > shared default > stock.
  • EVA shared rules use gatOS-owned clones; they do not overwrite KSA's shared stock MaterialData.
  • texture_* operations need no runtime master and are unaffected by the parts and kittens masters; binding replaces the shared texture asset, so check used_by in gatos.paint_texture(operation:"catalog") first.