{
  "definitions": [
    {
      "callable": true,
      "callees": [
        {
          "file": "core/timers/stage.timer.ts",
          "name": "fail",
          "source": {
            "href": "https://banes-lab.com/anatomy/social-share#file-social-share-core-timers-stage-timer-ts",
            "json": "https://banes-lab.com/json/source/social-share/core/timers/stage.timer.ts",
            "label": "core/timers/stage.timer.ts",
            "markdown": "https://banes-lab.com/source/social-share/core/timers/stage.timer.ts.md",
            "ref": "anatomy:file-social-share-core-timers-stage-timer-ts"
          }
        },
        {
          "file": "core/timers/stage.timer.ts",
          "name": "settle",
          "source": {
            "href": "https://banes-lab.com/anatomy/social-share#file-social-share-core-timers-stage-timer-ts",
            "json": "https://banes-lab.com/json/source/social-share/core/timers/stage.timer.ts",
            "label": "core/timers/stage.timer.ts",
            "markdown": "https://banes-lab.com/source/social-share/core/timers/stage.timer.ts.md",
            "ref": "anatomy:file-social-share-core-timers-stage-timer-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "core/adapters/image.adapter.ts",
          "name": "encodeLoop",
          "source": {
            "href": "https://banes-lab.com/anatomy/social-share#file-social-share-core-adapters-image-adapter-ts",
            "json": "https://banes-lab.com/json/source/social-share/core/adapters/image.adapter.ts",
            "label": "core/adapters/image.adapter.ts",
            "markdown": "https://banes-lab.com/source/social-share/core/adapters/image.adapter.ts.md",
            "ref": "anatomy:file-social-share-core-adapters-image-adapter-ts"
          }
        },
        {
          "file": "core/adapters/image.adapter.ts",
          "name": "gifFrom",
          "source": {
            "href": "https://banes-lab.com/anatomy/social-share#file-social-share-core-adapters-image-adapter-ts",
            "json": "https://banes-lab.com/json/source/social-share/core/adapters/image.adapter.ts",
            "label": "core/adapters/image.adapter.ts",
            "markdown": "https://banes-lab.com/source/social-share/core/adapters/image.adapter.ts.md",
            "ref": "anatomy:file-social-share-core-adapters-image-adapter-ts"
          }
        },
        {
          "file": "core/adapters/image.adapter.ts",
          "name": "videoFrom",
          "source": {
            "href": "https://banes-lab.com/anatomy/social-share#file-social-share-core-adapters-image-adapter-ts",
            "json": "https://banes-lab.com/json/source/social-share/core/adapters/image.adapter.ts",
            "label": "core/adapters/image.adapter.ts",
            "markdown": "https://banes-lab.com/source/social-share/core/adapters/image.adapter.ts.md",
            "ref": "anatomy:file-social-share-core-adapters-image-adapter-ts"
          }
        }
      ],
      "exported": false,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 35,
      "name": "runFfmpeg",
      "signature": "const runFfmpeg = async function runFfmpeg(args: readonly string[]): Promise<void> {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "core/adapters/image.adapter.ts",
          "name": "runFfmpeg",
          "source": {
            "href": "https://banes-lab.com/anatomy/social-share#file-social-share-core-adapters-image-adapter-ts",
            "json": "https://banes-lab.com/json/source/social-share/core/adapters/image.adapter.ts",
            "label": "core/adapters/image.adapter.ts",
            "markdown": "https://banes-lab.com/source/social-share/core/adapters/image.adapter.ts.md",
            "ref": "anatomy:file-social-share-core-adapters-image-adapter-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "core/coordinators/card.coordinator.ts",
          "name": "captureProfile",
          "source": {
            "href": "https://banes-lab.com/anatomy/social-share#file-social-share-core-coordinators-card-coordinator-ts",
            "json": "https://banes-lab.com/json/source/social-share/core/coordinators/card.coordinator.ts",
            "label": "core/coordinators/card.coordinator.ts",
            "markdown": "https://banes-lab.com/source/social-share/core/coordinators/card.coordinator.ts.md",
            "ref": "anatomy:file-social-share-core-coordinators-card-coordinator-ts"
          }
        }
      ],
      "exported": true,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 78,
      "name": "videoFrom",
      "signature": "export const videoFrom = async function videoFrom(master: string, size: ImageSize): Promise<Buffer> {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "core/adapters/image.adapter.ts",
          "name": "runFfmpeg",
          "source": {
            "href": "https://banes-lab.com/anatomy/social-share#file-social-share-core-adapters-image-adapter-ts",
            "json": "https://banes-lab.com/json/source/social-share/core/adapters/image.adapter.ts",
            "label": "core/adapters/image.adapter.ts",
            "markdown": "https://banes-lab.com/source/social-share/core/adapters/image.adapter.ts.md",
            "ref": "anatomy:file-social-share-core-adapters-image-adapter-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "core/coordinators/card.coordinator.ts",
          "name": "captureProfile",
          "source": {
            "href": "https://banes-lab.com/anatomy/social-share#file-social-share-core-coordinators-card-coordinator-ts",
            "json": "https://banes-lab.com/json/source/social-share/core/coordinators/card.coordinator.ts",
            "label": "core/coordinators/card.coordinator.ts",
            "markdown": "https://banes-lab.com/source/social-share/core/coordinators/card.coordinator.ts.md",
            "ref": "anatomy:file-social-share-core-coordinators-card-coordinator-ts"
          }
        }
      ],
      "exported": true,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 101,
      "name": "gifFrom",
      "signature": "export const gifFrom = async function gifFrom(video: string, size: ImageSize, timeline: Timeline): Promise<Buffer> {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "core/adapters/image.adapter.ts",
          "name": "encodeLoop",
          "source": {
            "href": "https://banes-lab.com/anatomy/social-share#file-social-share-core-adapters-image-adapter-ts",
            "json": "https://banes-lab.com/json/source/social-share/core/adapters/image.adapter.ts",
            "label": "core/adapters/image.adapter.ts",
            "markdown": "https://banes-lab.com/source/social-share/core/adapters/image.adapter.ts.md",
            "ref": "anatomy:file-social-share-core-adapters-image-adapter-ts"
          }
        }
      ],
      "exported": false,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 51,
      "name": "frameName",
      "signature": "const frameName = function frameName(index: number): string {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "core/adapters/image.adapter.ts",
          "name": "frameName",
          "source": {
            "href": "https://banes-lab.com/anatomy/social-share#file-social-share-core-adapters-image-adapter-ts",
            "json": "https://banes-lab.com/json/source/social-share/core/adapters/image.adapter.ts",
            "label": "core/adapters/image.adapter.ts",
            "markdown": "https://banes-lab.com/source/social-share/core/adapters/image.adapter.ts.md",
            "ref": "anatomy:file-social-share-core-adapters-image-adapter-ts"
          }
        },
        {
          "file": "core/adapters/image.adapter.ts",
          "name": "runFfmpeg",
          "source": {
            "href": "https://banes-lab.com/anatomy/social-share#file-social-share-core-adapters-image-adapter-ts",
            "json": "https://banes-lab.com/json/source/social-share/core/adapters/image.adapter.ts",
            "label": "core/adapters/image.adapter.ts",
            "markdown": "https://banes-lab.com/source/social-share/core/adapters/image.adapter.ts.md",
            "ref": "anatomy:file-social-share-core-adapters-image-adapter-ts"
          }
        }
      ],
      "callers": [],
      "exported": true,
      "flow": "entry",
      "kind": "lexical_declaration",
      "line": 55,
      "name": "encodeLoop",
      "signature": "export const encodeLoop = async function encodeLoop(frames: readonly Buffer[], folder: string): Promise<string> {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 25,
      "name": "ENDLESS",
      "signature": "const ENDLESS = \"0\";"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 26,
      "name": "ONCE",
      "signature": "const ONCE = \"-1\";"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 27,
      "name": "MISSING_CODE",
      "signature": "const MISSING_CODE = \"ENOENT\";"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 28,
      "name": "FRAME_PATTERN",
      "signature": "const FRAME_PATTERN = `${FRAME_PREFIX}%0${String(FRAME_DIGITS)}d${FRAME_EXTENSION}`;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 29,
      "name": "RATE",
      "signature": "const RATE = `${String(MILLISECONDS)}/${String(OUTPUT_FRAME_MS)}`;"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 31,
      "name": "hasCode",
      "signature": "const hasCode = function hasCode(error: unknown): error is { code: unknown } {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 42,
      "name": "reason",
      "signature": "const reason ="
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 61,
      "name": "video",
      "signature": "const video = join(folder, VIDEO_FILE);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 79,
      "name": "even",
      "signature": "const even = evenSizeOf(size);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 102,
      "name": "output",
      "signature": "const output = `${video}.${String(size.width)}x${String(size.height)}.gif`;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 103,
      "name": "scale",
      "signature": "const scale = `scale=${String(size.width)}:${String(size.height)}:flags=lanczos`;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 104,
      "name": "palette",
      "signature": "const palette = `split[source][copy];[source]palettegen=stats_mode=${GIF_PALETTE_STATS}:max_colors=${String(GIF_COLORS)}[palette];[copy][palette]paletteuse=dither=${GIF_DITHER}:diff_mode=rectangle`;"
    }
  ],
  "document": null,
  "findings": [],
  "generated": false,
  "href": "https://banes-lab.com/anatomy/social-share#file-social-share-core-adapters-image-adapter-ts",
  "language": "typescript",
  "layer": "infrastructure",
  "name": "image.adapter.ts",
  "path": "core/adapters/image.adapter.ts",
  "ref": "anatomy:file-social-share-core-adapters-image-adapter-ts",
  "relations": [
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/social-share#folder-social-share-core-adapters",
          "json": "https://banes-lab.com/json/anatomy/social-share/folder-social-share-core-adapters",
          "label": "core/adapters",
          "markdown": "https://banes-lab.com/anatomy/social-share/folder-social-share-core-adapters.md",
          "ref": "chapter:/anatomy/social-share#folder-social-share-core-adapters"
        }
      ],
      "relation": "contained-in"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/social-share#file-social-share-core-timers-stage-timer-ts",
          "json": "https://banes-lab.com/json/source/social-share/core/timers/stage.timer.ts",
          "label": "core/timers/stage.timer.ts",
          "markdown": "https://banes-lab.com/source/social-share/core/timers/stage.timer.ts.md",
          "ref": "anatomy:file-social-share-core-timers-stage-timer-ts"
        }
      ],
      "relation": "uses"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/social-share#file-social-share-core-coordinators-card-coordinator-ts",
          "json": "https://banes-lab.com/json/source/social-share/core/coordinators/card.coordinator.ts",
          "label": "core/coordinators/card.coordinator.ts",
          "markdown": "https://banes-lab.com/source/social-share/core/coordinators/card.coordinator.ts.md",
          "ref": "anatomy:file-social-share-core-coordinators-card-coordinator-ts"
        }
      ],
      "relation": "used-by"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/social-share#folder-social-share-core-adapters",
          "json": "https://banes-lab.com/json/anatomy/social-share/folder-social-share-core-adapters",
          "label": "core/adapters",
          "markdown": "https://banes-lab.com/anatomy/social-share/folder-social-share-core-adapters.md",
          "ref": "chapter:/anatomy/social-share#folder-social-share-core-adapters"
        },
        {
          "href": "https://banes-lab.com/anatomy/social-share#folder-social-share-core-coordinators",
          "json": "https://banes-lab.com/json/anatomy/social-share/folder-social-share-core-coordinators",
          "label": "core/coordinators",
          "markdown": "https://banes-lab.com/anatomy/social-share/folder-social-share-core-coordinators.md",
          "ref": "chapter:/anatomy/social-share#folder-social-share-core-coordinators"
        },
        {
          "href": "https://banes-lab.com/anatomy/social-share#folder-social-share-core-timers",
          "json": "https://banes-lab.com/json/anatomy/social-share/folder-social-share-core-timers",
          "label": "core/timers",
          "markdown": "https://banes-lab.com/anatomy/social-share/folder-social-share-core-timers.md",
          "ref": "chapter:/anatomy/social-share#folder-social-share-core-timers"
        }
      ],
      "relation": "linked-from"
    }
  ],
  "slots": {
    "concern": "adapter",
    "subject": "image",
    "variant": null
  },
  "stats": {
    "bytes": 3951,
    "callable": 6,
    "definitions": 17,
    "edges": 6,
    "exported": 8,
    "files": 1,
    "findings": {},
    "flows": {
      "relay": 3,
      "leaf": 1,
      "entry": 1,
      "isolated": 12
    },
    "lines": {
      "blank": 7,
      "code": 108,
      "total": 115
    }
  },
  "summary": "108 lines of code and 17 definitions.",
  "text": "https://banes-lab.com/source/social-share/core/adapters/image.adapter.ts.txt",
  "tree": "social-share",
  "siblings": {
    "next": {
      "href": "https://banes-lab.com/anatomy/social-share#file-social-share-core-adapters-stage-adapter-ts",
      "json": "https://banes-lab.com/json/source/social-share/core/adapters/stage.adapter.ts",
      "label": "core/adapters/stage.adapter.ts",
      "markdown": "https://banes-lab.com/source/social-share/core/adapters/stage.adapter.ts.md",
      "ref": "anatomy:file-social-share-core-adapters-stage-adapter-ts"
    },
    "previous": null
  },
  "up": {
    "href": null,
    "json": "https://banes-lab.com/json/api/source/social-share/core/adapters",
    "label": "core/adapters",
    "markdown": "https://banes-lab.com/api/source/social-share/core/adapters.md",
    "ref": "api:source/social-share/core/adapters"
  }
}
