[{"data":1,"prerenderedAt":1397},["ShallowReactive",2],{"navigation_docs_zh":3,"-zh-api-images":79,"-zh-api-images-surround":1392},[4,25,41,58],{"title":5,"path":6,"stem":7,"children":8,"page":24},"快速开始","/zh/quick-start","zh/1.quick-start",[9,12,16,20],{"title":5,"path":10,"stem":11},"/zh/quick-start/overview","zh/1.quick-start/0.overview",{"title":13,"path":14,"stem":15},"安装与下载","/zh/quick-start/install","zh/1.quick-start/1.install",{"title":17,"path":18,"stem":19},"首次启动与第一条对话","/zh/quick-start/first-run","zh/1.quick-start/2.first-run",{"title":21,"path":22,"stem":23},"macOS 安装指南","/zh/quick-start/macos-install","zh/1.quick-start/3.macos-install",false,{"title":26,"path":27,"stem":28,"children":29,"page":24},"使用手册","/zh/manual","zh/2.manual",[30,33,37],{"title":26,"path":31,"stem":32},"/zh/manual/overview","zh/2.manual/0.overview",{"title":34,"path":35,"stem":36},"供应商与模型配置","/zh/manual/providers","zh/2.manual/1.providers",{"title":38,"path":39,"stem":40},"会话与上下文管理","/zh/manual/chat-and-context","zh/2.manual/2.chat-and-context",{"title":42,"path":43,"stem":44,"children":45,"page":24},"常见问题","/zh/faq","zh/3.faq",[46,50,54],{"title":47,"path":48,"stem":49},"常见问题（FAQ）","/zh/faq/overview","zh/3.faq/0.overview",{"title":51,"path":52,"stem":53},"隐私政策","/zh/faq/privacy-policy","zh/3.faq/1.privacy-policy",{"title":55,"path":56,"stem":57},"账号删除说明","/zh/faq/account-deletion","zh/3.faq/2.account-deletion",{"title":59,"path":60,"stem":61,"children":62,"page":24},"开发者","/zh/api","zh/4.api",[63,67,71,75],{"title":64,"path":65,"stem":66},"开发者 API","/zh/api/overview","zh/4.api/0.overview",{"title":68,"path":69,"stem":70},"对话与向量","/zh/api/chat","zh/4.api/1.chat",{"title":72,"path":73,"stem":74},"生图与视频","/zh/api/images","zh/4.api/2.images",{"title":76,"path":77,"stem":78},"错误、限额与计费","/zh/api/errors","zh/4.api/3.errors",{"id":80,"title":72,"body":81,"description":1385,"extension":1386,"links":1387,"meta":1388,"navigation":1389,"path":73,"seo":1390,"stem":74,"__hash__":1391},"docs_zh/zh/4.api/2.images.md",{"type":82,"value":83,"toc":1374},"minimark",[84,89,97,227,230,380,402,406,413,416,445,464,607,615,618,624,680,683,687,697,759,765,933,954,962,979,982,988,1076,1082,1100,1103,1112,1181,1186,1303,1334,1337,1340,1343,1359,1370],[85,86,88],"h2",{"id":87},"生图直接拿到图","生图：直接拿到图",[90,91,92,96],"p",{},[93,94,95],"code",{},"POST /v1/images/generations","，与 OpenAI 的同名接口一致：",[98,99,100,142],"code-group",{},[101,102,108],"pre",{"className":103,"code":104,"filename":105,"language":106,"meta":107,"style":107},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","resp = client.images.generate(\n    model=\"gpt-image-2.5\",\n    prompt=\"一只戴着宇航头盔的橘猫，油画质感\",\n)\nimage_base64 = resp.data[0].b64_json\n","Python","python","",[93,109,110,118,124,130,136],{"__ignoreMap":107},[111,112,115],"span",{"class":113,"line":114},"line",1,[111,116,117],{},"resp = client.images.generate(\n",[111,119,121],{"class":113,"line":120},2,[111,122,123],{},"    model=\"gpt-image-2.5\",\n",[111,125,127],{"class":113,"line":126},3,[111,128,129],{},"    prompt=\"一只戴着宇航头盔的橘猫，油画质感\",\n",[111,131,133],{"class":113,"line":132},4,[111,134,135],{},")\n",[111,137,139],{"class":113,"line":138},5,[111,140,141],{},"image_base64 = resp.data[0].b64_json\n",[101,143,148],{"className":144,"code":145,"filename":146,"language":147,"meta":107,"style":107},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl https://bothub-api.bookab.info/v1/images/generations \\\n  -H \"Authorization: Bearer $BOTHUB_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"model\": \"gpt-image-2.5\",\n    \"prompt\": \"一只戴着宇航头盔的橘猫，油画质感\"\n  }'\n","curl","bash",[93,149,150,163,183,196,207,212,218],{"__ignoreMap":107},[111,151,152,155,159],{"class":113,"line":114},[111,153,146],{"class":154},"sBMFI",[111,156,158],{"class":157},"sfazB"," https://bothub-api.bookab.info/v1/images/generations",[111,160,162],{"class":161},"sTEyZ"," \\\n",[111,164,165,168,172,175,178,181],{"class":113,"line":120},[111,166,167],{"class":157},"  -H",[111,169,171],{"class":170},"sMK4o"," \"",[111,173,174],{"class":157},"Authorization: Bearer ",[111,176,177],{"class":161},"$BOTHUB_API_KEY",[111,179,180],{"class":170},"\"",[111,182,162],{"class":161},[111,184,185,187,189,192,194],{"class":113,"line":126},[111,186,167],{"class":157},[111,188,171],{"class":170},[111,190,191],{"class":157},"Content-Type: application/json",[111,193,180],{"class":170},[111,195,162],{"class":161},[111,197,198,201,204],{"class":113,"line":132},[111,199,200],{"class":157},"  -d",[111,202,203],{"class":170}," '",[111,205,206],{"class":157},"{\n",[111,208,209],{"class":113,"line":138},[111,210,211],{"class":157},"    \"model\": \"gpt-image-2.5\",\n",[111,213,215],{"class":113,"line":214},6,[111,216,217],{"class":157},"    \"prompt\": \"一只戴着宇航头盔的橘猫，油画质感\"\n",[111,219,221,224],{"class":113,"line":220},7,[111,222,223],{"class":157},"  }",[111,225,226],{"class":170},"'\n",[90,228,229],{},"响应：",[101,231,235],{"className":232,"code":233,"language":234,"meta":107,"style":107},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"created\": 1789000000,\n  \"model\": \"gpt-image-2.5\",\n  \"data\": [\n    {\n      \"b64_json\": \"iVBORw0KGgoAAAANS...\",\n      \"url\": \"https://bothub-api.bookab.info/v1/tasks/\u003Ctask>/artifacts/\u003Cartifact>\",\n      \"revised_prompt\": \"An orange tabby cat wearing an astronaut helmet, oil painting\"\n    }\n  ]\n}\n","json",[93,236,237,241,262,282,296,301,322,342,362,368,374],{"__ignoreMap":107},[111,238,239],{"class":113,"line":114},[111,240,206],{"class":170},[111,242,243,246,250,252,255,259],{"class":113,"line":120},[111,244,245],{"class":170},"  \"",[111,247,249],{"class":248},"spNyl","created",[111,251,180],{"class":170},[111,253,254],{"class":170},":",[111,256,258],{"class":257},"sbssI"," 1789000000",[111,260,261],{"class":170},",\n",[111,263,264,266,269,271,273,275,278,280],{"class":113,"line":126},[111,265,245],{"class":170},[111,267,268],{"class":248},"model",[111,270,180],{"class":170},[111,272,254],{"class":170},[111,274,171],{"class":170},[111,276,277],{"class":157},"gpt-image-2.5",[111,279,180],{"class":170},[111,281,261],{"class":170},[111,283,284,286,289,291,293],{"class":113,"line":132},[111,285,245],{"class":170},[111,287,288],{"class":248},"data",[111,290,180],{"class":170},[111,292,254],{"class":170},[111,294,295],{"class":170}," [\n",[111,297,298],{"class":113,"line":138},[111,299,300],{"class":170},"    {\n",[111,302,303,306,309,311,313,315,318,320],{"class":113,"line":214},[111,304,305],{"class":170},"      \"",[111,307,308],{"class":154},"b64_json",[111,310,180],{"class":170},[111,312,254],{"class":170},[111,314,171],{"class":170},[111,316,317],{"class":157},"iVBORw0KGgoAAAANS...",[111,319,180],{"class":170},[111,321,261],{"class":170},[111,323,324,326,329,331,333,335,338,340],{"class":113,"line":220},[111,325,305],{"class":170},[111,327,328],{"class":154},"url",[111,330,180],{"class":170},[111,332,254],{"class":170},[111,334,171],{"class":170},[111,336,337],{"class":157},"https://bothub-api.bookab.info/v1/tasks/\u003Ctask>/artifacts/\u003Cartifact>",[111,339,180],{"class":170},[111,341,261],{"class":170},[111,343,345,347,350,352,354,356,359],{"class":113,"line":344},8,[111,346,305],{"class":170},[111,348,349],{"class":154},"revised_prompt",[111,351,180],{"class":170},[111,353,254],{"class":170},[111,355,171],{"class":170},[111,357,358],{"class":157},"An orange tabby cat wearing an astronaut helmet, oil painting",[111,360,361],{"class":170},"\"\n",[111,363,365],{"class":113,"line":364},9,[111,366,367],{"class":170},"    }\n",[111,369,371],{"class":113,"line":370},10,[111,372,373],{"class":170},"  ]\n",[111,375,377],{"class":113,"line":376},11,[111,378,379],{"class":170},"}\n",[90,381,382,383,387,388,390,391,393,394,397,398,401],{},"默认",[384,385,386],"strong",{},"两种形态都会给","：",[93,389,308],{}," 是图片字节，",[93,392,328],{}," 指向同一张图（下载时同样需要带你的\nAPI Key）。想只要其中一种，传 ",[93,395,396],{},"\"response_format\": \"b64_json\""," 或 ",[93,399,400],{},"\"url\"","。",[403,404,405],"h3",{"id":405},"这个请求会挂多久",[90,407,408,409,412],{},"生图要花时间，",[384,410,411],{},"这个 HTTP 请求会一直等到图片生成完","，通常几十秒。默认最多等 5 分钟。",[90,414,415],{},"所以：把客户端的超时设长一些。OpenAI SDK 的默认超时对生图往往不够：",[101,417,419],{"className":103,"code":418,"language":106,"meta":107,"style":107},"client = OpenAI(\n    base_url=\"https://bothub-api.bookab.info/v1\",\n    api_key=\"bhk_live_xxxxxxxx\",\n    timeout=600.0,   # 秒\n)\n",[93,420,421,426,431,436,441],{"__ignoreMap":107},[111,422,423],{"class":113,"line":114},[111,424,425],{},"client = OpenAI(\n",[111,427,428],{"class":113,"line":120},[111,429,430],{},"    base_url=\"https://bothub-api.bookab.info/v1\",\n",[111,432,433],{"class":113,"line":126},[111,434,435],{},"    api_key=\"bhk_live_xxxxxxxx\",\n",[111,437,438],{"class":113,"line":132},[111,439,440],{},"    timeout=600.0,   # 秒\n",[111,442,443],{"class":113,"line":138},[111,444,135],{},[90,446,447,448,451,452,455,456,459,460,463],{},"如果等待超过了上限，你会收到 ",[93,449,450],{},"504"," + ",[93,453,454],{},"IMAGE_GENERATION_TIMEOUT","——",[384,457,458],{},"任务并没有被取消，\n它还在跑","。响应的 ",[93,461,462],{},"detail"," 里带着 task id，用它去拿结果：",[101,465,467],{"className":232,"code":466,"language":234,"meta":107,"style":107},"{\n  \"error\": {\n    \"message\": \"Image generation did not finish within 300s. The task is still running — poll GET /v1/tasks/\u003Ctask> to collect the result.\",\n    \"type\": \"invalid_request_error\",\n    \"code\": \"image_generation_timeout\",\n    \"detail\": { \"taskId\": \"...\", \"statusUrl\": \"/v1/tasks/...\" }\n  }\n}\n",[93,468,469,473,487,508,528,547,598,603],{"__ignoreMap":107},[111,470,471],{"class":113,"line":114},[111,472,206],{"class":170},[111,474,475,477,480,482,484],{"class":113,"line":120},[111,476,245],{"class":170},[111,478,479],{"class":248},"error",[111,481,180],{"class":170},[111,483,254],{"class":170},[111,485,486],{"class":170}," {\n",[111,488,489,492,495,497,499,501,504,506],{"class":113,"line":126},[111,490,491],{"class":170},"    \"",[111,493,494],{"class":154},"message",[111,496,180],{"class":170},[111,498,254],{"class":170},[111,500,171],{"class":170},[111,502,503],{"class":157},"Image generation did not finish within 300s. The task is still running — poll GET /v1/tasks/\u003Ctask> to collect the result.",[111,505,180],{"class":170},[111,507,261],{"class":170},[111,509,510,512,515,517,519,521,524,526],{"class":113,"line":132},[111,511,491],{"class":170},[111,513,514],{"class":154},"type",[111,516,180],{"class":170},[111,518,254],{"class":170},[111,520,171],{"class":170},[111,522,523],{"class":157},"invalid_request_error",[111,525,180],{"class":170},[111,527,261],{"class":170},[111,529,530,532,534,536,538,540,543,545],{"class":113,"line":138},[111,531,491],{"class":170},[111,533,93],{"class":154},[111,535,180],{"class":170},[111,537,254],{"class":170},[111,539,171],{"class":170},[111,541,542],{"class":157},"image_generation_timeout",[111,544,180],{"class":170},[111,546,261],{"class":170},[111,548,549,551,553,555,557,560,562,565,567,569,571,574,576,579,581,584,586,588,590,593,595],{"class":113,"line":214},[111,550,491],{"class":170},[111,552,462],{"class":154},[111,554,180],{"class":170},[111,556,254],{"class":170},[111,558,559],{"class":170}," {",[111,561,171],{"class":170},[111,563,564],{"class":257},"taskId",[111,566,180],{"class":170},[111,568,254],{"class":170},[111,570,171],{"class":170},[111,572,573],{"class":157},"...",[111,575,180],{"class":170},[111,577,578],{"class":170},",",[111,580,171],{"class":170},[111,582,583],{"class":257},"statusUrl",[111,585,180],{"class":170},[111,587,254],{"class":170},[111,589,171],{"class":170},[111,591,592],{"class":157},"/v1/tasks/...",[111,594,180],{"class":170},[111,596,597],{"class":170}," }\n",[111,599,600],{"class":113,"line":220},[111,601,602],{"class":170},"  }\n",[111,604,605],{"class":113,"line":344},[111,606,379],{"class":170},[608,609,610,611,614],"warning",{},"反过来，",[384,612,613],{},"如果你在等待中途断开连接，任务会被立刻取消","。这是为了不让上游在没人要结果的\n情况下继续消耗你的余额。不要用一个短超时去「试一下」——那等于每次都白跑。",[403,616,617],{"id":617},"一次出多张",[90,619,620,621,387],{},"传 ",[93,622,623],{},"n",[101,625,627],{"className":232,"code":626,"language":234,"meta":107,"style":107},"{ \"model\": \"gpt-image-2.5\", \"prompt\": \"...\", \"n\": 3 }\n",[93,628,629],{"__ignoreMap":107},[111,630,631,634,636,638,640,642,644,646,648,650,652,655,657,659,661,663,665,667,669,671,673,675,678],{"class":113,"line":114},[111,632,633],{"class":170},"{",[111,635,171],{"class":170},[111,637,268],{"class":248},[111,639,180],{"class":170},[111,641,254],{"class":170},[111,643,171],{"class":170},[111,645,277],{"class":157},[111,647,180],{"class":170},[111,649,578],{"class":170},[111,651,171],{"class":170},[111,653,654],{"class":248},"prompt",[111,656,180],{"class":170},[111,658,254],{"class":170},[111,660,171],{"class":170},[111,662,573],{"class":157},[111,664,180],{"class":170},[111,666,578],{"class":170},[111,668,171],{"class":170},[111,670,623],{"class":248},[111,672,180],{"class":170},[111,674,254],{"class":170},[111,676,677],{"class":257}," 3",[111,679,597],{"class":170},[90,681,682],{},"实际张数受模型本身的上限约束，超出会被截到上限。",[85,684,686],{"id":685},"生图异步模式","生图：异步模式",[90,688,689,690,693,694,387],{},"不想让请求挂着，就转异步——传 ",[93,691,692],{},"\"async\": true","，或带上请求头 ",[93,695,696],{},"X-BotHub-Async: true",[101,698,700],{"className":144,"code":699,"language":147,"meta":107,"style":107},"curl https://bothub-api.bookab.info/v1/images/generations \\\n  -H \"Authorization: Bearer $BOTHUB_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-BotHub-Async: true\" \\\n  -d '{\"model\": \"gpt-image-2.5\", \"prompt\": \"一只橘猫\"}'\n",[93,701,702,710,724,736,748],{"__ignoreMap":107},[111,703,704,706,708],{"class":113,"line":114},[111,705,146],{"class":154},[111,707,158],{"class":157},[111,709,162],{"class":161},[111,711,712,714,716,718,720,722],{"class":113,"line":120},[111,713,167],{"class":157},[111,715,171],{"class":170},[111,717,174],{"class":157},[111,719,177],{"class":161},[111,721,180],{"class":170},[111,723,162],{"class":161},[111,725,726,728,730,732,734],{"class":113,"line":126},[111,727,167],{"class":157},[111,729,171],{"class":170},[111,731,191],{"class":157},[111,733,180],{"class":170},[111,735,162],{"class":161},[111,737,738,740,742,744,746],{"class":113,"line":132},[111,739,167],{"class":157},[111,741,171],{"class":170},[111,743,696],{"class":157},[111,745,180],{"class":170},[111,747,162],{"class":161},[111,749,750,752,754,757],{"class":113,"line":138},[111,751,200],{"class":157},[111,753,203],{"class":170},[111,755,756],{"class":157},"{\"model\": \"gpt-image-2.5\", \"prompt\": \"一只橘猫\"}",[111,758,226],{"class":170},[90,760,761,762,387],{},"立刻返回 ",[93,763,764],{},"202",[101,766,768],{"className":232,"code":767,"language":234,"meta":107,"style":107},"{\n  \"id\": \"7f2c...\",\n  \"kind\": \"image\",\n  \"status\": \"pending\",\n  \"model\": \"gpt-image-2.5\",\n  \"status_url\": \"/v1/tasks/7f2c...\",\n  \"result_urls\": [],\n  \"thumbnail_urls\": [],\n  \"error_code\": \"\",\n  \"error_message\": \"\"\n}\n",[93,769,770,774,794,814,834,852,872,886,899,915,929],{"__ignoreMap":107},[111,771,772],{"class":113,"line":114},[111,773,206],{"class":170},[111,775,776,778,781,783,785,787,790,792],{"class":113,"line":120},[111,777,245],{"class":170},[111,779,780],{"class":248},"id",[111,782,180],{"class":170},[111,784,254],{"class":170},[111,786,171],{"class":170},[111,788,789],{"class":157},"7f2c...",[111,791,180],{"class":170},[111,793,261],{"class":170},[111,795,796,798,801,803,805,807,810,812],{"class":113,"line":126},[111,797,245],{"class":170},[111,799,800],{"class":248},"kind",[111,802,180],{"class":170},[111,804,254],{"class":170},[111,806,171],{"class":170},[111,808,809],{"class":157},"image",[111,811,180],{"class":170},[111,813,261],{"class":170},[111,815,816,818,821,823,825,827,830,832],{"class":113,"line":132},[111,817,245],{"class":170},[111,819,820],{"class":248},"status",[111,822,180],{"class":170},[111,824,254],{"class":170},[111,826,171],{"class":170},[111,828,829],{"class":157},"pending",[111,831,180],{"class":170},[111,833,261],{"class":170},[111,835,836,838,840,842,844,846,848,850],{"class":113,"line":138},[111,837,245],{"class":170},[111,839,268],{"class":248},[111,841,180],{"class":170},[111,843,254],{"class":170},[111,845,171],{"class":170},[111,847,277],{"class":157},[111,849,180],{"class":170},[111,851,261],{"class":170},[111,853,854,856,859,861,863,865,868,870],{"class":113,"line":214},[111,855,245],{"class":170},[111,857,858],{"class":248},"status_url",[111,860,180],{"class":170},[111,862,254],{"class":170},[111,864,171],{"class":170},[111,866,867],{"class":157},"/v1/tasks/7f2c...",[111,869,180],{"class":170},[111,871,261],{"class":170},[111,873,874,876,879,881,883],{"class":113,"line":220},[111,875,245],{"class":170},[111,877,878],{"class":248},"result_urls",[111,880,180],{"class":170},[111,882,254],{"class":170},[111,884,885],{"class":170}," [],\n",[111,887,888,890,893,895,897],{"class":113,"line":344},[111,889,245],{"class":170},[111,891,892],{"class":248},"thumbnail_urls",[111,894,180],{"class":170},[111,896,254],{"class":170},[111,898,885],{"class":170},[111,900,901,903,906,908,910,913],{"class":113,"line":364},[111,902,245],{"class":170},[111,904,905],{"class":248},"error_code",[111,907,180],{"class":170},[111,909,254],{"class":170},[111,911,912],{"class":170}," \"\"",[111,914,261],{"class":170},[111,916,917,919,922,924,926],{"class":113,"line":370},[111,918,245],{"class":170},[111,920,921],{"class":248},"error_message",[111,923,180],{"class":170},[111,925,254],{"class":170},[111,927,928],{"class":170}," \"\"\n",[111,930,931],{"class":113,"line":376},[111,932,379],{"class":170},[90,934,935,936,939,940,942,943,946,947,950,951,953],{},"轮询 ",[93,937,938],{},"GET /v1/tasks/{id}"," 直到 ",[93,941,820],{}," 变成 ",[93,944,945],{},"done","（或 ",[93,948,949],{},"failed","），然后从 ",[93,952,878],{},"\n下载图片（带 API Key）。",[955,956,957,958,961],"note",{},"这个形态是 BotHub 自己的，不是 OpenAI 格式——OpenAI SDK 的 ",[93,959,960],{},"images.generate()"," 解析不了它。\n用异步模式时请直接发 HTTP 请求。",[90,963,964,966,967,969,970,973,974,976,977,401],{},[93,965,820],{}," 的取值：",[93,968,829],{},"（排队中）、",[93,971,972],{},"running","（生成中）、",[93,975,945],{},"、",[93,978,949],{},[85,980,981],{"id":981},"图片编辑",[90,983,984,985,387],{},"编辑走原生任务接口 ",[93,986,987],{},"POST /v1/tasks",[101,989,991],{"className":144,"code":990,"language":147,"meta":107,"style":107},"curl https://bothub-api.bookab.info/v1/tasks \\\n  -H \"Authorization: Bearer $BOTHUB_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"kind\": \"image\",\n    \"operation\": \"edit\",\n    \"model\": \"gpt-image-2.5\",\n    \"input\": {\n      \"prompt\": \"把背景换成星空\",\n      \"image_urls\": [\"https://example.com/cat.png\"]\n    }\n  }'\n",[93,992,993,1002,1016,1028,1036,1041,1046,1050,1055,1060,1065,1069],{"__ignoreMap":107},[111,994,995,997,1000],{"class":113,"line":114},[111,996,146],{"class":154},[111,998,999],{"class":157}," https://bothub-api.bookab.info/v1/tasks",[111,1001,162],{"class":161},[111,1003,1004,1006,1008,1010,1012,1014],{"class":113,"line":120},[111,1005,167],{"class":157},[111,1007,171],{"class":170},[111,1009,174],{"class":157},[111,1011,177],{"class":161},[111,1013,180],{"class":170},[111,1015,162],{"class":161},[111,1017,1018,1020,1022,1024,1026],{"class":113,"line":126},[111,1019,167],{"class":157},[111,1021,171],{"class":170},[111,1023,191],{"class":157},[111,1025,180],{"class":170},[111,1027,162],{"class":161},[111,1029,1030,1032,1034],{"class":113,"line":132},[111,1031,200],{"class":157},[111,1033,203],{"class":170},[111,1035,206],{"class":157},[111,1037,1038],{"class":113,"line":138},[111,1039,1040],{"class":157},"    \"kind\": \"image\",\n",[111,1042,1043],{"class":113,"line":214},[111,1044,1045],{"class":157},"    \"operation\": \"edit\",\n",[111,1047,1048],{"class":113,"line":220},[111,1049,211],{"class":157},[111,1051,1052],{"class":113,"line":344},[111,1053,1054],{"class":157},"    \"input\": {\n",[111,1056,1057],{"class":113,"line":364},[111,1058,1059],{"class":157},"      \"prompt\": \"把背景换成星空\",\n",[111,1061,1062],{"class":113,"line":370},[111,1063,1064],{"class":157},"      \"image_urls\": [\"https://example.com/cat.png\"]\n",[111,1066,1067],{"class":113,"line":376},[111,1068,367],{"class":157},[111,1070,1072,1074],{"class":113,"line":1071},12,[111,1073,223],{"class":157},[111,1075,226],{"class":170},[90,1077,1078,1079,1081],{},"返回同样是 ",[93,1080,764],{}," + 任务体，轮询方式与上面一致。",[608,1083,1084,1087,1088,1091,1092,1095,1096,1099],{},[93,1085,1086],{},"image_urls"," 里必须是",[384,1089,1090],{},"上游能直接读到的地址","：公网 URL 或 ",[93,1093,1094],{},"data:"," URI。填本地路径\n（比如 ",[93,1097,1098],{},"/Users/me/cat.png","）会被拒绝并告诉你原因——它不会被悄悄忽略。",[85,1101,1102],{"id":1102},"视频生成",[90,1104,1105,1108,1109,387],{},[93,1106,1107],{},"POST /v1/videos","，视频天然是分钟级的，所以",[384,1110,1111],{},"只有异步形态",[101,1113,1115],{"className":144,"code":1114,"language":147,"meta":107,"style":107},"curl https://bothub-api.bookab.info/v1/videos \\\n  -H \"Authorization: Bearer $BOTHUB_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"model\": \"\u003C视频模型 id>\",\n    \"prompt\": \"一只猫在雪地里奔跑，电影感运镜\",\n    \"seconds\": 5\n  }'\n",[93,1116,1117,1126,1140,1152,1160,1165,1170,1175],{"__ignoreMap":107},[111,1118,1119,1121,1124],{"class":113,"line":114},[111,1120,146],{"class":154},[111,1122,1123],{"class":157}," https://bothub-api.bookab.info/v1/videos",[111,1125,162],{"class":161},[111,1127,1128,1130,1132,1134,1136,1138],{"class":113,"line":120},[111,1129,167],{"class":157},[111,1131,171],{"class":170},[111,1133,174],{"class":157},[111,1135,177],{"class":161},[111,1137,180],{"class":170},[111,1139,162],{"class":161},[111,1141,1142,1144,1146,1148,1150],{"class":113,"line":126},[111,1143,167],{"class":157},[111,1145,171],{"class":170},[111,1147,191],{"class":157},[111,1149,180],{"class":170},[111,1151,162],{"class":161},[111,1153,1154,1156,1158],{"class":113,"line":132},[111,1155,200],{"class":157},[111,1157,203],{"class":170},[111,1159,206],{"class":157},[111,1161,1162],{"class":113,"line":138},[111,1163,1164],{"class":157},"    \"model\": \"\u003C视频模型 id>\",\n",[111,1166,1167],{"class":113,"line":214},[111,1168,1169],{"class":157},"    \"prompt\": \"一只猫在雪地里奔跑，电影感运镜\",\n",[111,1171,1172],{"class":113,"line":220},[111,1173,1174],{"class":157},"    \"seconds\": 5\n",[111,1176,1177,1179],{"class":113,"line":344},[111,1178,223],{"class":157},[111,1180,226],{"class":170},[90,1182,1183,1184,387],{},"返回 ",[93,1185,764],{},[101,1187,1189],{"className":232,"code":1188,"language":234,"meta":107,"style":107},"{\n  \"id\": \"9a1b...\",\n  \"object\": \"video\",\n  \"status\": \"queued\",\n  \"status_url\": \"/v1/videos/9a1b...\",\n  \"result_url\": null,\n  \"error\": null\n}\n",[93,1190,1191,1195,1214,1234,1253,1272,1286,1299],{"__ignoreMap":107},[111,1192,1193],{"class":113,"line":114},[111,1194,206],{"class":170},[111,1196,1197,1199,1201,1203,1205,1207,1210,1212],{"class":113,"line":120},[111,1198,245],{"class":170},[111,1200,780],{"class":248},[111,1202,180],{"class":170},[111,1204,254],{"class":170},[111,1206,171],{"class":170},[111,1208,1209],{"class":157},"9a1b...",[111,1211,180],{"class":170},[111,1213,261],{"class":170},[111,1215,1216,1218,1221,1223,1225,1227,1230,1232],{"class":113,"line":126},[111,1217,245],{"class":170},[111,1219,1220],{"class":248},"object",[111,1222,180],{"class":170},[111,1224,254],{"class":170},[111,1226,171],{"class":170},[111,1228,1229],{"class":157},"video",[111,1231,180],{"class":170},[111,1233,261],{"class":170},[111,1235,1236,1238,1240,1242,1244,1246,1249,1251],{"class":113,"line":132},[111,1237,245],{"class":170},[111,1239,820],{"class":248},[111,1241,180],{"class":170},[111,1243,254],{"class":170},[111,1245,171],{"class":170},[111,1247,1248],{"class":157},"queued",[111,1250,180],{"class":170},[111,1252,261],{"class":170},[111,1254,1255,1257,1259,1261,1263,1265,1268,1270],{"class":113,"line":138},[111,1256,245],{"class":170},[111,1258,858],{"class":248},[111,1260,180],{"class":170},[111,1262,254],{"class":170},[111,1264,171],{"class":170},[111,1266,1267],{"class":157},"/v1/videos/9a1b...",[111,1269,180],{"class":170},[111,1271,261],{"class":170},[111,1273,1274,1276,1279,1281,1283],{"class":113,"line":214},[111,1275,245],{"class":170},[111,1277,1278],{"class":248},"result_url",[111,1280,180],{"class":170},[111,1282,254],{"class":170},[111,1284,1285],{"class":170}," null,\n",[111,1287,1288,1290,1292,1294,1296],{"class":113,"line":220},[111,1289,245],{"class":170},[111,1291,479],{"class":248},[111,1293,180],{"class":170},[111,1295,254],{"class":170},[111,1297,1298],{"class":170}," null\n",[111,1300,1301],{"class":113,"line":344},[111,1302,379],{"class":170},[1304,1305,1306,1328],"ul",{},[1307,1308,1309,1312,1313,1315,1316,1318,1319,1318,1322,1325,1326],"li",{},[93,1310,1311],{},"GET /v1/videos/{id}"," — 查状态，",[93,1314,820],{}," 走 ",[93,1317,1248],{}," → ",[93,1320,1321],{},"in_progress",[93,1323,1324],{},"completed"," / ",[93,1327,949],{},[1307,1329,1330,1333],{},[93,1331,1332],{},"GET /v1/videos/{id}/content"," — 完成后下载视频文件",[85,1335,1336],{"id":1336},"任务和产物的保留时间",[90,1338,1339],{},"生成的任务与产物保留 24 小时，之后会被清理。需要长期保存的话请及时下载。",[85,1341,1342],{"id":1342},"幂等",[90,1344,1345,1346,976,1348,976,1351,1354,1355,1358],{},"给 ",[93,1347,95],{},[93,1349,1350],{},"/v1/videos",[93,1352,1353],{},"/v1/tasks"," 带上 ",[93,1356,1357],{},"Idempotency-Key"," 请求头，\n重复提交同一个 key 会拿回同一个任务，不会重复生成、也不会重复扣费。网络不稳时值得加上。",[90,1360,1361,1362,1365,1366,1369],{},"注意：同一个 key 配上",[384,1363,1364],{},"不一样的请求体","会返回 ",[93,1367,1368],{},"409"," —— 换请求内容时也要换 key。",[1371,1372,1373],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":107,"searchDepth":120,"depth":120,"links":1375},[1376,1380,1381,1382,1383,1384],{"id":87,"depth":120,"text":88,"children":1377},[1378,1379],{"id":405,"depth":126,"text":405},{"id":617,"depth":126,"text":617},{"id":685,"depth":120,"text":686},{"id":981,"depth":120,"text":981},{"id":1102,"depth":120,"text":1102},{"id":1336,"depth":120,"text":1336},{"id":1342,"depth":120,"text":1342},"同步拿图、异步任务、图片编辑与视频生成。","md",null,{},true,{"title":72,"description":1385},"i9NC5Pc8nZC6jpDd5vdkFb13SBk-pcnBIJ8MzTr1R8o",[1393,1395],{"title":68,"path":69,"stem":70,"description":1394,"children":-1},"Chat Completions、Responses 与 Embeddings 接口。",{"title":76,"path":77,"stem":78,"description":1396,"children":-1},"错误码含义、排查顺序、速率与消费限额，以及余额怎么扣。",1790522452945]