積木 → 未來建築 → 3D 模型

上傳小朋友疊好的積木照片,由 Gemini 轉換為未來感建築,再透過 Tripo3D 生成可下載的 3D 模型。

查看積木轉建築圖片列表(ID / 日期)

1
2
3

① 上傳積木 ② AI 生未來建築(Gemini / GPT Image) ③ Tripo3D 生 3D 模型(可跳過)

1 上傳積木照片

2 生成設定

僅 OpenAI 生圖有效;Gemini 由模型自行決定尺寸與品質。

圖片審查 API 測試

獨立呼叫 ChatGPT Vision 或 Gemini 內容安全審查與積木分析,不觸發生圖流程

檢查審查 API...

上傳測試圖片

操作

也可透過 API 文件區查看 curl 範例與回應格式。

積木轉建築圖片查詢 API 測試

呼叫 GET /api/images/blocks-to-3d,可用 id 或日期篩選(與 gemini.html 分開)

開啟完整列表頁 →

操作

生圖完成後,將 building_ai_id 填入 id 欄位並按「發送 ID」;發送後 latest 才會取得該圖片。

Latest API 呼叫記錄

記錄誰在呼叫 GET /api/images/blocks-to-3d/latest,含來源 IP、客戶端、回傳 ID 與耗時

使用說明

  1. 上傳小朋友疊好的積木照片(輪廓越清楚效果越好)。
  2. 選擇建築風格分類與編號(1~10),系統會自動套用內建風格參考圖與 prompt。
  3. 點「開始轉換」,系統會先呼叫生圖模型(Gemini 或 GPT Image)生成建築圖,再自動送 Tripo3D 建立 3D 模型。
  4. 若只想看 AI 建築圖,勾選「只生成建築圖(跳過 3D 建模)」,完成後可直接下載建築圖。
  5. 3D 建模約需 1~3 分鐘,完成後可預覽、下載 GLB,新模型也會出現在 3D 島嶼

API 使用說明

完整呼叫流程

  1. 啟動生圖:POST /api/pipeline/blocks-to-3d,取得 job_id;此時 building_ai_id 為 null。
  2. 輪詢 Job:每 2 秒 GET /api/pipeline/blocks-to-3d/job/{job_id},直到 job.statusdoneerror
  3. 取得圖片 ID:完成後讀取 job.building_ai_id(或 job.data.building_ai_id)及 job.userID
  4. 發送圖片:POST /api/images/blocks-to-3d/build_send,傳入取得的 building_ai_id
  5. 讀取 Latest:GET /api/images/blocks-to-3d/latest;只有經 build_send 發送的圖片才會出現。
POST blocks-to-3d
  → job_id
  → GET job/{job_id}(每 2 秒)
  → status=done + building_ai_id
  → POST build_send(building_ai_id)
  → GET latest

1. 一鍵流程 — POST /api/pipeline/blocks-to-3d

欄位必填說明
image積木照片(也支援 file / blocks_image)
type建築風格分類:AI_FactoryE_commerce_BuildingHealthcare_IndustryTalent_Policy
id風格編號 1~10(對應內建參考圖與 description)
userID使用者識別字串,最多 200 字元;會隨圖片儲存,job 與 latest 均會回傳
prompt可選覆寫;省略則用伺服器已儲存的「共用範本 + 該 type/id description」
image_sizeOpenAI 生圖尺寸:512x512816x8161024x1024(預設)
image_qualityOpenAI 生圖品質:low(預設)、mediumhigh
gemini_model預設 gpt-image-2(OpenAI);亦可傳 gemini-3.1-flash-image 等改用 Gemini 生圖
providergemini 或 openai,省略則依 gemini_model 自動判斷
skip_3d1(預設):只生成建築圖、不執行 Tripo3D;設 0 才進行 3D 建模
enable_moderation0(預設):不執行照片審查;設 1 則平行執行審查並顯示意見(不阻擋生圖),見下方 審查 API 測試
moderation_provider審查後端(enable_moderation=1 時有效):openaigemini
modelTripo3D 模型版本,預設 v3.0-20250812(可選 v3.1-20260211 / v2.5-20250123)
texture1 或 0,預設 1
smart_low_poly1 或 0,預設 1
curl -X POST "https://techart.tronk.tw/face_lineart/api/pipeline/blocks-to-3d" \
  -F "image=@./blocks.jpg" \
  -F "type=AI_Factory" \
  -F "id=3" \
  -F "userID=user-001" \
  -F "gemini_model=gpt-image-2" \
  -F "skip_3d=1"

立即回應(圖片尚未生成,所以 building_ai_id 為 null):

{
  "success": true,
  "job_id": "88eb0f2641e642cf9ac11624950f7e38",
  "building_ai_id": null,
  "userID": "user-001",
  "blocks_image": "/uploads/blocks_input_..."
}

2. 輪詢生圖 Job — GET /api/pipeline/blocks-to-3d/job/<job_id>

使用步驟 1 回傳的 job_id,每 2 秒查詢一次。Job 約保留 1 小時。

status說明下一步
running生圖或後續流程進行中等待 2 秒後繼續輪詢
done圖片已生成並寫入資料庫讀取 building_ai_id,呼叫 build_send
error流程失敗讀取 job.error,不再輪詢
curl "https://techart.tronk.tw/face_lineart/api/pipeline/blocks-to-3d/job/88eb0f2641e642cf9ac11624950f7e38"

