Skip to content

Report schema ​

Every render batch produces report.json and report.csv in the output folder.

report.json ​

json
{
  "tool": "lakreet-swarm",
  "version": "0.2.0",
  "effectcraft": "0.8.0",
  "startedAt": "2026-10-14T10:00:00.000Z",
  "finishedAt": "2026-10-14T10:05:30.000Z",
  "template": "templates/main.ectemplate",
  "data": "data/input.csv",
  "summary": {
    "total": 100,
    "succeeded": 98,
    "failed": 2,
    "skipped": 0
  },
  "rows": [
    {
      "index": 1,
      "where": "line 2",
      "status": "ok",
      "output": "out/1-Budi.mp4",
      "seconds": 15.5,
      "error": null
    },
    {
      "index": 5,
      "where": "line 6",
      "status": "failed",
      "output": null,
      "seconds": 30.1,
      "error": "EffectCraft render failed with code 1"
    }
  ]
}

Fields ​

FieldTypeDescription
toolstringAlways "lakreet-swarm"
versionstringlakreet-swarm version
effectcraftstring/nullEffectCraft version (from doctor)
startedAtISO 8601Batch start time
finishedAtISO 8601Batch end time
templatestringTemplate path
datastringData file path
summaryobjectCounts
rows[]arrayPer-row details

Row object ​

FieldTypeDescription
indexnumber1-based row number
wherestring"line N" (CSV) or "item N" (JSON)
statusstring"ok", "failed", "skipped"
outputstring/nullOutput file path (relative to out dir)
secondsnumber/nullRender duration
errorstring/nullError message if failed

report.csv ​

csv
index,where,status,output,seconds,error
1,line 2,ok,out/1-Budi.mp4,15.5,
5,line 6,failed,,30.1,"EffectCraft render failed with code 1"

Columns ​

ColumnDescription
index1-based row number
whereSource location (line/item)
statusok/failed/skipped
outputOutput file (empty if failed/skipped)
secondsDuration (empty if failed/skipped)
errorError message (quoted if contains comma/quote/newline)

NDJSON events (--json) ​

Streaming events to stdout.

Event: start ​

json
{ "event": "start", "total": 100 }

Event: row ​

json
{
  "event": "row",
  "index": 1,
  "where": "line 2",
  "status": "ok",
  "output": "out/1-Budi.mp4",
  "seconds": 15.5,
  "error": null
}

Event: done ​

json
{
  "event": "done",
  "total": 100,
  "succeeded": 98,
  "failed": 2,
  "skipped": 0
}

Real example (from internal/facts/example-report.json) ​

json
{
  "tool": "lakreet-swarm",
  "version": "0.2.0",
  "effectcraft": null,
  "startedAt": "2026-10-14T11:57:19.180Z",
  "finishedAt": "2026-10-14T11:58:37.595Z",
  "template": "examples/title2.ectemplate",
  "data": "examples/data.csv",
  "summary": { "total": 5, "succeeded": 5, "failed": 0, "skipped": 0 },
  "rows": [
    {
      "index": 1,
      "where": "line 2",
      "status": "ok",
      "output": "out/1-Budi.mp4",
      "seconds": 15.5,
      "error": null
    },
    {
      "index": 2,
      "where": "line 3",
      "status": "ok",
      "output": "out/2-Sari.mp4",
      "seconds": 15.3,
      "error": null
    },
    {
      "index": 3,
      "where": "line 4",
      "status": "ok",
      "output": "out/3-Andi.mp4",
      "seconds": 16.0,
      "error": null
    },
    {
      "index": 4,
      "where": "line 5",
      "status": "ok",
      "output": "out/4-Rina.mp4",
      "seconds": 16.5,
      "error": null
    },
    {
      "index": 5,
      "where": "line 6",
      "status": "ok",
      "output": "out/5-A_B.mp4",
      "seconds": 15.1,
      "error": null
    }
  ]
}

Next steps ​

Independent project. Not affiliated with the ArtCraft team or the EffectCraft project.