Qwen 圖片文字轉圖片快速入門:從提示詞生成圖片

Qwen 圖片文字轉圖片快速入門:從提示詞生成圖片

Novita AI 上的 Qwen Image 文字轉圖片 API 使用 20B 參數的 Qwen Image 模型,從文字提示詞生成圖片——這與 Qwen Image 編輯 API 採用相同的基礎模型,以實現精確的編輯任務。本快速入門涵蓋完整的非同步工作流程:提交生成請求、取得任務 ID、輪詢直到完成,以及取得圖片 URL。端點為 POST https://api.novita.ai/v3/async/qwen-image-txt2img

何時使用本快速入門

當您需要以下功能時,請參考本指南:

  • 使用 POST /v3/async/qwen-image-txt2img 從文字提示詞生成圖片,支援英文或中文的高品質文字渲染。
  • 建立需要圖像內文字可讀性的海報、圖形素材或插圖內容的處理流程。
  • 快速針對託管 API 進行原型開發,而非在本地 GPU 基礎設施上執行 20B 模型。

Qwen Image 模型在生成內嵌可讀、有風格文字的圖片方面表現尤為出色——例如海報、標誌、產品模型和封面圖形。如果您的使用案例是編輯現有圖片而非從頭生成,請參閱 Qwen Image 編輯 API。如果您想全面了解 Qwen Image 模型的能力與基準測試結果,Novita AI 的 Qwen Image 發佈文章 詳細介紹了架構與基準測試結果。

步驟 1:取得您的 Novita API 金鑰

建立一個 Novita AI 帳戶,並導航至 API 金鑰管理 頁面。生成一個金鑰並將其儲存為環境變數:

export NOVITA_API_KEY="your_api_key_here"

請將金鑰妥善保管,避免出現在客戶端程式碼、前端程式碼套件或版本控制系統中。

步驟 2:確認端點與模型

項目
生成端點 POST https://api.novita.ai/v3/async/qwen-image-txt2img
結果輪詢端點 GET https://api.novita.ai/v3/async/task-result?task_id=<id>
模型 Qwen Image (20B MMDiT)
API 文件 Novita AI Qwen Image txt2img 參考

此 API 遵循 Novita AI 所有圖片生成端點通用的兩步驟非同步模式。生成呼叫僅返回一個 task_id;您需要單獨輪詢結果端點,直到任務完成。

定價為每張圖片 $0.02 美元,與 Qwen Image 編輯端點一致。在建立成本估算前,請先至 Novita AI 定價頁面 確認當前費率。

步驟 3:發送您的第一個請求

使用 prompt 和可選的 size 參數向生成端點發送 POST 請求:

curl -s -X POST https://api.novita.ai/v3/async/qwen-image-txt2img \
  -H "Authorization: Bearer $NOVITA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "A cinematic mountain landscape at sunrise, warm golden light, ultra-detailed, 8K",
    "size": "1024*1024"
  }'

成功時返回的 200 回應內容為:

{
  "task_id": "abc123..."
}

請儲存此 task_id。您將在下一個步驟中使用它。

步驟 4:輪詢以取得結果

使用 task_id 作為查詢參數,向任務結果端點發送 GET 請求:

curl -s "https://api.novita.ai/v3/async/task-result?task_id=abc123..." \
  -H "Authorization: Bearer $NOVITA_API_KEY"

回應中包含一個 status 欄位。持續輪詢直到狀態變為 TASK_STATUS_SUCCEED

{
  "task": {
    "task_id": "abc123...",
    "status": "TASK_STATUS_SUCCEED"
  },
  "images": [
    {
      "image_url": "https://...",
      "image_url_ttl": "3600",
      "image_type": "png"
    }
  ]
}

image_url 是一個有時效性的 URL——image_url_ttl 值(以秒為單位)告訴您該 URL 的有效期限。請立即下載圖片,或如果您需要長期存取,請透過您自己的儲存空間進行代理。

