{
  "manifest_version": "1.0.0",
  "template": {
    "id": "941108ea-fb76-4919-9db4-9daec684d798",
    "slug": "cobalt-or-just-updated-media-downloader-",
    "name": "Cobalt | (Just Updated) Media Downloader No Stranger Can Use on Your Bill",
    "description": "Self-hosted media downloader: API-key auth enforced, YouTube poToken server",
    "url": "https://railway.com/deploy/cobalt-or-just-updated-media-downloader-",
    "upstream": {
      "image": "ghcr.io/imputnet/cobalt:11.7.1"
    }
  },
  "services": [
    {
      "name": "pot",
      "source": {
        "image": "brainicism/bgutil-ytdlp-pot-provider:1.3.1-node"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "cobalt",
      "source": {
        "image": "ghcr.io/imputnet/cobalt:11.7.1"
      },
      "needs_volume": false,
      "http": true
    }
  ],
  "required_inputs": [
    {
      "key": "API_URL",
      "service": "cobalt",
      "description": "Provide a value for API_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "COBALT_API_KEY",
      "service": "cobalt",
      "description": "Provide a value for COBALT_API_KEY.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "YOUTUBE_SESSION_SERVER",
      "service": "cobalt",
      "description": "Provide a value for YOUTUBE_SESSION_SERVER.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "cobalt-or-just-updated-media-downloader-"
      }
    },
    "cli": "railway deploy --template cobalt-or-just-updated-media-downloader-",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "941108ea-fb76-4919-9db4-9daec684d798",
            "serializedConfig": {
              "buckets": {},
              "services": {
                "13d4cdb7-6e56-43d8-b1a3-5a1a868d17d7": {
                  "icon": null,
                  "name": "pot",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "brainicism/bgutil-ytdlp-pot-provider:1.3.1-node"
                  },
                  "variables": {}
                },
                "f5646061-c565-4534-856d-43182f132525": {
                  "icon": null,
                  "name": "cobalt",
                  "deploy": {
                    "startCommand": "/bin/sh -c 'set -e; : ${COBALT_API_KEY:?COBALT_API_KEY_is_required}; d=$HOME; [ -w $d ] || d=/tmp; printf {\\\\042%s\\\\042:{\\\\042name\\\\042:\\\\042owner\\\\042,\\\\042limit\\\\042:\\\\042unlimited\\\\042}} $COBALT_API_KEY > $d/keys.json; export API_KEY_URL=file://$d/keys.json API_AUTH_REQUIRED=1 API_PORT=$PORT API_LISTEN_ADDRESS=0.0.0.0; echo [railway] api key file at $d/keys.json; exec node src/cobalt'",
                    "healthcheckPath": "/",
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/imputnet/cobalt:11.7.1"
                  },
                  "variables": {
                    "API_URL": {
                      "isOptional": false,
                      "defaultValue": "https://${{RAILWAY_PUBLIC_DOMAIN}}/"
                    },
                    "COBALT_API_KEY": {
                      "isOptional": false,
                      "defaultValue": "{{COBALT_API_KEY}}"
                    },
                    "YOUTUBE_SESSION_SERVER": {
                      "isOptional": false,
                      "defaultValue": "http://${{pot.RAILWAY_PRIVATE_DOMAIN}}:4416"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:8080": {
                        "port": 8080
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {
    "healthcheck": {
      "service": "cobalt",
      "method": "GET",
      "path": "/",
      "expect_status": 200
    }
  },
  "resources": {
    "expected_services": 2,
    "needs_volume": false
  },
  "generated_at": "2026-09-22T22:14:50.114Z",
  "generator_version": "0.1.0",
  "status": "validated",
  "validated_at": "2026-09-22T02:37:45.827Z",
  "success_rate_30d": 1,
  "validation": {
    "last_run_id": "run_2214db19ffe74194af7a",
    "checks": [
      {
        "name": "workflow_completed",
        "passed": true
      },
      {
        "name": "all_services_deployed",
        "passed": true
      },
      {
        "name": "healthcheck",
        "passed": true
      },
      {
        "name": "stays_up",
        "passed": true
      }
    ],
    "typical_ready_seconds": 91,
    "typical_build_seconds": 0,
    "typical_start_seconds": 10,
    "slowest_service": "cobalt"
  }
}
