{
  "$defs": {
    "BatchConfig": {
      "description": "Batch processing configuration.",
      "properties": {
        "concurrency": {
          "default": 10,
          "minimum": 1,
          "title": "Concurrency",
          "type": "integer"
        },
        "url_concurrency": {
          "default": 5,
          "minimum": 1,
          "title": "Url Concurrency",
          "type": "integer"
        },
        "state_flush_interval_seconds": {
          "default": 10,
          "title": "State Flush Interval Seconds",
          "type": "integer"
        },
        "scan_max_depth": {
          "default": 5,
          "minimum": 0,
          "title": "Scan Max Depth",
          "type": "integer"
        },
        "scan_max_files": {
          "default": 10000,
          "minimum": 1,
          "title": "Scan Max Files",
          "type": "integer"
        },
        "heavy_task_limit": {
          "default": 0,
          "minimum": 0,
          "title": "Heavy Task Limit",
          "type": "integer"
        }
      },
      "title": "BatchConfig",
      "type": "object"
    },
    "CacheConfig": {
      "description": "Cache configuration.",
      "properties": {
        "enabled": {
          "default": true,
          "title": "Enabled",
          "type": "boolean"
        },
        "no_cache": {
          "default": false,
          "title": "No Cache",
          "type": "boolean"
        },
        "no_cache_patterns": {
          "default": [],
          "items": {
            "type": "string"
          },
          "title": "No Cache Patterns",
          "type": "array"
        },
        "max_size_bytes": {
          "default": 536870912,
          "title": "Max Size Bytes",
          "type": "integer"
        },
        "global_dir": {
          "default": "~/.markitai",
          "title": "Global Dir",
          "type": "string"
        }
      },
      "title": "CacheConfig",
      "type": "object"
    },
    "CloudflareConfig": {
      "description": "Cloudflare Browser Rendering + Workers AI configuration.\n\nUsed as a cloud-based fallback for URL fetching (Browser Rendering /markdown API)\nand file conversion (Workers AI toMarkdown API). Requires a Cloudflare account\nwith Browser Rendering enabled (available on Free plan).\n\nBoth api_token and account_id support env: syntax for environment variable resolution.",
      "properties": {
        "api_token": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Api Token"
        },
        "account_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Account Id"
        },
        "timeout": {
          "default": 30000,
          "title": "Timeout",
          "type": "integer"
        },
        "wait_until": {
          "default": "networkidle0",
          "title": "Wait Until",
          "type": "string"
        },
        "cache_ttl": {
          "default": 0,
          "title": "Cache Ttl",
          "type": "integer"
        },
        "reject_resource_patterns": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Reject Resource Patterns"
        },
        "user_agent": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "User Agent"
        },
        "cookies": {
          "anyOf": [
            {
              "items": {
                "additionalProperties": {
                  "type": "string"
                },
                "type": "object"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Cookies"
        },
        "wait_for_selector": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Wait For Selector"
        },
        "http_credentials": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Http Credentials"
        },
        "convert_enabled": {
          "default": false,
          "title": "Convert Enabled",
          "type": "boolean"
        }
      },
      "title": "CloudflareConfig",
      "type": "object"
    },
    "DefuddleConfig": {
      "description": "Defuddle content extraction API configuration.\n\nDefuddle (https://defuddle.md) extracts clean article content from web pages,\nremoving clutter like ads, sidebars, and navigation. Returns Markdown with\nrich YAML frontmatter (title, author, published, description, word_count).\n\nNOTE: Rate limit is undocumented. The default RPM is conservative.\nNOTE: JS rendering capability of the API is unconfirmed \u2014 SPA-heavy sites\nmay still need playwright as fallback.",
      "properties": {
        "timeout": {
          "default": 30,
          "title": "Timeout",
          "type": "integer"
        },
        "rpm": {
          "default": 20,
          "minimum": 1,
          "title": "Rpm",
          "type": "integer"
        }
      },
      "title": "DefuddleConfig",
      "type": "object"
    },
    "DomainProfileConfig": {
      "description": "Domain-specific overrides for fetch settings.",
      "properties": {
        "wait_for_selector": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Wait For Selector"
        },
        "wait_for": {
          "anyOf": [
            {
              "enum": [
                "load",
                "domcontentloaded",
                "networkidle"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Wait For"
        },
        "extra_wait_ms": {
          "anyOf": [
            {
              "maximum": 30000,
              "minimum": 0,
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Extra Wait Ms"
        },
        "prefer_strategy": {
          "anyOf": [
            {
              "enum": [
                "static",
                "defuddle",
                "playwright",
                "jina",
                "cloudflare"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Prefer Strategy"
        },
        "strategy_priority": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom strategy order for this domain. Overrides global and prefer_strategy.",
          "title": "Strategy Priority"
        },
        "skip_auto_scroll": {
          "default": false,
          "description": "Skip auto-scrolling for single-content pages (tweets, issues, docs).",
          "title": "Skip Auto Scroll",
          "type": "boolean"
        },
        "reject_resource_patterns": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "URL patterns to block during Playwright navigation (e.g. '**/analytics/**').",
          "title": "Reject Resource Patterns"
        }
      },
      "title": "DomainProfileConfig",
      "type": "object"
    },
    "FetchConfig": {
      "description": "URL fetch configuration for handling static and JS-rendered pages.",
      "properties": {
        "strategy": {
          "default": "auto",
          "enum": [
            "auto",
            "static",
            "defuddle",
            "playwright",
            "jina",
            "cloudflare"
          ],
          "title": "Strategy",
          "type": "string"
        },
        "defuddle": {
          "$ref": "#/$defs/DefuddleConfig"
        },
        "playwright": {
          "$ref": "#/$defs/PlaywrightConfig"
        },
        "jina": {
          "$ref": "#/$defs/JinaConfig"
        },
        "cloudflare": {
          "$ref": "#/$defs/CloudflareConfig"
        },
        "kreuzberg_convert_enabled": {
          "default": false,
          "description": "Force kreuzberg converter for all supported file formats.",
          "title": "Kreuzberg Convert Enabled",
          "type": "boolean"
        },
        "policy": {
          "$ref": "#/$defs/FetchPolicyConfig"
        },
        "domain_profiles": {
          "additionalProperties": {
            "$ref": "#/$defs/DomainProfileConfig"
          },
          "title": "Domain Profiles",
          "type": "object"
        },
        "fallback_patterns": {
          "items": {
            "type": "string"
          },
          "title": "Fallback Patterns",
          "type": "array"
        }
      },
      "title": "FetchConfig",
      "type": "object"
    },
    "FetchPolicyConfig": {
      "description": "Configuration for fetch strategy policy engine.",
      "properties": {
        "enabled": {
          "default": true,
          "title": "Enabled",
          "type": "boolean"
        },
        "max_strategy_hops": {
          "default": 5,
          "maximum": 6,
          "minimum": 1,
          "title": "Max Strategy Hops",
          "type": "integer"
        },
        "strategy_priority": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom global strategy order. Overrides the default priority.",
          "title": "Strategy Priority"
        },
        "local_only_patterns": {
          "description": "Domain/IP patterns that must use local-only strategies (NO_PROXY syntax).",
          "items": {
            "type": "string"
          },
          "title": "Local Only Patterns",
          "type": "array"
        },
        "inherit_no_proxy": {
          "default": true,
          "description": "Merge NO_PROXY env var into local_only_patterns at runtime.",
          "title": "Inherit No Proxy",
          "type": "boolean"
        }
      },
      "title": "FetchPolicyConfig",
      "type": "object"
    },
    "ImageConfig": {
      "description": "Image processing configuration.",
      "properties": {
        "alt_enabled": {
          "default": false,
          "title": "Alt Enabled",
          "type": "boolean"
        },
        "desc_enabled": {
          "default": false,
          "title": "Desc Enabled",
          "type": "boolean"
        },
        "compress": {
          "default": true,
          "title": "Compress",
          "type": "boolean"
        },
        "quality": {
          "default": 75,
          "maximum": 100,
          "minimum": 1,
          "title": "Quality",
          "type": "integer"
        },
        "format": {
          "default": "jpeg",
          "enum": [
            "jpeg",
            "png",
            "webp"
          ],
          "title": "Format",
          "type": "string"
        },
        "max_width": {
          "default": 1920,
          "title": "Max Width",
          "type": "integer"
        },
        "max_height": {
          "default": 99999,
          "title": "Max Height",
          "type": "integer"
        },
        "filter": {
          "$ref": "#/$defs/ImageFilterConfig"
        },
        "stdout_persist": {
          "default": false,
          "title": "Stdout Persist",
          "type": "boolean"
        },
        "stdout_persist_dir": {
          "default": "~/.markitai/assets",
          "title": "Stdout Persist Dir",
          "type": "string"
        },
        "stdout_fetch_external": {
          "default": false,
          "title": "Stdout Fetch External",
          "type": "boolean"
        }
      },
      "title": "ImageConfig",
      "type": "object"
    },
    "ImageFilterConfig": {
      "description": "Image filter configuration.",
      "properties": {
        "min_width": {
          "default": 50,
          "title": "Min Width",
          "type": "integer"
        },
        "min_height": {
          "default": 50,
          "title": "Min Height",
          "type": "integer"
        },
        "min_area": {
          "default": 5000,
          "title": "Min Area",
          "type": "integer"
        },
        "deduplicate": {
          "default": true,
          "title": "Deduplicate",
          "type": "boolean"
        }
      },
      "title": "ImageFilterConfig",
      "type": "object"
    },
    "JinaConfig": {
      "description": "Jina Reader API configuration.",
      "properties": {
        "api_key": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Api Key"
        },
        "timeout": {
          "default": 30,
          "title": "Timeout",
          "type": "integer"
        },
        "rpm": {
          "default": 20,
          "minimum": 1,
          "title": "Rpm",
          "type": "integer"
        },
        "no_cache": {
          "default": false,
          "title": "No Cache",
          "type": "boolean"
        },
        "target_selector": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Target Selector"
        },
        "wait_for_selector": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Wait For Selector"
        }
      },
      "title": "JinaConfig",
      "type": "object"
    },
    "LLMConfig": {
      "description": "LLM configuration.",
      "properties": {
        "enabled": {
          "default": false,
          "title": "Enabled",
          "type": "boolean"
        },
        "pure": {
          "default": false,
          "description": "Pure mode: raw MD sent directly to LLM, no markitai processing",
          "title": "Pure",
          "type": "boolean"
        },
        "keep_base": {
          "default": false,
          "description": "Keep base .md file alongside .llm.md in LLM mode",
          "title": "Keep Base",
          "type": "boolean"
        },
        "model_list": {
          "items": {
            "$ref": "#/$defs/ModelConfig"
          },
          "title": "Model List",
          "type": "array"
        },
        "router_settings": {
          "$ref": "#/$defs/RouterSettings"
        },
        "concurrency": {
          "default": 10,
          "title": "Concurrency",
          "type": "integer"
        }
      },
      "title": "LLMConfig",
      "type": "object"
    },
    "LiteLLMParams": {
      "description": "LiteLLM parameters for a model.",
      "properties": {
        "model": {
          "title": "Model",
          "type": "string"
        },
        "api_key": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Api Key"
        },
        "api_base": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom API base URL to override the provider's default endpoint. Supports env:VAR_NAME syntax. Passed directly to LiteLLM; works with any LiteLLM-supported provider. Not used by local providers (claude-agent/, copilot/) which manage endpoints via their own environment variables.",
          "title": "Api Base"
        },
        "weight": {
          "default": 1,
          "description": "Routing weight for load balancing. 0 = disabled (model excluded from routing). Higher values get more traffic.",
          "minimum": 0,
          "title": "Weight",
          "type": "integer"
        },
        "max_tokens": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Max Tokens"
        }
      },
      "required": [
        "model"
      ],
      "title": "LiteLLMParams",
      "type": "object"
    },
    "LogConfig": {
      "description": "Logging configuration.",
      "properties": {
        "level": {
          "default": "INFO",
          "enum": [
            "DEBUG",
            "INFO",
            "WARNING",
            "ERROR",
            "CRITICAL"
          ],
          "title": "Level",
          "type": "string"
        },
        "dir": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Dir"
        },
        "rotation": {
          "default": "10 MB",
          "title": "Rotation",
          "type": "string"
        },
        "retention": {
          "default": "7 days",
          "title": "Retention",
          "type": "string"
        },
        "format": {
          "default": "text",
          "enum": [
            "text",
            "json"
          ],
          "title": "Format",
          "type": "string"
        }
      },
      "title": "LogConfig",
      "type": "object"
    },
    "ModelConfig": {
      "description": "Model configuration for LiteLLM Router.",
      "properties": {
        "model_name": {
          "title": "Model Name",
          "type": "string"
        },
        "litellm_params": {
          "$ref": "#/$defs/LiteLLMParams"
        },
        "model_info": {
          "anyOf": [
            {
              "$ref": "#/$defs/ModelInfo"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        }
      },
      "required": [
        "model_name",
        "litellm_params"
      ],
      "title": "ModelConfig",
      "type": "object"
    },
    "ModelInfo": {
      "description": "Model metadata. All fields are optional and auto-detected from litellm if not set.",
      "properties": {
        "supports_vision": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Supports Vision"
        },
        "max_tokens": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Max Tokens"
        },
        "max_input_tokens": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Max Input Tokens"
        }
      },
      "title": "ModelInfo",
      "type": "object"
    },
    "OCRConfig": {
      "description": "OCR configuration.",
      "properties": {
        "enabled": {
          "default": false,
          "title": "Enabled",
          "type": "boolean"
        },
        "lang": {
          "default": "en",
          "title": "Lang",
          "type": "string"
        }
      },
      "title": "OCRConfig",
      "type": "object"
    },
    "OutputConfig": {
      "description": "Output configuration.",
      "properties": {
        "dir": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Dir"
        },
        "on_conflict": {
          "default": "rename",
          "enum": [
            "skip",
            "overwrite",
            "rename"
          ],
          "title": "On Conflict",
          "type": "string"
        },
        "allow_symlinks": {
          "default": false,
          "title": "Allow Symlinks",
          "type": "boolean"
        }
      },
      "title": "OutputConfig",
      "type": "object"
    },
    "PlaywrightConfig": {
      "description": "Playwright configuration for JS-rendered pages.",
      "properties": {
        "timeout": {
          "default": 30000,
          "title": "Timeout",
          "type": "integer"
        },
        "wait_for": {
          "default": "domcontentloaded",
          "enum": [
            "load",
            "domcontentloaded",
            "networkidle"
          ],
          "title": "Wait For",
          "type": "string"
        },
        "extra_wait_ms": {
          "default": 3000,
          "title": "Extra Wait Ms",
          "type": "integer"
        },
        "session_mode": {
          "default": "isolated",
          "enum": [
            "isolated",
            "domain_persistent"
          ],
          "title": "Session Mode",
          "type": "string"
        },
        "session_ttl_seconds": {
          "default": 600,
          "maximum": 7200,
          "minimum": 60,
          "title": "Session Ttl Seconds",
          "type": "integer"
        },
        "wait_for_selector": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Wait For Selector"
        },
        "cookies": {
          "anyOf": [
            {
              "items": {
                "additionalProperties": {
                  "type": "string"
                },
                "type": "object"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Cookies"
        },
        "reject_resource_patterns": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Reject Resource Patterns"
        },
        "extra_http_headers": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Extra Http Headers"
        },
        "user_agent": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "User Agent"
        },
        "http_credentials": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Http Credentials"
        }
      },
      "title": "PlaywrightConfig",
      "type": "object"
    },
    "PresetConfig": {
      "description": "Preset configuration defining which features to enable.",
      "properties": {
        "llm": {
          "default": false,
          "title": "Llm",
          "type": "boolean"
        },
        "ocr": {
          "default": false,
          "title": "Ocr",
          "type": "boolean"
        },
        "alt": {
          "default": false,
          "title": "Alt",
          "type": "boolean"
        },
        "desc": {
          "default": false,
          "title": "Desc",
          "type": "boolean"
        },
        "screenshot": {
          "default": false,
          "title": "Screenshot",
          "type": "boolean"
        }
      },
      "title": "PresetConfig",
      "type": "object"
    },
    "PromptsConfig": {
      "description": "Prompts configuration for custom prompt overrides.\n\nEach prompt has a system and user variant:\n- system: Contains instructions and context\n- user: Contains the actual request with content placeholders",
      "properties": {
        "dir": {
          "default": "~/.markitai/prompts",
          "title": "Dir",
          "type": "string"
        },
        "cleaner_system": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Cleaner System"
        },
        "cleaner_user": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Cleaner User"
        },
        "image_caption_system": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Image Caption System"
        },
        "image_caption_user": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Image Caption User"
        },
        "image_description_system": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Image Description System"
        },
        "image_description_user": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Image Description User"
        },
        "image_analysis_system": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Image Analysis System"
        },
        "image_analysis_user": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Image Analysis User"
        },
        "page_content_system": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Page Content System"
        },
        "page_content_user": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Page Content User"
        },
        "document_process_system": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Document Process System"
        },
        "document_process_user": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Document Process User"
        },
        "document_vision_system": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Document Vision System"
        },
        "document_vision_user": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Document Vision User"
        },
        "url_enhance_system": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Url Enhance System"
        },
        "url_enhance_user": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Url Enhance User"
        }
      },
      "title": "PromptsConfig",
      "type": "object"
    },
    "RouterSettings": {
      "description": "LiteLLM Router settings.",
      "properties": {
        "routing_strategy": {
          "default": "simple-shuffle",
          "enum": [
            "simple-shuffle",
            "least-busy",
            "usage-based-routing",
            "latency-based-routing"
          ],
          "title": "Routing Strategy",
          "type": "string"
        },
        "num_retries": {
          "default": 2,
          "title": "Num Retries",
          "type": "integer"
        },
        "timeout": {
          "default": 120,
          "title": "Timeout",
          "type": "integer"
        },
        "fallbacks": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Fallbacks",
          "type": "array"
        }
      },
      "title": "RouterSettings",
      "type": "object"
    },
    "ScreenshotConfig": {
      "description": "Screenshot rendering configuration.\n\nFor PDF/PPTX: Renders pages as JPEG images.\nFor URLs: Captures full-page screenshots using Playwright.",
      "properties": {
        "enabled": {
          "default": false,
          "title": "Enabled",
          "type": "boolean"
        },
        "viewport_width": {
          "default": 1920,
          "title": "Viewport Width",
          "type": "integer"
        },
        "viewport_height": {
          "default": 1080,
          "title": "Viewport Height",
          "type": "integer"
        },
        "quality": {
          "default": 75,
          "maximum": 100,
          "minimum": 1,
          "title": "Quality",
          "type": "integer"
        },
        "max_height": {
          "default": 10000,
          "title": "Max Height",
          "type": "integer"
        },
        "screenshot_only": {
          "default": false,
          "title": "Screenshot Only",
          "type": "boolean"
        }
      },
      "title": "ScreenshotConfig",
      "type": "object"
    }
  },
  "description": "Main configuration model.",
  "properties": {
    "output": {
      "$ref": "#/$defs/OutputConfig"
    },
    "llm": {
      "$ref": "#/$defs/LLMConfig"
    },
    "image": {
      "$ref": "#/$defs/ImageConfig"
    },
    "ocr": {
      "$ref": "#/$defs/OCRConfig"
    },
    "screenshot": {
      "$ref": "#/$defs/ScreenshotConfig"
    },
    "prompts": {
      "$ref": "#/$defs/PromptsConfig"
    },
    "batch": {
      "$ref": "#/$defs/BatchConfig"
    },
    "log": {
      "$ref": "#/$defs/LogConfig"
    },
    "cache": {
      "$ref": "#/$defs/CacheConfig"
    },
    "fetch": {
      "$ref": "#/$defs/FetchConfig"
    },
    "presets": {
      "additionalProperties": {
        "$ref": "#/$defs/PresetConfig"
      },
      "title": "Presets",
      "type": "object"
    }
  },
  "title": "MarkitaiConfig",
  "type": "object"
}