{
  "assertions": [
    "no_motion",
    "uses(webgl)"
  ],
  "attempts": 3,
  "attribution": "\u201ca self portrait in three point perspective Revise: the same geometric\u2026\u201d \u2014 sketchgen entry 1578, prompted by profcarroll, written by qwen3-coder:30b-a3b-q4_K_M under the treatment rules file. https://profcarroll.github.io/sketchgen-gallery/e/1578/ Licensed CC BY 4.0.",
  "brief": "The canvas presents a complex, highly abstracted self-portrait constructed entirely from interlocking, geometric planar facets. These planes create a deep, fragmented illusion of depth, defining the figure through architecture rather than representation. The form is dramatically articulated by hyper-defined, directional shadow lines that traverse the surfaces, carving out the volumes and emphasizing the sense of space. The resulting geometry is visually impactful, presenting a fixed, sculpted moment where light and shadow intensely dictate the presence and volume of the abstract self.",
  "completion_tokens": 2593,
  "created_utc": "2026-09-24T08:54:24Z",
  "entry_id": 1578,
  "executor": "qwen3-coder:30b-a3b-q4_K_M",
  "executor_prompt_version": "executor-v3",
  "gate": [
    {
      "assertions": {
        "no_motion": true,
        "uses(webgl)": true
      },
      "attempt": 1,
      "checks": {
        "audio_context_running": null,
        "console_clean": false,
        "frame_advancing": false,
        "frame_budget": true,
        "is_looping": true,
        "sound_lib_ok": null
      },
      "completion_tokens": 752,
      "evidence": "Names this sketch shadows (checked before the gate ran):\npreflight: `box()` is called inside a loop inside `draw()`, so this sketch builds one lit mesh per item per frame; draw the items as one `beginShape(POINTS)` or build the mesh once in `setup()` with `buildGeometry()` (sketch.js line 47)\npreflight: your variable `line` hides p5's `line()` function; rename it (sketch.js line 55)\npreflight: `line()` inside a loop inside `draw()` is immediate mode in WEBGL \u2014 every call builds and uploads its own vertex buffer; batch them into one `beginShape(LINES)` with `vertex()` per point (sketch.js line 56)\n\ngate exit 1: checks failed: console_clean, frame_advancing\n\nFixed checks that failed:\n- console_clean = false\n- frame_advancing = false\n    frame_advancing compares frameCount at frame 84 of the 120-frame idle window (1) with the end of it (1); at load it was 0\n\nConsole (1 error line, first 1 shown):\n- [pageerror] line is not a function\n\nRuntime state the gate read:\n- frame_advancing compares frameCount at frame 84 of the 120-frame idle window (1) with the end of it (1); at load it was 0\n",
      "exit": 1,
      "ghost": {
        "events": 40,
        "ms": 4000,
        "played": 40,
        "script": "wander",
        "source": "default"
      },
      "given": {
        "kind": "parent",
        "lines": 47,
        "sha256": "b77dfd29d110084a40eb4ae70f65c9494b9a374fa48793d9dd174f41cd73bb29",
        "shown": true
      },
      "model": "qwen3-coder:30b-a3b-q4_K_M",
      "ms_per_frame": 0.1,
      "num_ctx": 16384,
      "preload_s": 0.047,
      "prompt_tokens": 2854,
      "resources_loaded": [],
      "rules_file": "treatment",
      "source": "attempt-1",
      "total_s": 3.414,
      "wall_s": 63.154
    },
    {
      "assertions": {
        "no_motion": true,
        "uses(webgl)": true
      },
      "attempt": 2,
      "checks": {
        "audio_context_running": null,
        "console_clean": false,
        "frame_advancing": false,
        "frame_budget": true,
        "is_looping": true,
        "sound_lib_ok": null
      },
      "completion_tokens": 1106,
      "evidence": "Names this sketch shadows (checked before the gate ran):\npreflight: `box()` is called inside a loop inside `draw()`, so this sketch builds one lit mesh per item per frame; draw the items as one `beginShape(POINTS)` or build the mesh once in `setup()` with `buildGeometry()` (sketch.js line 49)\n\ngate exit 1: checks failed: console_clean, frame_advancing\n\nFixed checks that failed:\n- console_clean = false\n- frame_advancing = false\n    frame_advancing compares frameCount at frame 84 of the 120-frame idle window (0) with the end of it (0); at load it was 0\n\nConsole (1 error line, first 1 shown):\n- [pageerror] e is not a function\n\nRuntime state the gate read:\n- frame_advancing compares frameCount at frame 84 of the 120-frame idle window (0) with the end of it (0); at load it was 0\n",
      "exit": 1,
      "ghost": {
        "events": 40,
        "ms": 4000,
        "played": 40,
        "script": "wander",
        "source": "default"
      },
      "given": {
        "kind": "previous",
        "lines": 62,
        "sha256": "85f6ca6cbf9ef2e851118039f0652a14879c1b23485f75e51eca507d248c988e",
        "shown": true
      },
      "model": "qwen3-coder:30b-a3b-q4_K_M",
      "ms_per_frame": 0.1,
      "num_ctx": 16384,
      "preload_s": 0.026,
      "prompt_tokens": 3367,
      "resources_loaded": [],
      "rules_file": "treatment",
      "source": "attempt-2",
      "total_s": 2.618,
      "wall_s": 97.926
    },
    {
      "assertions": {
        "no_motion": true,
        "uses(webgl)": true
      },
      "attempt": 3,
      "checks": {
        "audio_context_running": null,
        "console_clean": true,
        "frame_advancing": true,
        "frame_budget": true,
        "is_looping": true,
        "sound_lib_ok": null
      },
      "completion_tokens": 735,
      "evidence": null,
      "exit": 0,
      "ghost": {
        "events": 40,
        "ms": 4000,
        "played": 40,
        "script": "wander",
        "source": "default"
      },
      "given": {
        "kind": "previous",
        "lines": 105,
        "sha256": "4601320cd24e2d1e6694d8495a687836c495da91882896b9d9b4d9901d49f3f6",
        "shown": true
      },
      "model": "qwen3-coder:30b-a3b-q4_K_M",
      "ms_per_frame": 29.3,
      "num_ctx": 16384,
      "preload_s": 0.047,
      "prompt_tokens": 3658,
      "resources_loaded": [],
      "rules_file": "treatment",
      "source": "attempt-3",
      "total_s": 18.615,
      "wall_s": 79.689
    }
  ],
  "ghost": {
    "by": "default",
    "events": 40,
    "script": "wander"
  },
  "job_id": 1589,
  "last_error": null,
  "licence": "CC BY 4.0",
  "lineage": {
    "children": [],
    "critique": "the same highly abstracted self-portrait constructed from interlocking, planar facets, and this time the specular highlights transition from sharp points to broad, sweeping gradients.",
    "critique_by": "gemma4:e4b",
    "generation": 1,
    "inherits_source": false,
    "parent_entry_id": 1433,
    "root_entry_id": 1433
  },
  "loads": [],
  "note": null,
  "off_node": [],
  "planner": "gemma4:e4b",
  "planner_prompt_version": "planner-v2",
  "process": null,
  "prompt": "a self portrait in three point perspective\n\nRevise: the same geometrically rendered self-portrait, and this time the interlocking planes reveal subtle shifts in color saturation and reflectivity.\n\nRevise: the same geometrically abstracted self-portrait, and this time the interlocking planes reveal crisp, faceted edges that catch the ambient light dramatically.\n\nRevise: the same geometrically abstracted self-portrait, and this time the interlocking planes emphasize the depth through hyper-defined shadow lines that carve out the geometry.\n\nRevise: the same geometrically abstracted self-portrait, and this time the interlocking planes emphasize the depth through hyper-defined shadow lines that carve out the geometry.\n\nRevise: the same geometrically abstracted self-portrait, and this time the planar facets reflect the light source more intensely, increasing the dramatic contrast across the form.\n\nRevise: the same highly abstracted self-portrait, and this time the interlocking planes emphasize the depth through hyper-defined, directional shadow lines that cut across the form.\n\nRevise: the same highly abstracted, geometrically rendered self-portrait, and this time the interlocking planar facets reveal minute textural variations in their specular highlights.\n\nRevise: the same highly abstracted self-portrait constructed from interlocking, planar facets, and this time the specular highlights transition from sharp points to broad, sweeping gradients.",
  "prompt_tokens": 9879,
  "publish_commit": "56084b4033d79327919d129dc679862f9ac542c9",
  "published_utc": "2026-09-26T18:42:08Z",
  "rules_file": "treatment",
  "seed": 1,
  "shape": "VM.Standard.A1.Flex 16/96",
  "source": {
    "attempts": [
      "attempt-1",
      "attempt-2",
      "attempt-3"
    ],
    "entry": "https://profcarroll.github.io/sketchgen-gallery/e/1578/",
    "index_html": "sketch/index.html",
    "repository": "https://github.com/profcarroll/sketchgen-gallery/tree/main/e/1578",
    "sketch_js": "sketch/sketch.js"
  },
  "state": "published",
  "statement": "This sketch constructs an abstract self-portrait using interlocking geometric facets that create a sense of depth through architectural form. The composition is built from a series of boxes arranged in space, each contributing to the overall fragmented silhouette while maintaining structural coherence. Directional shadow lines traverse these surfaces, carving volumes and emphasizing the three-dimensional quality of the form. Through careful lighting and the interplay between solid geometry and dark shadow, the piece presents a sculpted moment where light and shadow define presence and volume. The work avoids particle systems or complex animations in favor of a fixed architectural abstraction that conveys mass through planar surfaces and dramatic chiaroscuro.",
  "submitted_by": "profcarroll",
  "wall_s": 240.769
}