需要處理的狀態值:

狀態 意義
TASK_STATUS_QUEUED 請求已排入佇列,尚未開始處理
TASK_STATUS_PROCESSING 生成進行中
TASK_STATUS_SUCCEED 圖片已就緒;讀取 images[0].image_url
TASK_STATUS_FAILED 生成失敗;檢查 task.reason

Python 範例:完整流程

此腳本提交一個生成請求,輪詢直到完成,並列印圖片 URL。

import os
import time
import requests

API_KEY = os.environ["NOVITA_API_KEY"]
BASE_URL = "https://api.novita.ai"


def generate_image(prompt: str, size: str = "1024*1024") -> str:
    response = requests.post(
        f"{BASE_URL}/v3/async/qwen-image-txt2img",
        headers={
            "Authorization": f"Bearer {API_KEY}",
            "Content-Type": "application/json",
        },
        json={"prompt": prompt, "size": size},
    )
    response.raise_for_status()
    return response.json()["task_id"]


def poll_result(task_id: str, interval: float = 2.0, max_attempts: int = 60) -> str:
    for _ in range(max_attempts):
        response = requests.get(
            f"{BASE_URL}/v3/async/task-result",
            headers={"Authorization": f"Bearer {API_KEY}"},
            params={"task_id": task_id},
        )
        response.raise_for_status()
        data = response.json()
        status = data["task"]["status"]

        if status == "TASK_STATUS_SUCCEED":
            return data["images"][0]["image_url"]
        elif status == "TASK_STATUS_FAILED":
            reason = data["task"].get("reason", "unknown")
            raise RuntimeError(f"Generation failed: {reason}")

        time.sleep(interval)

    raise TimeoutError(f"Task {task_id} did not complete after {max_attempts} polls")


if __name__ == "__main__":
    prompt = (
        "A poster reading 'Welcome to Novita AI' in bold neon letters "
        "against a dark city skyline at night, cinematic lighting"
    )
    task_id = generate_image(prompt, size="1024*1024")
    print(f"Task ID: {task_id}")

    image_url = poll_result(task_id)
    print(f"Image URL: {image_url}")

cURL 範例

完整工作流程的兩個指令模式:

# Step 1: Submit generation request
TASK_ID=$(curl -s -X POST https://api.novita.ai/v3/async/qwen-image-txt2img \
  -H "Authorization: Bearer $NOVITA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "A serene Japanese garden with cherry blossoms, koi pond, morning mist, watercolor style",
    "size": "1024*1536"
  }' | python3 -c "import sys,json; print(json.load(sys.stdin)['task_id'])")

echo "Task ID: $TASK_ID"

# Step 2: Poll until complete
while true; do
  STATUS=$(curl -s "https://api.novita.ai/v3/async/task-result?task_id=$TASK_ID" \
    -H "Authorization: Bearer $NOVITA_API_KEY")
  STATE=$(echo $STATUS | python3 -c "import sys,json; print(json.load(sys.stdin)['task']['status'])")
  echo "Status: $STATE"
  if [ "$STATE" = "TASK_STATUS_SUCCEED" ]; then
    echo $STATUS | python3 -c "import sys,json; print(json.load(sys.stdin)['images'][0]['image_url'])"
    break
  elif [ "$STATE" = "TASK_STATUS_FAILED" ]; then
    echo "Generation failed"
    break
  fi
  sleep 2
done

主要參數

參數 類型 必填 預設值 說明
prompt string 要生成的圖片的文字描述。支援英文和中文。
size string 1024*1024 以像素為單位的寬度 × 高度,格式為 W*H。每個維度範圍:256–1536。

可考慮的尺寸選項:

使用案例 建議尺寸
正方形(社交媒體、個人檔案) 1024*1024
直向(手機、海報) 1024*1536
橫向(橫幅、縮圖) 1536*1024

