graph_icsGitHub
Guide chapters

Text

Choose whether text needs a clear rectangular area, a graph that hugs its actual glyphs, or a network that forms the letters themselves.

Three ways to use text

Text Box

Measured rectangle: useful for clear labels, but excludes spaces between letters.

Measured rectangle: useful for clear labels, but excludes spaces between letters.

640 nodes of 650 requested. Stop: attempt_budget_exhausted. 208/212 occupied tiles; 99.5% of tile area has a node. This is a coarse coverage measure, not solid ink coverage.

JSON scene · YAML scene · SVG

Settings and command
graph-ics render --config docs/scenes/text-box.yaml --output examples/output/text-box.png
{
  "version": 1,
  "palette": "porcelain",
  "width": 600,
  "height": 360,
  "nodes": 650,
  "seed": 7,
  "growth": {
    "total_attempts": 35000,
    "refill_passes": 2,
    "coverage": {
      "tile_size": 30,
      "reseed_attempts": 1200
    }
  },
  "texts": [
    {
      "content": "graph_ics",
      "x": 300,
      "y": 210,
      "size": 95,
      "align": "center",
      "bold": true,
      "padding": 2,
      "color": "#a64152",
      "exclusion_mode": "box"
    }
  ]
}

Text Hug

Glyph exclusion: branches can enter spaces between letters and sufficiently large letter holes.

Glyph exclusion: branches can enter spaces between letters and sufficiently large letter holes.

650 nodes of 650 requested. Stop: target_reached. 227/240 occupied tiles; 97.9% of tile area has a node. This is a coarse coverage measure, not solid ink coverage.

JSON scene · YAML scene · SVG

Settings and command
graph-ics render --config docs/scenes/text-hug.yaml --output examples/output/text-hug.png
{
  "version": 1,
  "palette": "porcelain",
  "width": 600,
  "height": 360,
  "nodes": 650,
  "seed": 7,
  "growth": {
    "total_attempts": 35000,
    "refill_passes": 2,
    "coverage": {
      "tile_size": 30,
      "reseed_attempts": 1200
    }
  },
  "texts": [
    {
      "content": "graph_ics",
      "x": 300,
      "y": 210,
      "size": 95,
      "align": "center",
      "bold": true,
      "padding": 2,
      "color": "#a64152",
      "exclusion_mode": "glyph"
    }
  ]
}

Graph Lettering

The graph itself forms the letters. No text fill is drawn; counters remain empty.

The graph itself forms the letters. No text fill is drawn; counters remain empty.

2277 nodes of 3200 requested. Stop: attempt_budget_exhausted. 422/510 occupied tiles; 98.7% of tile area has a node. This is a coarse coverage measure, not solid ink coverage.

JSON scene · YAML scene · SVG

Settings and command
graph-ics render --config docs/scenes/graph-lettering.yaml --output examples/output/graph-lettering.png
{
  "version": 1,
  "palette": "porcelain",
  "width": 600,
  "height": 360,
  "nodes": 3200,
  "seed": 7,
  "growth": {
    "fill_area": true,
    "total_attempts": 180000,
    "seed_attempts": 2000,
    "refill_passes": 2,
    "coverage": {
      "tile_size": 20,
      "max_tiles": 12000,
      "reseed_attempts": 6000,
      "reseed_interval": 100,
      "seed_components": true
    }
  },
  "seeds": 30,
  "text_region": {
    "content": "graph_ics",
    "x": 0,
    "y": 260,
    "size": 300,
    "bold": true,
    "padding": 0
  },
  "style": {
    "node_outer_radius": 2,
    "node_inner_radius": 1,
    "node_buffer": 0.3,
    "edge_thickness": 0.7,
    "edge_node_distance": 0.5,
    "edge_length_min": 3,
    "edge_length_max": 7
  }
}

Fit the graph to the letter strokes

A stroke must be wider than twice the node outer radius to fit a node. A connection also needs both endpoint radii, endpoint gaps and its visible length. Enlarge the text or shrink the geometry for finer strokes. Glyph holes remain excluded when the graph forms the letters.

Fonts are resolved locally: use the same installed font to reproduce contours. Complex scripts and narrow glyph features need visual checking.

Text fields, glyph modes and sizing examples