# status=done 回應重點
{
  "success": true,
  "job": {
    "status": "done",
    "stage": "done",
    "building_ai_id": 2242,
    "building_image": "/uploads/blocks_building_....jpg",
    "userID": "user-001",
    "data": {
      "building_ai_id": 2242,
      "building_image": "/uploads/blocks_building_....jpg",
      "userID": "user-001",
      "skip_3d": true
    }
  }
}

3. 獨立審查 — POST /api/moderation/analyze

僅審查與積木分析,不觸發生圖。頁面下方有測試區塊。

curl -X POST "https://techart.tronk.tw/face_lineart/api/moderation/analyze" \
  -F "image=@./blocks.jpg" \
  -F "moderation_provider=openai"

4. 輪詢 3D 任務 — GET /api/tripo3d/task/<tripo_task_id>

同 Tripo3D API,每 3 秒輪詢直到 status 為 success。

5. 服務狀態 — GET /api/pipeline/blocks-to-3d/status

{
  "success": true,
  "online": true,
  "gemini": { "online": true, "default_model": "gemini-3.1-flash-image" },
  "openai": { "online": true, "default_model": "gpt-image-2" },
  "tripo3d": { "online": true, "default_model": "v3.0-20250812" }
}

6. 更新 Prompt 範本 / Description

可在頁面上方直接編輯並儲存;也可呼叫 API。

# 更新共用範本(必須含 {description})
curl -X PUT "https://techart.tronk.tw/face_lineart/api/buildings/prompt-template" \
  -H "Content-Type: application/json" \
  -d "{\"prompt_template\":\"將第一張圖轉成第二張圖風格...\\n{description}\"}"

# 更新某 type/id 的 description
curl -X PUT "https://techart.tronk.tw/face_lineart/api/buildings/styles/AI_Factory/1" \
  -H "Content-Type: application/json" \
  -d "{\"description\":\"智慧製造與 AI 工廠風格...\"}"

7. 查詢積木轉建築圖片 — GET /api/images/blocks-to-3d

只回傳 source=blocks-to-3d 的圖片,可用 id 或日期篩選。可在上方 測試區塊 直接試用。

積木轉建築的圖片存在專屬資料表,id 是不與 gemini 生圖、上傳圖片共用的獨立連號序號。

參數必填說明
id單一 id,或逗號分隔多個(例如 120 / 120,125
date指定某一天,格式 YYYY-MM-DD
date_from起始日期(含當日),格式 YYYY-MM-DD
date_to結束日期(含當日),格式 YYYY-MM-DD
limit預設 100,上限 500
offset預設 0
# 依 id
curl "https://techart.tronk.tw/face_lineart/api/images/blocks-to-3d?id=120"

# 依日期
curl "https://techart.tronk.tw/face_lineart/api/images/blocks-to-3d?date=2026-07-10"

# 日期區間
curl "https://techart.tronk.tw/face_lineart/api/images/blocks-to-3d?date_from=2026-07-01&date_to=2026-07-10"

8. 發送建築圖 — POST /api/images/blocks-to-3d/build_send

傳入生圖完成後取得的 building_ai_id。只有經過此 API 發送的圖片才會出現在 latest;重複發送同一 ID 不會建立重複紀錄。

curl -X POST "https://techart.tronk.tw/face_lineart/api/images/blocks-to-3d/build_send" \
  -H "Content-Type: application/json" \
  -d "{\"building_ai_id\": 1421}"

9. 最新已發送圖片 ID — GET /api/images/blocks-to-3d/latest

回傳最近一次經 build_send 發送的圖片;尚未發送任何圖片時 id 為 null。

curl "https://techart.tronk.tw/face_lineart/api/images/blocks-to-3d/latest"

# 回應範例
{
  "success": true,
  "data": {
    "id": 1421,
    "building_ai_id": 1421,
    "userID": "user-001",
    "source": "blocks-to-3d",
    "created_at": "2026-07-10 00:58:39",
    "url": "https://techart.tronk.tw/face_lineart/uploads/blocks_building_....jpg",
    "relative_url": "/uploads/blocks_building_....jpg",
    "filename": "blocks_building_....jpg"
  }
}

10. Latest 呼叫記錄 — GET /api/images/blocks-to-3d/latest/logs

查詢誰呼叫過 latest,含來源 IP、客戶端、回傳的 ID 與耗時。記錄保留 30 天,時間為 UTC。可在上方 呼叫記錄區塊 直接檢視。

參數必填說明
date指定某一天(YYYY-MM-DD)
date_from / date_to日期區間(YYYY-MM-DD)
ip以來源 IP 過濾(完全比對)
limit / offsetlimit 預設 100、上限 500;offset 預設 0
curl "https://techart.tronk.tw/face_lineart/api/images/blocks-to-3d/latest/logs?date=2026-07-29&limit=50"

# 回應範例
{
  "success": true,
  "data": {
    "total": 128,
    "retention_days": 30,
    "top_clients": [
      { "client_ip": "203.0.113.5", "user_agent": "UnityPlayer/2022.3", "call_count": 96, "last_called_at": "2026-07-29 12:31:02" }
    ],
    "logs": [
      {
        "id": 128,
        "called_at": "2026-07-29 12:31:02",
        "client_ip": "203.0.113.5",
        "forwarded_for": "203.0.113.5",
        "user_agent": "UnityPlayer/2022.3",
        "referer": "",
        "query_string": "",
        "status_code": 200,
        "returned_id": 60,
        "returned_user_id": "user-001",
        "duration_ms": 3,
        "error": null
      }
    ]
  }
}