此端點沒有獨立的 negative_promptstepscfg_scale 參數——模型會在內部處理這些決策。請將您的提示詞專注於描述圖片應包含的內容及其視覺風格。

Qwen Image 擅長生成的內容

20B MMDiT 架構使 Qwen Image 在以下幾個特定領域具有明顯優勢:

圖片中的文字。 大多數圖片生成模型難以生成可讀的文字——文字會模糊、字母會錯位、多行佈局會崩潰。Qwen Image 處理英文和中文文字的準確度明顯更高。海報、標誌、標籤和附有說明的圖形都是可行的使用案例,而非碰運氣。

語義一致性。 當提示詞描述一個包含多個元素和特定空間關係的場景時,Qwen Image 傾向於比更小或更舊的架構更可靠地遵循佈局意圖。

大規模提示詞遵循。 描述多個屬性——場景、光線、風格、色調、特定物件——的詳細長提示詞所產生的輸出,能夠反映整個提示詞,而非僅鎖定某個關鍵字。

較不適合的地方:即時或互動式生成工作流程。非同步模式意味著請求和結果之間存在固有延遲。如果您的使用案例需要次秒級回饋,此端點並非合適選擇。

常見錯誤與解決方法

401 Unauthorized:檢查 Authorization 標頭是否格式化為 Bearer <key>,並在 Bearer 後有一個空格。確認金鑰在 Novita AI 控制台 中處於啟用狀態。

400 Bad Request 關於 sizesize 參數必須使用 * 作為分隔符(例如 1024*1024),不能使用 x× 或 JSON 陣列。每個維度必須在 256 到 1536 之間。

TASK_STATUS_FAILED 但無原因:通常由觸發內容過濾機制的提示詞引起。請簡化提示詞並重試。避免使用包含明確暴力、色情內容或可能觸發安全過濾器的提示詞。

圖片 URL 過期(URL 返回 403 或 404)image_url_ttl 欄位告訴您 URL 的有效期限。請在輪詢成功後立即下載圖片,或將其儲存在您自己的物件儲存中。

輪詢速度慢:生成時間因伺服器負載而異。以 2 秒間隔開始輪詢是合理的。如果任務在 10 秒後仍處於 TASK_STATUS_QUEUED 狀態,請繼續輪詢——在尖峰使用時段佇列深度可能會增加。

常見問題

Qwen Image txt2img 是否有與 OpenAI 相容的端點?

沒有。/v3/async/qwen-image-txt2img 端點使用 Novita AI 的原生非同步圖片 API,而非 OpenAI 的圖片生成格式。如果您需要與 OpenAI 相容的圖片生成,Novita AI 透過相容端點提供 FLUX 和 SDXL 模型——請參閱 Novita AI 文件

此端點與 Qwen Image 編輯端點有何不同?

此端點僅根據文字提示詞生成圖片——無需輸入圖片。Qwen Image 編輯端點 則接受一張現有圖片加上文字指令,並據此修改圖片。當您從頭創作時使用 txt2img;當您需要修改現有圖片中的某些內容時使用編輯功能。

模型是否支援非正方形的寬高比?

是的。使用 size 參數獨立設定寬度和高度,每個維度範圍從 256 到 1536 像素。較高的比例(例如 1024*1536)適合直向內容;較寬的比例(例如 1536*1024)適合橫幅和縮圖。

如何在不同生成之間獲得一致的結果?

txt2img 端點沒有 seed 參數。每個請求都會產生不同的結果。如果您需要可重現的輸出,請立即儲存圖片 URL 並將圖片存放到您自己的儲存空間,而非重新生成。

我可以在批次作業中使用此 API 嗎?

可以。提交多個生成請求並收集任務 ID,然後並行輪詢它們。每個請求都會返回自己的 task_id,因此批次工作流程非常簡單——您無需等待一個完成後再提交下一個。

推薦文章