{
  "schemaVersion": "5.0",
  "lastUpdated": "2026-05-30T05:59:49Z",
  "registryUrl": "https://cartridges.machinefabric.com/manifest",
  "channels": {
    "release": {
      "cartridges": {}
    },
    "nightly": {
      "cartridges": {
        "pdfcartridge": {
          "name": "pdfcartridge",
          "description": "PDF page renderer, page-text disbinder, and PDF content inspector",
          "author": "https://github.com/machinefabric",
          "pageUrl": "https://github.com/machinefabric/pdfcartridge",
          "teamId": "P336JK947M",
          "minAppVersion": "1.0.0",
          "categories": [],
          "tags": [],
          "cap_groups": [
            {
              "name": "pdf-formats",
              "caps": [
                {
                  "urn": "cap:effect=none",
                  "title": "Identity",
                  "command": "identity",
                  "cap_description": "The categorical identity morphism. Echoes input as output unchanged. Mandatory in every capability set.",
                  "args": [
                    {
                      "media_urn": "media:",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:"
                        }
                      ]
                    }
                  ],
                  "output": {
                    "media_urn": "media:",
                    "output_description": "The input data, unchanged",
                    "is_sequence": false
                  }
                },
                {
                  "urn": "cap:in=media:pdf;out=\"media:image;png\";render-page-image",
                  "title": "Render PDF Page Images",
                  "command": "render-page-image",
                  "cap_description": "Render PNG page images from one or more PDF pages.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:pdf"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the PDF file to process"
                    },
                    {
                      "media_urn": "media:page-image-width;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--width"
                        }
                      ],
                      "arg_description": "Width of the rendered page image in pixels",
                      "default_value": 800
                    },
                    {
                      "media_urn": "media:page-image-height;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--height"
                        }
                      ],
                      "arg_description": "Height of the rendered page image in pixels",
                      "default_value": 1200
                    },
                    {
                      "media_urn": "media:index-range;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--index-range"
                        }
                      ],
                      "arg_description": "Index range (e.g., '1', '1-5', '3-')",
                      "default_value": "1-"
                    }
                  ]
                },
                {
                  "urn": "cap:disbind;in=media:pdf;out=\"media:page;plain-text;textable;txt\"",
                  "title": "Disbind PDF Into Page Text",
                  "command": "disbind",
                  "cap_description": "Extract each PDF page as plain page text.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:pdf"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the PDF file to process"
                    },
                    {
                      "media_urn": "media:index-range;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--index-range"
                        }
                      ],
                      "arg_description": "Index range to extract (e.g., '1-5' or '10-')",
                      "default_value": "1-"
                    }
                  ]
                },
                {
                  "urn": "cap:disbind-to-pdf;in=media:pdf;out=media:pdf",
                  "title": "Disbind PDF Into Per-Page PDFs",
                  "command": "disbind-to-pdf",
                  "cap_description": "Split a PDF into a sequence of one-page PDFs (one item per page).",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:pdf"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the PDF file to process"
                    },
                    {
                      "media_urn": "media:index-range;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--index-range"
                        }
                      ],
                      "arg_description": "Index range to extract (e.g., '1-5' or '10-')",
                      "default_value": "1-"
                    }
                  ],
                  "output": {
                    "media_urn": "media:pdf",
                    "output_description": "Per-page PDFs, one item per page",
                    "is_sequence": true
                  }
                },
                {
                  "urn": "cap:bind;in=media:pdf;out=media:pdf",
                  "title": "Bind PDFs",
                  "command": "bind",
                  "cap_description": "Concatenate a sequence of PDFs into a single multi-page PDF.",
                  "args": [
                    {
                      "media_urn": "media:pdf",
                      "required": true,
                      "is_sequence": true,
                      "sources": [
                        {
                          "stdin": "media:pdf"
                        }
                      ],
                      "arg_description": "Sequence of PDF files to concatenate"
                    }
                  ],
                  "output": {
                    "media_urn": "media:pdf",
                    "output_description": "Single concatenated PDF",
                    "is_sequence": false
                  }
                }
              ],
              "adapter_urns": [
                "media:pdf"
              ]
            }
          ],
          "latestVersion": "0.192.490-nightly",
          "versions": {
            "0.191.486-nightly": {
              "releaseDate": "2026-05-17T22:55:33Z",
              "changelog": [
                "Initial release"
              ],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "pdfcartridge-0.191.486-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/pdfcartridge/0.191.486-nightly/pdfcartridge-0.191.486-nightly.pkg",
                    "sha256": "921df995ffa24916c00f1d8ac2f28cdef7f539c5142db4df1acc44c5f7e8fec9",
                    "size": 5661442
                  }
                }
              ]
            },
            "0.192.490-nightly": {
              "releaseDate": "2026-05-29T15:44:14Z",
              "changelog": [],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "pdfcartridge-0.192.490-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/pdfcartridge/0.192.490-nightly/pdfcartridge-0.192.490-nightly.pkg",
                    "sha256": "06b40cae46cedaa04c4779f2c43be528caad51dc16e99497d37e2bbd3a609c8e",
                    "size": 5662325
                  }
                }
              ]
            }
          }
        },
        "candlecartridge": {
          "name": "candlecartridge",
          "description": "Candle ML inference cartridge for MachineFabricEngine",
          "author": "https://github.com/machinefabric",
          "pageUrl": "https://github.com/machinefabric/candlecartridge",
          "teamId": "P336JK947M",
          "minAppVersion": "1.0.0",
          "categories": [],
          "tags": [],
          "cap_groups": [
            {
              "name": "candle-inference",
              "caps": [
                {
                  "urn": "cap:effect=none",
                  "title": "Identity",
                  "command": "identity"
                },
                {
                  "urn": "cap:candle;generate-embeddings;in=media:textable;ml-model;out=\"media:embedding-vector;record;textable\"",
                  "title": "Text Embeddings",
                  "command": "generate",
                  "cap_description": "Generate text embeddings using BERT sentence transformers.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:textable"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the text file to generate embeddings for"
                    },
                    {
                      "media_urn": "media:model-spec;candle;textable;embeddings;repo-safetensors;tokenizer-unified",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--model"
                        }
                      ],
                      "arg_description": "Model spec with repo prefix",
                      "default_value": "hf:BAAI/bge-small-en-v1.5?include=*.json,*.safetensors"
                    },
                    {
                      "media_urn": "media:chunk-size;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--chunk-size"
                        }
                      ],
                      "arg_description": "Chunk size in words",
                      "default_value": 400
                    },
                    {
                      "media_urn": "media:chunk-overlap;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--chunk-overlap"
                        }
                      ],
                      "arg_description": "Chunk overlap in words",
                      "default_value": 50
                    },
                    {
                      "media_urn": "media:hf-token;secret;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--hf-token"
                        }
                      ],
                      "arg_description": "HuggingFace bearer token. Required when targeting a gated repository (license-protected models)."
                    }
                  ]
                },
                {
                  "urn": "cap:candle;embeddings-dimensions;in=\"media:candle;embeddings;model-spec;repo-safetensors;textable;tokenizer-unified\";ml-model;out=\"media:integer;model-dim;numeric;textable\"",
                  "title": "Embedding Dimensions",
                  "command": "dimensions",
                  "cap_description": "Get embedding dimension for a model.",
                  "args": [
                    {
                      "media_urn": "media:model-spec;candle;textable;embeddings;repo-safetensors;tokenizer-unified",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--model"
                        },
                        {
                          "stdin": "media:model-spec;candle;textable;embeddings;repo-safetensors;tokenizer-unified"
                        }
                      ],
                      "arg_description": "Model spec with repo prefix",
                      "default_value": "hf:BAAI/bge-small-en-v1.5?include=*.json,*.safetensors"
                    },
                    {
                      "media_urn": "media:hf-token;secret;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--hf-token"
                        }
                      ],
                      "arg_description": "HuggingFace bearer token. Required when targeting a gated repository (license-protected models)."
                    }
                  ]
                },
                {
                  "urn": "cap:candle;generate-image-embeddings;in=\"media:image;png\";ml-model;out=\"media:embedding-vector;record;textable\"",
                  "title": "Image Embeddings",
                  "command": "image-embed",
                  "cap_description": "Generate image embeddings using CLIP models.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:image;png"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the image file"
                    },
                    {
                      "media_urn": "media:model-spec;candle;image-embeddings;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--model"
                        }
                      ],
                      "arg_description": "CLIP Model spec with repo prefix",
                      "default_value": "hf:facebook/metaclip-b32-fullcc2.5b?include=*.json,*.safetensors,pytorch_model.bin"
                    },
                    {
                      "media_urn": "media:hf-token;secret;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--hf-token"
                        }
                      ],
                      "arg_description": "HuggingFace bearer token. Required when targeting a gated repository (license-protected models)."
                    }
                  ]
                },
                {
                  "urn": "cap:candle;describe-image;in=\"media:image;png\";ml-model;out=\"media:image-description;plain-text;textable;txt\"",
                  "title": "Describe Image",
                  "command": "describe_image",
                  "cap_description": "Generate image descriptions using BLIP models.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:image;png"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the image file"
                    },
                    {
                      "media_urn": "media:model-spec;candle;textable;vision;repo-safetensors;tokenizer-unified",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--model"
                        }
                      ],
                      "arg_description": "BLIP Model spec with repo prefix",
                      "default_value": "hf:Salesforce/blip-image-captioning-large?include=*.json,*.safetensors"
                    },
                    {
                      "media_urn": "media:prompt;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--prompt"
                        }
                      ],
                      "arg_description": "Optional prompt to guide image description"
                    },
                    {
                      "media_urn": "media:hf-token;secret;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--hf-token"
                        }
                      ],
                      "arg_description": "HuggingFace bearer token. Required when targeting a gated repository (license-protected models)."
                    }
                  ]
                },
                {
                  "urn": "cap:candle;in=\"media:audio;speech;wav\";ml-model;out=\"media:record;textable;transcription\";transcribe",
                  "title": "Audio Transcription",
                  "command": "transcribe",
                  "cap_description": "Transcribe audio using Whisper models.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:audio;speech;wav"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the audio file (WAV format)"
                    },
                    {
                      "media_urn": "media:model-spec;candle;textable;transcription;repo-safetensors;tokenizer-unified",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--model"
                        }
                      ],
                      "arg_description": "Whisper Model spec with repo prefix",
                      "default_value": "hf:openai/whisper-large-v3-turbo?include=*.json,*.safetensors"
                    },
                    {
                      "media_urn": "media:language;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--language"
                        }
                      ],
                      "arg_description": "Language code (e.g., 'en', 'es', 'fr')",
                      "default_value": "en"
                    },
                    {
                      "media_urn": "media:timestamps;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--timestamps"
                        }
                      ],
                      "arg_description": "Include timestamps in output",
                      "default_value": false
                    },
                    {
                      "media_urn": "media:hf-token;secret;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--hf-token"
                        }
                      ],
                      "arg_description": "HuggingFace bearer token. Required when targeting a gated repository (license-protected models)."
                    }
                  ]
                },
                {
                  "urn": "cap:candle;generate-text;in=media:textable;llm;ml-model;out=\"media:plain-text;textable;txt\"",
                  "title": "Generate Text with LLM (Candle)",
                  "command": "run_inference",
                  "cap_description": "Generate text using candle Mistral models with safetensors backend.",
                  "args": [
                    {
                      "media_urn": "media:textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:textable"
                        },
                        {
                          "position": 0
                        }
                      ]
                    },
                    {
                      "media_urn": "media:system-prompt;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--system-prompt"
                        }
                      ],
                      "arg_description": "System prompt frame (applied via chat template when present)",
                      "default_value": "You are a helpful assistant. Respond to the user's input with a useful, accurate, and concise reply. If the input is a document or excerpt, treat it as the subject of the user's request and respond about it."
                    },
                    {
                      "media_urn": "media:model-spec;candle;textable;llm;repo-safetensors;tokenizer-unified",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--model-spec"
                        }
                      ],
                      "arg_description": "Candle model specification (HuggingFace repo or local path)",
                      "default_value": "hf:Qwen/Qwen3-1.7B?include=*.json,*.safetensors"
                    },
                    {
                      "media_urn": "media:hf-token;secret;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--hf-token"
                        }
                      ],
                      "arg_description": "HuggingFace bearer token. Required when targeting a gated repository (license-protected models)."
                    },
                    {
                      "media_urn": "media:max-tokens;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--max-tokens"
                        }
                      ],
                      "arg_description": "Maximum number of tokens to generate",
                      "default_value": 512
                    },
                    {
                      "media_urn": "media:temperature;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--temperature"
                        }
                      ],
                      "arg_description": "Sampling temperature (0.0-2.0)",
                      "default_value": 0.7
                    },
                    {
                      "media_urn": "media:top-p;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--top-p"
                        }
                      ],
                      "arg_description": "Top-p (nucleus) sampling parameter",
                      "default_value": 0.9
                    },
                    {
                      "media_urn": "media:seed;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--seed"
                        }
                      ],
                      "arg_description": "Random seed for reproducibility",
                      "default_value": 42
                    }
                  ]
                },
                {
                  "urn": "cap:candle;in=\"media:json;llm-generation-request;record\";llm;llm-inference;ml-model;out=\"media:llm-text-stream;ndjson\"",
                  "title": "LLM Inference (Candle)",
                  "command": "inference",
                  "cap_description": "LLM inference with NDJSON streaming output using candle Mistral models.",
                  "args": [
                    {
                      "media_urn": "media:llm-generation-request;json;record",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:llm-generation-request;json;record"
                        }
                      ]
                    },
                    {
                      "media_urn": "media:hf-token;secret;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--hf-token"
                        }
                      ],
                      "arg_description": "HuggingFace bearer token. Required when targeting a gated repository (license-protected models)."
                    }
                  ]
                }
              ]
            }
          ],
          "latestVersion": "0.184.613-nightly",
          "versions": {
            "0.181.601-nightly": {
              "releaseDate": "2026-05-17T22:56:39Z",
              "changelog": [
                "Initial release"
              ],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "candlecartridge-0.181.601-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/candlecartridge/0.181.601-nightly/candlecartridge-0.181.601-nightly.pkg",
                    "sha256": "b1bb1131d953a57d696ad4cf93a08c0571427eeae0e0b31676ff0a195dee4570",
                    "size": 5757861
                  }
                }
              ]
            },
            "0.182.605-nightly": {
              "releaseDate": "2026-05-21T01:45:20Z",
              "changelog": [],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "candlecartridge-0.182.605-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/candlecartridge/0.182.605-nightly/candlecartridge-0.182.605-nightly.pkg",
                    "sha256": "57cb6495ccf89a1b5f332d6d1df482a74e8257f7b7d771be1a3841a743ffb4cf",
                    "size": 5757709
                  }
                }
              ]
            },
            "0.183.609-nightly": {
              "releaseDate": "2026-05-29T15:45:22Z",
              "changelog": [],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "candlecartridge-0.183.609-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/candlecartridge/0.183.609-nightly/candlecartridge-0.183.609-nightly.pkg",
                    "sha256": "8056f95bee8f64efd0d5f63f6e21fd651a77e80bed521a6ccac504a22f3fd454",
                    "size": 5758432
                  }
                }
              ]
            },
            "0.184.613-nightly": {
              "releaseDate": "2026-05-30T05:56:38Z",
              "changelog": [],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "candlecartridge-0.184.613-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/candlecartridge/0.184.613-nightly/candlecartridge-0.184.613-nightly.pkg",
                    "sha256": "c0ea54dcaf5267b657449b3db18d561f6a343b75abc11d03f825fdbcca75a83b",
                    "size": 5757347
                  }
                }
              ]
            }
          }
        },
        "txtcartridge": {
          "name": "txtcartridge",
          "description": "Plain text file page-image renderer and text format content inspector",
          "author": "https://github.com/machinefabric",
          "pageUrl": "https://github.com/machinefabric/txtcartridge",
          "teamId": "P336JK947M",
          "minAppVersion": "1.0.0",
          "categories": [],
          "tags": [],
          "cap_groups": [
            {
              "name": "text-formats",
              "caps": [
                {
                  "urn": "cap:effect=none",
                  "title": "Identity",
                  "command": "identity",
                  "cap_description": "The categorical identity morphism. Echoes input as output unchanged. Mandatory in every capability set.",
                  "args": [
                    {
                      "media_urn": "media:",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:"
                        }
                      ]
                    }
                  ],
                  "output": {
                    "media_urn": "media:",
                    "output_description": "The input data, unchanged",
                    "is_sequence": false
                  }
                },
                {
                  "urn": "cap:in=\"media:textable;txt\";out=\"media:image;png\";render-page-image",
                  "title": "Render TXT Page Image",
                  "command": "render-page-image",
                  "cap_description": "Render a page-like PNG image from txt files.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:txt;textable"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the txt file to process"
                    },
                    {
                      "media_urn": "media:page-image-width;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--width"
                        }
                      ],
                      "arg_description": "Width of the rendered page image in pixels",
                      "default_value": 800
                    },
                    {
                      "media_urn": "media:page-image-height;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--height"
                        }
                      ],
                      "arg_description": "Height of the rendered page image in pixels",
                      "default_value": 1200
                    }
                  ]
                },
                {
                  "urn": "cap:in=\"media:rst;textable\";out=\"media:image;png\";render-page-image",
                  "title": "Render RST Page Image",
                  "command": "render-page-image",
                  "cap_description": "Render a page-like PNG image from rst files.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:rst;textable"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the rst file to process"
                    },
                    {
                      "media_urn": "media:page-image-width;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--width"
                        }
                      ],
                      "arg_description": "Width of the rendered page image in pixels",
                      "default_value": 800
                    },
                    {
                      "media_urn": "media:page-image-height;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--height"
                        }
                      ],
                      "arg_description": "Height of the rendered page image in pixels",
                      "default_value": 1200
                    }
                  ]
                },
                {
                  "urn": "cap:in=\"media:log;textable\";out=\"media:image;png\";render-page-image",
                  "title": "Render LOG Page Image",
                  "command": "render-page-image",
                  "cap_description": "Render a page-like PNG image from log files.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:log;textable"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the log file to process"
                    },
                    {
                      "media_urn": "media:page-image-width;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--width"
                        }
                      ],
                      "arg_description": "Width of the rendered page image in pixels",
                      "default_value": 800
                    },
                    {
                      "media_urn": "media:page-image-height;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--height"
                        }
                      ],
                      "arg_description": "Height of the rendered page image in pixels",
                      "default_value": 1200
                    }
                  ]
                },
                {
                  "urn": "cap:in=\"media:md;textable\";out=\"media:image;png\";render-page-image",
                  "title": "Render MD Page Image",
                  "command": "render-page-image",
                  "cap_description": "Render a page-like PNG image from md files.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:md;textable"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the md file to process"
                    },
                    {
                      "media_urn": "media:page-image-width;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--width"
                        }
                      ],
                      "arg_description": "Width of the rendered page image in pixels",
                      "default_value": 800
                    },
                    {
                      "media_urn": "media:page-image-height;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--height"
                        }
                      ],
                      "arg_description": "Height of the rendered page image in pixels",
                      "default_value": 1200
                    }
                  ]
                },
                {
                  "urn": "cap:concat;in=media:textable;out=media:textable",
                  "title": "Concat Text",
                  "command": "concat",
                  "cap_description": "Concatenate a sequence of textable items into a single textable. The optional --separator string is inserted between items (default: \"\\n\").",
                  "args": [
                    {
                      "media_urn": "media:textable",
                      "required": true,
                      "is_sequence": true,
                      "sources": [
                        {
                          "stdin": "media:textable"
                        }
                      ],
                      "arg_description": "Sequence of textable items to concatenate"
                    },
                    {
                      "media_urn": "media:separator;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--separator"
                        }
                      ],
                      "arg_description": "String inserted between adjacent items (default: \"\\n\")",
                      "default_value": "\n"
                    }
                  ],
                  "output": {
                    "media_urn": "media:textable",
                    "output_description": "Concatenated text",
                    "is_sequence": false
                  }
                }
              ],
              "adapter_urns": [
                "media:txt",
                "media:plain-text",
                "media:md",
                "media:rst",
                "media:log",
                "media:org",
                "media:latex",
                "media:html",
                "media:css",
                "media:scss",
                "media:sass",
                "media:less",
                "media:javascript",
                "media:typescript",
                "media:jsx",
                "media:tsx",
                "media:python",
                "media:rust",
                "media:go",
                "media:java",
                "media:kotlin",
                "media:scala",
                "media:c",
                "media:c-header",
                "media:cpp",
                "media:cpp-header",
                "media:csharp",
                "media:swift",
                "media:ruby",
                "media:php",
                "media:shell",
                "media:bash",
                "media:zsh",
                "media:fish",
                "media:sql",
                "media:r",
                "media:lua",
                "media:perl",
                "media:dart",
                "media:elixir",
                "media:erlang",
                "media:haskell",
                "media:clojure",
                "media:vue",
                "media:svelte",
                "media:zig",
                "media:nim",
                "media:julia",
                "media:ocaml",
                "media:fsharp",
                "media:vb",
                "media:powershell",
                "media:graphql",
                "media:protobuf-schema",
                "media:ini",
                "media:properties",
                "media:env",
                "media:dockerfile",
                "media:makefile",
                "media:cmake",
                "media:dot",
                "media:gitignore",
                "media:dockerignore",
                "media:editorconfig",
                "media:srt",
                "media:vtt",
                "media:ass"
              ]
            }
          ],
          "latestVersion": "0.153.395-nightly",
          "versions": {
            "0.152.391-nightly": {
              "releaseDate": "2026-05-17T22:57:30Z",
              "changelog": [
                "Initial release"
              ],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "txtcartridge-0.152.391-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/txtcartridge/0.152.391-nightly/txtcartridge-0.152.391-nightly.pkg",
                    "sha256": "678afc463c416acc81b68a6f2a95b732920f9f4e68e13df02d16d8697ef7f709",
                    "size": 2913560
                  }
                }
              ]
            },
            "0.153.395-nightly": {
              "releaseDate": "2026-05-29T15:46:23Z",
              "changelog": [],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "txtcartridge-0.153.395-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/txtcartridge/0.153.395-nightly/txtcartridge-0.153.395-nightly.pkg",
                    "sha256": "518d4c12e100fd69d1fd90ff86188705f491b4cb6c071ffc67aa628b04e4e248",
                    "size": 2913191
                  }
                }
              ]
            }
          }
        },
        "ggufcartridge": {
          "name": "ggufcartridge",
          "description": "GGUF model inference cartridge with content inspection",
          "author": "https://github.com/machinefabric",
          "pageUrl": "https://github.com/machinefabric/ggufcartridge",
          "teamId": "P336JK947M",
          "minAppVersion": "1.0.0",
          "categories": [],
          "tags": [],
          "cap_groups": [
            {
              "name": "gguf-models",
              "caps": [
                {
                  "urn": "cap:effect=none",
                  "title": "Identity",
                  "command": "identity",
                  "cap_description": "The categorical identity morphism. Echoes input as output unchanged. Mandatory in every capability set.",
                  "args": [
                    {
                      "media_urn": "media:",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:"
                        }
                      ]
                    }
                  ],
                  "output": {
                    "media_urn": "media:",
                    "output_description": "The input data, unchanged",
                    "is_sequence": false
                  }
                },
                {
                  "urn": "cap:gguf;in=\"media:json;llm-generation-request;record\";llm;llm-inference;ml-model;out=\"media:llm-text-stream;ndjson\"",
                  "title": "LLM Text Generation",
                  "command": "inference",
                  "cap_description": "Generate text using GGUF models. Output is NDJSON streaming tokens.",
                  "args": [
                    {
                      "media_urn": "media:llm-generation-request;json;record",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:llm-generation-request;json;record"
                        }
                      ]
                    },
                    {
                      "media_urn": "media:hf-token;secret;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--hf-token"
                        }
                      ],
                      "arg_description": "HuggingFace bearer token. Required when targeting a gated repository."
                    }
                  ]
                },
                {
                  "urn": "cap:constrained;gguf;in=\"media:json;llm-generation-request;record\";llm;llm-inference-constrained;ml-model;out=\"media:llm-text-stream;ndjson\"",
                  "title": "Constrained LLM Generation",
                  "command": "inference-constrained",
                  "cap_description": "Generate constrained text using LLGuidance (JSON schema, regex, grammar).",
                  "args": [
                    {
                      "media_urn": "media:hf-token;secret;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--hf-token"
                        }
                      ],
                      "arg_description": "HuggingFace bearer token. Required when targeting a gated repository."
                    },
                    {
                      "media_urn": "media:llm-generation-request;json;record",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:llm-generation-request;json;record"
                        }
                      ]
                    }
                  ]
                },
                {
                  "urn": "cap:gguf;in=\"media:json;llm-generation-request;record\";llm;llm-vocab;ml-model;out=\"media:json;llm-vocab-response;record\"",
                  "title": "Get Model Vocabulary",
                  "command": "vocab",
                  "cap_description": "Extract vocabulary tokens from a GGUF model for constraint initialization.",
                  "args": [
                    {
                      "media_urn": "media:llm-generation-request;json;record",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:llm-generation-request;json;record"
                        }
                      ]
                    },
                    {
                      "media_urn": "media:hf-token;secret;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--hf-token"
                        }
                      ],
                      "arg_description": "HuggingFace bearer token. Required when targeting a gated repository."
                    }
                  ]
                },
                {
                  "urn": "cap:gguf;in=\"media:json;llm-generation-request;record\";llm;llm-model-info;ml-model;out=\"media:json;llm-model-info;record\"",
                  "title": "Get Model Info",
                  "command": "info",
                  "cap_description": "Query metadata and capabilities of a GGUF model.",
                  "args": [
                    {
                      "media_urn": "media:llm-generation-request;json;record",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:llm-generation-request;json;record"
                        }
                      ]
                    },
                    {
                      "media_urn": "media:hf-token;secret;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--hf-token"
                        }
                      ],
                      "arg_description": "HuggingFace bearer token. Required when targeting a gated repository."
                    }
                  ]
                },
                {
                  "urn": "cap:generate-text;gguf;in=media:textable;llm;ml-model;out=\"media:plain-text;textable;txt\"",
                  "title": "Generate Text with LLM (GGUF)",
                  "command": "run_inference",
                  "cap_description": "Generate text using GGUF models with llama.cpp backend.",
                  "args": [
                    {
                      "media_urn": "media:textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:textable"
                        },
                        {
                          "position": 0
                        }
                      ]
                    },
                    {
                      "media_urn": "media:system-prompt;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--system-prompt"
                        }
                      ],
                      "arg_description": "System prompt frame (applied via chat template when present)",
                      "default_value": "You are a helpful assistant. Respond to the user's input with a useful, accurate, and concise reply. If the input is a document or excerpt, treat it as the subject of the user's request and respond about it."
                    },
                    {
                      "media_urn": "media:model-spec;gguf;textable;llm;tokenizer-embedded-gguf",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--model-spec"
                        }
                      ],
                      "arg_description": "GGUF model specification (HuggingFace repo or local path)",
                      "default_value": "hf:unsloth/Qwen3-4B-Instruct-2507-GGUF?include=Qwen3-4B-Instruct-2507-Q4_K_M.gguf"
                    },
                    {
                      "media_urn": "media:max-tokens;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--max-tokens"
                        }
                      ],
                      "arg_description": "Maximum number of tokens to generate",
                      "default_value": 512
                    },
                    {
                      "media_urn": "media:temperature;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--temperature"
                        }
                      ],
                      "arg_description": "Sampling temperature (0.0-2.0)",
                      "default_value": 0.7
                    },
                    {
                      "media_urn": "media:top-k;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--top-k"
                        }
                      ],
                      "arg_description": "Top-k sampling parameter",
                      "default_value": 40
                    },
                    {
                      "media_urn": "media:top-p;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--top-p"
                        }
                      ],
                      "arg_description": "Top-p (nucleus) sampling parameter",
                      "default_value": 0.9
                    },
                    {
                      "media_urn": "media:min-p;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--min-p"
                        }
                      ],
                      "arg_description": "Min-p sampling parameter",
                      "default_value": 0.05
                    },
                    {
                      "media_urn": "media:seed;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--seed"
                        }
                      ],
                      "arg_description": "Random seed for reproducibility",
                      "default_value": 42
                    },
                    {
                      "media_urn": "media:max-context-length;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--max-context-length"
                        }
                      ],
                      "arg_description": "Maximum context length",
                      "default_value": 4096
                    },
                    {
                      "media_urn": "media:batch-size;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--batch-size"
                        }
                      ],
                      "arg_description": "Batch size for processing",
                      "default_value": 2048
                    },
                    {
                      "media_urn": "media:hf-token;secret;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--hf-token"
                        }
                      ],
                      "arg_description": "HuggingFace bearer token. Required when targeting a gated repository."
                    }
                  ]
                },
                {
                  "urn": "cap:generate-embeddings;gguf;in=media:textable;ml-model;out=\"media:embedding-vector;record;textable\"",
                  "title": "Generate Embeddings",
                  "command": "embeddings",
                  "cap_description": "Generate text embeddings using GGUF embedding models.",
                  "args": [
                    {
                      "media_urn": "media:model-spec;gguf;textable;embeddings;tokenizer-embedded-gguf",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--model-spec"
                        }
                      ],
                      "arg_description": "GGUF model specification (HuggingFace repo or local path)",
                      "default_value": "hf:ggml-org/embeddinggemma-300M-qat-q4_0-GGUF?include=embeddinggemma-300M-qat-Q4_0.gguf"
                    },
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:textable"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to text file to generate embeddings from"
                    },
                    {
                      "media_urn": "media:chunk-size;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--chunk-size"
                        }
                      ],
                      "arg_description": "Chunk size in words for splitting input text",
                      "default_value": 400
                    },
                    {
                      "media_urn": "media:chunk-overlap;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--chunk-overlap"
                        }
                      ],
                      "arg_description": "Chunk overlap in words when splitting input text",
                      "default_value": 50
                    },
                    {
                      "media_urn": "media:batch-size;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--batch-size"
                        }
                      ],
                      "arg_description": "Token batch size for model inference (must accommodate tokenized chunk)",
                      "default_value": 2048
                    },
                    {
                      "media_urn": "media:hf-token;secret;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--hf-token"
                        }
                      ],
                      "arg_description": "HuggingFace bearer token. Required when targeting a gated repository."
                    }
                  ]
                },
                {
                  "urn": "cap:embeddings-dimensions;gguf;in=\"media:embeddings;gguf;model-spec;textable;tokenizer-embedded-gguf\";ml-model;out=\"media:integer;model-dim;numeric;textable\"",
                  "title": "Embedding Dimensions",
                  "command": "dimensions",
                  "cap_description": "Get embedding dimension for a GGUF embedding model.",
                  "args": [
                    {
                      "media_urn": "media:model-spec;gguf;textable;embeddings;tokenizer-embedded-gguf",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--model"
                        },
                        {
                          "stdin": "media:model-spec;gguf;textable;embeddings;tokenizer-embedded-gguf"
                        }
                      ],
                      "arg_description": "Model spec (HuggingFace repo or local path)",
                      "default_value": "hf:ggml-org/embeddinggemma-300M-qat-q4_0-GGUF?include=embeddinggemma-300M-qat-Q4_0.gguf"
                    },
                    {
                      "media_urn": "media:hf-token;secret;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--hf-token"
                        }
                      ],
                      "arg_description": "HuggingFace bearer token. Required when targeting a gated repository."
                    }
                  ]
                },
                {
                  "urn": "cap:describe-image;gguf;in=\"media:image;png\";ml-model;out=\"media:image-description;plain-text;textable;txt\";vision",
                  "title": "Describe Image",
                  "command": "describe_image",
                  "cap_description": "Generate detailed image descriptions using GGUF multimodal models (LLaVA, BakLLaVA).",
                  "args": [
                    {
                      "media_urn": "media:model-spec;gguf;textable;vision;tokenizer-embedded-gguf",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--model-spec"
                        }
                      ],
                      "arg_description": "GGUF vision model specification (HuggingFace repo or local path)",
                      "default_value": "hf:ggml-org/gemma-3-4b-it-GGUF?include=gemma-3-4b-it-Q4_K_M.gguf,mmproj-model-f16.gguf"
                    },
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:image;png"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the image file to analyze"
                    },
                    {
                      "media_urn": "media:textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--prompt"
                        }
                      ],
                      "arg_description": "Text prompt for the image analysis",
                      "default_value": "Describe this image in detail."
                    },
                    {
                      "media_urn": "media:max-tokens;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--max-tokens"
                        }
                      ],
                      "arg_description": "Maximum number of tokens to generate",
                      "default_value": 256
                    },
                    {
                      "media_urn": "media:temperature;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--temperature"
                        }
                      ],
                      "arg_description": "Sampling temperature (0.0-2.0)",
                      "default_value": 0.6
                    },
                    {
                      "media_urn": "media:hf-token;secret;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--hf-token"
                        }
                      ],
                      "arg_description": "HuggingFace bearer token. Required when targeting a gated repository."
                    }
                  ]
                },
                {
                  "urn": "cap:gguf;in=\"media:image;png\";ml-model;ocr;out=\"media:extracted-text;plain-text;textable;txt\";read-text",
                  "title": "OCR (GGUF)",
                  "command": "ocr",
                  "cap_description": "Extract verbatim text from an image with a GGUF OCR vision model (default GLM-OCR).",
                  "args": [
                    {
                      "media_urn": "media:model-spec;gguf;ocr;textable;tokenizer-embedded-gguf",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--model-spec"
                        }
                      ],
                      "arg_description": "GGUF OCR model specification (HuggingFace repo or local path)",
                      "default_value": "hf:ggml-org/GLM-OCR-GGUF?include=GLM-OCR-Q8_0.gguf,mmproj-GLM-OCR-Q8_0.gguf"
                    },
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:image;png"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the image file to transcribe"
                    },
                    {
                      "media_urn": "media:textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--prompt"
                        }
                      ],
                      "arg_description": "Directive prompt for the OCR model (e.g. \"OCR\", \"OCR markdown\", \"OCR HTML table\")",
                      "default_value": "OCR"
                    },
                    {
                      "media_urn": "media:max-tokens;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--max-tokens"
                        }
                      ],
                      "arg_description": "Maximum number of tokens to generate (OCR output is often long)",
                      "default_value": 1024
                    },
                    {
                      "media_urn": "media:temperature;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--temperature"
                        }
                      ],
                      "arg_description": "Sampling temperature (0.0-2.0). Keep at 0.0 for deterministic transcription.",
                      "default_value": 0.0
                    },
                    {
                      "media_urn": "media:hf-token;secret;textable",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--hf-token"
                        }
                      ],
                      "arg_description": "HuggingFace bearer token. Required when targeting a gated repository."
                    }
                  ]
                }
              ],
              "adapter_urns": [
                "media:gguf;model"
              ]
            }
          ],
          "latestVersion": "0.205.724-nightly",
          "versions": {
            "0.201.709-nightly": {
              "releaseDate": "2026-05-17T22:58:29Z",
              "changelog": [
                "Initial release"
              ],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "ggufcartridge-0.201.709-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/ggufcartridge/0.201.709-nightly/ggufcartridge-0.201.709-nightly.pkg",
                    "sha256": "583e95d4667fa15bbcc2cfd7062e0f4c90c3f72737b91d9b24891a6bebd511cb",
                    "size": 3480512
                  }
                }
              ]
            },
            "0.202.712-nightly": {
              "releaseDate": "2026-05-20T01:41:41Z",
              "changelog": [],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "ggufcartridge-0.202.712-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/ggufcartridge/0.202.712-nightly/ggufcartridge-0.202.712-nightly.pkg",
                    "sha256": "45f6e527ac85c35884d5ec2fb5771cd797d19f52187110c38b54d5481e086655",
                    "size": 3480045
                  }
                }
              ]
            },
            "0.203.716-nightly": {
              "releaseDate": "2026-05-21T01:46:14Z",
              "changelog": [],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "ggufcartridge-0.203.716-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/ggufcartridge/0.203.716-nightly/ggufcartridge-0.203.716-nightly.pkg",
                    "sha256": "dfe25bd60db1a9c90d6d05d32ca05075eae60a914bab62f96992d1aa0139a67b",
                    "size": 3480233
                  }
                }
              ]
            },
            "0.204.720-nightly": {
              "releaseDate": "2026-05-29T15:47:21Z",
              "changelog": [],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "ggufcartridge-0.204.720-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/ggufcartridge/0.204.720-nightly/ggufcartridge-0.204.720-nightly.pkg",
                    "sha256": "2ca8daaf00d94cbf47ae2e945aad8ca99cdb1e082c4defb66dfec25f370469a3",
                    "size": 3480081
                  }
                }
              ]
            },
            "0.205.724-nightly": {
              "releaseDate": "2026-05-30T05:57:32Z",
              "changelog": [],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "ggufcartridge-0.205.724-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/ggufcartridge/0.205.724-nightly/ggufcartridge-0.205.724-nightly.pkg",
                    "sha256": "bb42d735dee19d8e52fd1b588f8c68aa33d167061cf81b5a62923f7d9cdd8f69",
                    "size": 3480020
                  }
                }
              ]
            }
          }
        },
        "mlxcartridge": {
          "name": "mlxcartridge",
          "description": "MLX inference cartridge for MachineFabricEngine - LLM, Vision, and Embeddings on Apple Silicon",
          "author": "https://github.com/machinefabric",
          "pageUrl": "https://cartridges.machinefabric.com/nightly/mlxcartridge/0.158.862-nightly/mlxcartridge-0.158.862-nightly.pkg",
          "teamId": "P336JK947M",
          "minAppVersion": "1.0.0",
          "categories": [],
          "tags": [],
          "cap_groups": [
            {
              "name": "mlx-inference",
              "adapter_urns": [],
              "caps": [
                {
                  "urn": "cap:effect=none",
                  "title": "Identity",
                  "args": [],
                  "command": "identity"
                },
                {
                  "urn": "cap:in=\"media:textable\";llm;ml-model;mlx;generate-text;out=\"media:plain-text;textable;txt\"",
                  "cap_description": "Generate text using MLX-based LLM models on Apple Silicon",
                  "title": "Generate Text with LLM (MLX)",
                  "args": [
                    {
                      "required": true,
                      "sources": [
                        {
                          "stdin": "media:textable"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "is_sequence": false,
                      "media_urn": "media:textable",
                      "arg_description": "Input text prompt for generation"
                    },
                    {
                      "required": false,
                      "media_urn": "media:system-prompt;textable",
                      "is_sequence": false,
                      "arg_description": "System prompt frame (applied via chat template when present)",
                      "default_value": "You are a helpful assistant. Respond to the user's input with a useful, accurate, and concise reply. If the input is a document or excerpt, treat it as the subject of the user's request and respond about it.",
                      "sources": [
                        {
                          "cli_flag": "--system-prompt"
                        }
                      ]
                    },
                    {
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--model-spec"
                        }
                      ],
                      "arg_description": "MLX model specification (HuggingFace model ID or local path)",
                      "default_value": "hf:mlx-community/Qwen3-4B-Instruct-2507-4bit",
                      "required": false,
                      "media_urn": "media:model-spec;mlx;textable;llm"
                    },
                    {
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--max-tokens"
                        }
                      ],
                      "arg_description": "Maximum number of tokens to generate",
                      "default_value": 512,
                      "required": false,
                      "media_urn": "media:max-tokens;textable;numeric"
                    },
                    {
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--temperature"
                        }
                      ],
                      "arg_description": "Sampling temperature (0.0-2.0)",
                      "default_value": 0.7,
                      "required": false,
                      "media_urn": "media:temperature;textable;numeric"
                    },
                    {
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--top-p"
                        }
                      ],
                      "arg_description": "Top-p (nucleus) sampling parameter",
                      "default_value": 0.9,
                      "required": false,
                      "media_urn": "media:top-p;textable;numeric"
                    },
                    {
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--repetition-penalty"
                        }
                      ],
                      "arg_description": "Repetition penalty",
                      "default_value": 1.1,
                      "required": false,
                      "media_urn": "media:repetition-penalty;textable;numeric"
                    },
                    {
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--seed"
                        }
                      ],
                      "arg_description": "Random seed for reproducibility",
                      "default_value": 0,
                      "required": true,
                      "media_urn": "media:seed;textable;numeric"
                    },
                    {
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--hf-token"
                        }
                      ],
                      "arg_description": "HuggingFace bearer token. Required when targeting a gated repository.",
                      "required": false,
                      "media_urn": "media:hf-token;secret;textable"
                    }
                  ],
                  "command": "run_inference"
                },
                {
                  "command": "inference",
                  "title": "LLM Text Generation (MLX)",
                  "cap_description": "Generate text using MLX models on Apple Silicon. Output is NDJSON streaming tokens.",
                  "urn": "cap:in=\"media:llm-generation-request;json;record\";llm;ml-model;mlx;llm-inference;out=\"media:llm-text-stream;ndjson\"",
                  "args": [
                    {
                      "arg_description": "The generation request containing prompt, model spec, and parameters",
                      "required": true,
                      "sources": [
                        {
                          "stdin": "media:llm-generation-request;json;record"
                        }
                      ],
                      "media_urn": "media:llm-generation-request;json;record",
                      "is_sequence": false
                    },
                    {
                      "arg_description": "HuggingFace bearer token. Required when targeting a gated repository.",
                      "required": false,
                      "sources": [
                        {
                          "cli_flag": "--hf-token"
                        }
                      ],
                      "media_urn": "media:hf-token;secret;textable",
                      "is_sequence": false
                    }
                  ]
                },
                {
                  "command": "describe_image",
                  "title": "Describe Image (MLX)",
                  "cap_description": "Generate detailed image descriptions using MLX-based vision-language models on Apple Silicon",
                  "urn": "cap:in=\"media:image;png\";ml-model;mlx;describe-image;out=\"media:image-description;plain-text;textable;txt\";vision",
                  "args": [
                    {
                      "default_value": "hf:mlx-community/Qwen3-VL-4B-Instruct-4bit",
                      "arg_description": "Path to MLX vision model directory",
                      "required": false,
                      "sources": [
                        {
                          "cli_flag": "--model"
                        }
                      ],
                      "media_urn": "media:model-spec;mlx;textable;vision",
                      "is_sequence": false
                    },
                    {
                      "arg_description": "Path to the image file to describe (local path or HTTP(S) URL)",
                      "required": true,
                      "sources": [
                        {
                          "stdin": "media:image;png"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "media_urn": "media:file-path;textable",
                      "is_sequence": false
                    },
                    {
                      "default_value": "Describe this image in detail.",
                      "arg_description": "Text prompt for the image description",
                      "required": false,
                      "sources": [
                        {
                          "cli_flag": "--prompt"
                        }
                      ],
                      "media_urn": "media:textable",
                      "is_sequence": false
                    },
                    {
                      "default_value": "You are a helpful assistant. Respond to the user's input with a useful, accurate, and concise reply. If the input is a document or excerpt, treat it as the subject of the user's request and respond about it.",
                      "arg_description": "System prompt frame (applied via chat template when present)",
                      "required": false,
                      "sources": [
                        {
                          "cli_flag": "--system-prompt"
                        }
                      ],
                      "media_urn": "media:system-prompt;textable",
                      "is_sequence": false
                    },
                    {
                      "default_value": 256,
                      "arg_description": "Maximum number of tokens to generate",
                      "required": false,
                      "sources": [
                        {
                          "cli_flag": "--max-tokens"
                        }
                      ],
                      "media_urn": "media:max-tokens;textable;numeric",
                      "is_sequence": false
                    },
                    {
                      "arg_description": "HuggingFace bearer token. Required when targeting a gated repository.",
                      "required": false,
                      "sources": [
                        {
                          "cli_flag": "--hf-token"
                        }
                      ],
                      "media_urn": "media:hf-token;secret;textable",
                      "is_sequence": false
                    }
                  ]
                },
                {
                  "command": "generate_embeddings",
                  "title": "Generate Vector Embeddings (MLX)",
                  "cap_description": "Generate vector embeddings from text using MLX-based models on Apple Silicon",
                  "urn": "cap:mlx;in=\"media:textable\";ml-model;generate-embeddings;out=\"media:embedding-vector;textable;record\"",
                  "args": [
                    {
                      "default_value": "hf:mlx-community/embeddinggemma-300m-4bit",
                      "arg_description": "Path to MLX embedding model directory",
                      "required": false,
                      "sources": [
                        {
                          "cli_flag": "--model"
                        }
                      ],
                      "media_urn": "media:model-spec;mlx;textable;embeddings",
                      "is_sequence": false
                    },
                    {
                      "arg_description": "Path to text file to generate embeddings from",
                      "required": true,
                      "sources": [
                        {
                          "stdin": "media:textable"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "media_urn": "media:file-path;textable",
                      "is_sequence": false
                    },
                    {
                      "default_value": 400,
                      "arg_description": "Chunk size in words for splitting input text",
                      "required": false,
                      "sources": [
                        {
                          "cli_flag": "--chunk-size"
                        }
                      ],
                      "media_urn": "media:chunk-size;textable;numeric",
                      "is_sequence": false
                    },
                    {
                      "default_value": 50,
                      "arg_description": "Chunk overlap in words when splitting input text",
                      "required": false,
                      "sources": [
                        {
                          "cli_flag": "--chunk-overlap"
                        }
                      ],
                      "media_urn": "media:chunk-overlap;textable;numeric",
                      "is_sequence": false
                    },
                    {
                      "arg_description": "HuggingFace bearer token. Required when targeting a gated repository.",
                      "required": false,
                      "sources": [
                        {
                          "cli_flag": "--hf-token"
                        }
                      ],
                      "media_urn": "media:hf-token;secret;textable",
                      "is_sequence": false
                    }
                  ]
                },
                {
                  "command": "get_embedding_dimensions",
                  "title": "Get Embeddings Dimensions (MLX)",
                  "cap_description": "Query the dimensionality of embeddings for a given MLX model",
                  "urn": "cap:in=\"media:model-spec;mlx;textable;embeddings\";ml-model;mlx;embeddings-dimensions;out=\"media:model-dim;integer;textable;numeric\"",
                  "args": [
                    {
                      "default_value": "hf:mlx-community/embeddinggemma-300m-4bit",
                      "arg_description": "Path to MLX embedding model directory",
                      "required": false,
                      "sources": [
                        {
                          "position": 0
                        }
                      ],
                      "media_urn": "media:model-spec;mlx;textable;embeddings",
                      "is_sequence": false
                    },
                    {
                      "arg_description": "HuggingFace bearer token. Required when targeting a gated repository.",
                      "required": false,
                      "sources": [
                        {
                          "cli_flag": "--hf-token"
                        }
                      ],
                      "media_urn": "media:hf-token;secret;textable",
                      "is_sequence": false
                    }
                  ]
                }
              ]
            }
          ],
          "latestVersion": "0.164.905-nightly",
          "versions": {
            "0.158.862-nightly": {
              "releaseDate": "2026-05-17T23:01:23Z",
              "changelog": [
                "Initial release"
              ],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "mlxcartridge-0.158.862-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/mlxcartridge/0.158.862-nightly/mlxcartridge-0.158.862-nightly.pkg",
                    "sha256": "cd5a626c2a6c3ce40fa72fb14196a243409f041fe82929f91745cb3e22346df4",
                    "size": 35686878
                  }
                }
              ]
            },
            "0.160.876-nightly": {
              "releaseDate": "2026-05-20T02:08:27Z",
              "changelog": [],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "mlxcartridge-0.160.876-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/mlxcartridge/0.160.876-nightly/mlxcartridge-0.160.876-nightly.pkg",
                    "sha256": "5dd363a298937a4b62531a71c196c60776f2c899ed9f4ef6ce0fea993268cb4e",
                    "size": 35687168
                  }
                }
              ]
            },
            "0.161.883-nightly": {
              "releaseDate": "2026-05-21T01:49:14Z",
              "changelog": [],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "mlxcartridge-0.161.883-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/mlxcartridge/0.161.883-nightly/mlxcartridge-0.161.883-nightly.pkg",
                    "sha256": "3cc344bc2deb7e4fcda93b1958f471877d4e8061c33bc06602515096d3ec530c",
                    "size": 35688443
                  }
                }
              ]
            },
            "0.162.890-nightly": {
              "releaseDate": "2026-05-21T14:59:43Z",
              "changelog": [],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "mlxcartridge-0.162.890-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/mlxcartridge/0.162.890-nightly/mlxcartridge-0.162.890-nightly.pkg",
                    "sha256": "d855ba0263c069614d0515797e5b1e5b1d134e88674be0b21ea30da817c96070",
                    "size": 35688459
                  }
                }
              ]
            },
            "0.163.897-nightly": {
              "releaseDate": "2026-05-29T15:50:53Z",
              "changelog": [],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "mlxcartridge-0.163.897-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/mlxcartridge/0.163.897-nightly/mlxcartridge-0.163.897-nightly.pkg",
                    "sha256": "05755e27415aa9de13e5c35cb9cd6f99d4a8b366e0398b1811aedb3740646df7",
                    "size": 35688474
                  }
                }
              ]
            },
            "0.164.905-nightly": {
              "releaseDate": "2026-05-30T05:59:49Z",
              "changelog": [],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "mlxcartridge-0.164.905-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/mlxcartridge/0.164.905-nightly/mlxcartridge-0.164.905-nightly.pkg",
                    "sha256": "4f82ca74ce81ffa25ccf822ce37646b2c1a5cbb2e0e67571962c3819d12a5dc4",
                    "size": 17422215
                  }
                }
              ]
            }
          }
        },
        "imagecartridge": {
          "name": "imagecartridge",
          "description": "Cross-format raster image conversion (PNG, JPEG, GIF, BMP, TIFF, WebP).",
          "author": "https://github.com/machinefabric",
          "pageUrl": "https://github.com/machinefabric/imagecartridge",
          "teamId": "P336JK947M",
          "minAppVersion": "1.0.0",
          "categories": [],
          "tags": [],
          "cap_groups": [
            {
              "name": "image-formats",
              "caps": [
                {
                  "urn": "cap:effect=none",
                  "title": "Identity",
                  "command": "identity",
                  "cap_description": "The categorical identity morphism. Echoes input as output unchanged. Mandatory in every capability set.",
                  "args": [
                    {
                      "media_urn": "media:",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:"
                        }
                      ]
                    }
                  ],
                  "output": {
                    "media_urn": "media:",
                    "output_description": "The input data, unchanged",
                    "is_sequence": false
                  }
                },
                {
                  "urn": "cap:convert-image;in=\"media:image;jpeg\";out=\"media:image;png\"",
                  "title": "Convert JPEG to PNG",
                  "command": "convert-image",
                  "cap_description": "Re-encode a JPEG image as a PNG.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:jpeg;image"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the JPEG file to convert"
                    }
                  ]
                },
                {
                  "urn": "cap:convert-image;in=\"media:gif;image\";out=\"media:image;png\"",
                  "title": "Convert GIF to PNG",
                  "command": "convert-image",
                  "cap_description": "Re-encode a GIF image as a PNG.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:gif;image"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the GIF file to convert"
                    }
                  ]
                },
                {
                  "urn": "cap:convert-image;in=\"media:bmp;image\";out=\"media:image;png\"",
                  "title": "Convert BMP to PNG",
                  "command": "convert-image",
                  "cap_description": "Re-encode a BMP image as a PNG.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:bmp;image"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the BMP file to convert"
                    }
                  ]
                },
                {
                  "urn": "cap:convert-image;in=\"media:image;tiff\";out=\"media:image;png\"",
                  "title": "Convert TIFF to PNG",
                  "command": "convert-image",
                  "cap_description": "Re-encode a TIFF image as a PNG.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:tiff;image"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the TIFF file to convert"
                    }
                  ]
                },
                {
                  "urn": "cap:convert-image;in=\"media:image;webp\";out=\"media:image;png\"",
                  "title": "Convert WebP to PNG",
                  "command": "convert-image",
                  "cap_description": "Re-encode a WebP image as a PNG.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:webp;image"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the WebP file to convert"
                    }
                  ]
                },
                {
                  "urn": "cap:convert-image;in=\"media:image;png\";out=\"media:image;jpeg\"",
                  "title": "Convert PNG to JPEG",
                  "command": "convert-image",
                  "cap_description": "Re-encode a PNG image as a JPEG.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:image;png"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the PNG file to convert"
                    }
                  ]
                },
                {
                  "urn": "cap:convert-image;in=\"media:gif;image\";out=\"media:image;jpeg\"",
                  "title": "Convert GIF to JPEG",
                  "command": "convert-image",
                  "cap_description": "Re-encode a GIF image as a JPEG.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:gif;image"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the GIF file to convert"
                    }
                  ]
                },
                {
                  "urn": "cap:convert-image;in=\"media:bmp;image\";out=\"media:image;jpeg\"",
                  "title": "Convert BMP to JPEG",
                  "command": "convert-image",
                  "cap_description": "Re-encode a BMP image as a JPEG.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:bmp;image"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the BMP file to convert"
                    }
                  ]
                },
                {
                  "urn": "cap:convert-image;in=\"media:image;tiff\";out=\"media:image;jpeg\"",
                  "title": "Convert TIFF to JPEG",
                  "command": "convert-image",
                  "cap_description": "Re-encode a TIFF image as a JPEG.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:tiff;image"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the TIFF file to convert"
                    }
                  ]
                },
                {
                  "urn": "cap:convert-image;in=\"media:image;webp\";out=\"media:image;jpeg\"",
                  "title": "Convert WebP to JPEG",
                  "command": "convert-image",
                  "cap_description": "Re-encode a WebP image as a JPEG.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:webp;image"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the WebP file to convert"
                    }
                  ]
                },
                {
                  "urn": "cap:convert-image;in=\"media:image;png\";out=\"media:image;webp\"",
                  "title": "Convert PNG to WebP",
                  "command": "convert-image",
                  "cap_description": "Re-encode a PNG image as a WebP.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:image;png"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the PNG file to convert"
                    }
                  ]
                },
                {
                  "urn": "cap:convert-image;in=\"media:image;jpeg\";out=\"media:image;webp\"",
                  "title": "Convert JPEG to WebP",
                  "command": "convert-image",
                  "cap_description": "Re-encode a JPEG image as a WebP.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:jpeg;image"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the JPEG file to convert"
                    }
                  ]
                }
              ],
              "adapter_urns": [
                "media:bmp;image",
                "media:gif;image",
                "media:image;png",
                "media:jpeg;image",
                "media:tiff;image",
                "media:webp;image"
              ]
            }
          ],
          "latestVersion": "0.10.41-nightly",
          "versions": {
            "0.9.37-nightly": {
              "releaseDate": "2026-05-17T23:02:13Z",
              "changelog": [
                "Initial release"
              ],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "imagecartridge-0.9.37-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/imagecartridge/0.9.37-nightly/imagecartridge-0.9.37-nightly.pkg",
                    "sha256": "9960604286943200ad72548233ad460b66b04afdea1d7c19e44e997d91f218c2",
                    "size": 1622690
                  }
                }
              ]
            },
            "0.10.41-nightly": {
              "releaseDate": "2026-05-29T15:51:44Z",
              "changelog": [],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "imagecartridge-0.10.41-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/imagecartridge/0.10.41-nightly/imagecartridge-0.10.41-nightly.pkg",
                    "sha256": "12a568e8f4317b2a31cdfe9587459c30c8322074846f16f18fec1a441fe3c1d2",
                    "size": 1622791
                  }
                }
              ]
            }
          }
        },
        "audiocartridge": {
          "name": "audiocartridge",
          "description": "Cross-format audio conversion (MP3, FLAC, OGG/Vorbis, AAC, M4A, AIFF, Opus, WAV → WAV/FLAC).",
          "author": "https://github.com/machinefabric",
          "pageUrl": "https://github.com/machinefabric/audiocartridge",
          "teamId": "P336JK947M",
          "minAppVersion": "1.0.0",
          "categories": [],
          "tags": [],
          "cap_groups": [
            {
              "name": "audio-formats",
              "caps": [
                {
                  "urn": "cap:effect=none",
                  "title": "Identity",
                  "command": "identity",
                  "cap_description": "The categorical identity morphism. Echoes input as output unchanged. Mandatory in every capability set.",
                  "args": [
                    {
                      "media_urn": "media:",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:"
                        }
                      ]
                    }
                  ],
                  "output": {
                    "media_urn": "media:",
                    "output_description": "The input data, unchanged",
                    "is_sequence": false
                  }
                },
                {
                  "urn": "cap:convert-audio;in=\"media:audio;mp3\";out=\"media:audio;wav\"",
                  "title": "Convert MP3 to WAV",
                  "command": "convert-audio",
                  "cap_description": "Decode MP3 and re-encode as WAV.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:mp3;audio"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the MP3 file to convert"
                    }
                  ]
                },
                {
                  "urn": "cap:convert-audio;in=\"media:audio;flac\";out=\"media:audio;wav\"",
                  "title": "Convert FLAC to WAV",
                  "command": "convert-audio",
                  "cap_description": "Decode FLAC and re-encode as WAV.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:flac;audio"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the FLAC file to convert"
                    }
                  ]
                },
                {
                  "urn": "cap:convert-audio;in=\"media:audio;ogg\";out=\"media:audio;wav\"",
                  "title": "Convert OGG (Vorbis) to WAV",
                  "command": "convert-audio",
                  "cap_description": "Decode OGG (Vorbis) and re-encode as WAV.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:ogg;audio"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the OGG (Vorbis) file to convert"
                    }
                  ]
                },
                {
                  "urn": "cap:convert-audio;in=\"media:aac;audio\";out=\"media:audio;wav\"",
                  "title": "Convert AAC to WAV",
                  "command": "convert-audio",
                  "cap_description": "Decode AAC and re-encode as WAV.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:aac;audio"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the AAC file to convert"
                    }
                  ]
                },
                {
                  "urn": "cap:convert-audio;in=\"media:audio;m4a\";out=\"media:audio;wav\"",
                  "title": "Convert M4A to WAV",
                  "command": "convert-audio",
                  "cap_description": "Decode M4A and re-encode as WAV.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:m4a;audio"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the M4A file to convert"
                    }
                  ]
                },
                {
                  "urn": "cap:convert-audio;in=\"media:aiff;audio\";out=\"media:audio;wav\"",
                  "title": "Convert AIFF to WAV",
                  "command": "convert-audio",
                  "cap_description": "Decode AIFF and re-encode as WAV.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:aiff;audio"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the AIFF file to convert"
                    }
                  ]
                },
                {
                  "urn": "cap:convert-audio;in=\"media:audio;opus\";out=\"media:audio;wav\"",
                  "title": "Convert Opus to WAV",
                  "command": "convert-audio",
                  "cap_description": "Decode Opus and re-encode as WAV.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:opus;audio"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the Opus file to convert"
                    }
                  ]
                },
                {
                  "urn": "cap:convert-audio;in=\"media:audio;wav\";out=\"media:audio;flac\"",
                  "title": "Convert WAV to FLAC",
                  "command": "convert-audio",
                  "cap_description": "Decode WAV and re-encode as FLAC.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:wav;audio"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the WAV file to convert"
                    }
                  ]
                },
                {
                  "urn": "cap:convert-audio;in=\"media:audio;mp3\";out=\"media:audio;flac\"",
                  "title": "Convert MP3 to FLAC",
                  "command": "convert-audio",
                  "cap_description": "Decode MP3 and re-encode as FLAC.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:mp3;audio"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the MP3 file to convert"
                    }
                  ]
                },
                {
                  "urn": "cap:convert-audio;in=\"media:audio;ogg\";out=\"media:audio;flac\"",
                  "title": "Convert OGG (Vorbis) to FLAC",
                  "command": "convert-audio",
                  "cap_description": "Decode OGG (Vorbis) and re-encode as FLAC.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:ogg;audio"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the OGG (Vorbis) file to convert"
                    }
                  ]
                },
                {
                  "urn": "cap:convert-audio;in=\"media:audio;m4a\";out=\"media:audio;flac\"",
                  "title": "Convert M4A to FLAC",
                  "command": "convert-audio",
                  "cap_description": "Decode M4A and re-encode as FLAC.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:m4a;audio"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the M4A file to convert"
                    }
                  ]
                },
                {
                  "urn": "cap:convert-audio;in=\"media:aac;audio\";out=\"media:audio;flac\"",
                  "title": "Convert AAC to FLAC",
                  "command": "convert-audio",
                  "cap_description": "Decode AAC and re-encode as FLAC.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:aac;audio"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the AAC file to convert"
                    }
                  ]
                },
                {
                  "urn": "cap:convert-audio;in=\"media:aiff;audio\";out=\"media:audio;flac\"",
                  "title": "Convert AIFF to FLAC",
                  "command": "convert-audio",
                  "cap_description": "Decode AIFF and re-encode as FLAC.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:aiff;audio"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the AIFF file to convert"
                    }
                  ]
                },
                {
                  "urn": "cap:convert-audio;in=\"media:audio;opus\";out=\"media:audio;flac\"",
                  "title": "Convert Opus to FLAC",
                  "command": "convert-audio",
                  "cap_description": "Decode Opus and re-encode as FLAC.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:opus;audio"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the Opus file to convert"
                    }
                  ]
                }
              ],
              "adapter_urns": [
                "media:aac;audio",
                "media:aiff;audio",
                "media:flac;audio",
                "media:m4a;audio",
                "media:mp3;audio",
                "media:ogg;audio",
                "media:opus;audio",
                "media:wav;audio"
              ]
            }
          ],
          "latestVersion": "0.13.59-nightly",
          "versions": {
            "0.12.55-nightly": {
              "releaseDate": "2026-05-17T23:03:04Z",
              "changelog": [
                "Initial release"
              ],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "audiocartridge-0.12.55-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/audiocartridge/0.12.55-nightly/audiocartridge-0.12.55-nightly.pkg",
                    "sha256": "6b0f369b1db2805665fc94d3c2376fb9bec5c70878b238af6bea43aec587c648",
                    "size": 3428917
                  }
                }
              ]
            },
            "0.13.59-nightly": {
              "releaseDate": "2026-05-29T15:52:42Z",
              "changelog": [],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "audiocartridge-0.13.59-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/audiocartridge/0.13.59-nightly/audiocartridge-0.13.59-nightly.pkg",
                    "sha256": "9c34a52d3e6373637c5690a3b13273b0f919cef70ad911220d256e097330554c",
                    "size": 3429891
                  }
                }
              ]
            }
          }
        },
        "videocartridge": {
          "name": "videocartridge",
          "description": "Extract audio tracks (no re-encoding) and decode video frames from MP4, MOV, WebM and MKV containers.",
          "author": "https://github.com/machinefabric",
          "pageUrl": "https://github.com/machinefabric/videocartridge",
          "teamId": "P336JK947M",
          "minAppVersion": "1.0.0",
          "categories": [],
          "tags": [],
          "cap_groups": [
            {
              "name": "video-formats",
              "caps": [
                {
                  "urn": "cap:effect=none",
                  "title": "Identity",
                  "command": "identity",
                  "cap_description": "The categorical identity morphism. Echoes input as output unchanged. Mandatory in every capability set.",
                  "args": [
                    {
                      "media_urn": "media:",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:"
                        }
                      ]
                    }
                  ],
                  "output": {
                    "media_urn": "media:",
                    "output_description": "The input data, unchanged",
                    "is_sequence": false
                  }
                },
                {
                  "urn": "cap:extract-audio-track;in=\"media:mp4;video\";out=\"media:audio;m4a\"",
                  "title": "Extract audio track from MP4",
                  "command": "extract-audio",
                  "cap_description": "Demux the MP4 container's audio track and write it as a M4A file (no re-encoding).",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:mp4;video"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the MP4 file"
                    }
                  ]
                },
                {
                  "urn": "cap:extract-audio-track;in=\"media:mov;video\";out=\"media:audio;m4a\"",
                  "title": "Extract audio track from MOV",
                  "command": "extract-audio",
                  "cap_description": "Demux the MOV container's audio track and write it as a M4A file (no re-encoding).",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:mov;video"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the MOV file"
                    }
                  ]
                },
                {
                  "urn": "cap:extract-audio-track;in=\"media:video;webm\";out=\"media:audio;opus\"",
                  "title": "Extract audio track from WebM",
                  "command": "extract-audio",
                  "cap_description": "Demux the WebM container's audio track and write it as a Opus file (no re-encoding).",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:webm;video"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the WebM file"
                    }
                  ]
                },
                {
                  "urn": "cap:extract-audio-track;in=\"media:mkv;video\";out=\"media:audio;opus\"",
                  "title": "Extract audio track from MKV",
                  "command": "extract-audio",
                  "cap_description": "Demux the MKV container's audio track and write it as a Opus file (no re-encoding).",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:mkv;video"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the MKV file"
                    }
                  ]
                },
                {
                  "urn": "cap:extract-frames;in=\"media:mp4;video\";out=\"media:image;png\"",
                  "title": "Extract frames from MP4",
                  "command": "extract-frames",
                  "cap_description": "Decode the MP4 container's video track and emit its frames as a sequence of PNG images. With no --fps argument, every decoded frame is emitted; with --fps N, frames are decimated to approximately N per second using nearest-PTS selection.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:mp4;video"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the MP4 file"
                    },
                    {
                      "media_urn": "media:fps;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--fps"
                        }
                      ],
                      "arg_description": "Target frames per second. Omit for every-frame output."
                    }
                  ]
                },
                {
                  "urn": "cap:extract-frames;in=\"media:mov;video\";out=\"media:image;png\"",
                  "title": "Extract frames from MOV",
                  "command": "extract-frames",
                  "cap_description": "Decode the MOV container's video track and emit its frames as a sequence of PNG images. With no --fps argument, every decoded frame is emitted; with --fps N, frames are decimated to approximately N per second using nearest-PTS selection.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:mov;video"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the MOV file"
                    },
                    {
                      "media_urn": "media:fps;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--fps"
                        }
                      ],
                      "arg_description": "Target frames per second. Omit for every-frame output."
                    }
                  ]
                },
                {
                  "urn": "cap:extract-frames;in=\"media:video;webm\";out=\"media:image;png\"",
                  "title": "Extract frames from WebM",
                  "command": "extract-frames",
                  "cap_description": "Decode the WebM container's video track and emit its frames as a sequence of PNG images. With no --fps argument, every decoded frame is emitted; with --fps N, frames are decimated to approximately N per second using nearest-PTS selection.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:webm;video"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the WebM file"
                    },
                    {
                      "media_urn": "media:fps;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--fps"
                        }
                      ],
                      "arg_description": "Target frames per second. Omit for every-frame output."
                    }
                  ]
                },
                {
                  "urn": "cap:extract-frames;in=\"media:mkv;video\";out=\"media:image;png\"",
                  "title": "Extract frames from MKV",
                  "command": "extract-frames",
                  "cap_description": "Decode the MKV container's video track and emit its frames as a sequence of PNG images. With no --fps argument, every decoded frame is emitted; with --fps N, frames are decimated to approximately N per second using nearest-PTS selection.",
                  "args": [
                    {
                      "media_urn": "media:file-path;textable",
                      "required": true,
                      "is_sequence": false,
                      "sources": [
                        {
                          "stdin": "media:mkv;video"
                        },
                        {
                          "position": 0
                        }
                      ],
                      "arg_description": "Path to the MKV file"
                    },
                    {
                      "media_urn": "media:fps;textable;numeric",
                      "required": false,
                      "is_sequence": false,
                      "sources": [
                        {
                          "cli_flag": "--fps"
                        }
                      ],
                      "arg_description": "Target frames per second. Omit for every-frame output."
                    }
                  ]
                }
              ],
              "adapter_urns": [
                "media:mkv;video",
                "media:mov;video",
                "media:mp4;video",
                "media:webm;video"
              ]
            }
          ],
          "latestVersion": "0.10.57-nightly",
          "versions": {
            "0.9.53-nightly": {
              "releaseDate": "2026-05-17T23:03:56Z",
              "changelog": [
                "Initial release"
              ],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "videocartridge-0.9.53-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/videocartridge/0.9.53-nightly/videocartridge-0.9.53-nightly.pkg",
                    "sha256": "824ebb15c39824dd10cf0535837b49634adf492ab1033fb366d3c9743fb7a2b2",
                    "size": 3857077
                  }
                }
              ]
            },
            "0.10.57-nightly": {
              "releaseDate": "2026-05-29T15:53:35Z",
              "changelog": [],
              "minAppVersion": "1.0.0",
              "builds": [
                {
                  "platform": "darwin-arm64",
                  "package": {
                    "name": "videocartridge-0.10.57-nightly.pkg",
                    "url": "https://cartridges.machinefabric.com/nightly/videocartridge/0.10.57-nightly/videocartridge-0.10.57-nightly.pkg",
                    "sha256": "09310464058596e562d51f536a6283853b90642b69e90321c38528637cd322e7",
                    "size": 3857525
                  }
                }
              ]
            }
          }
        }
      }
    }
  }
}
