TL;DR:Pollinations 是我看過門檻最低的生圖 API——不用註冊、不用 API key、不用綁信用卡,把 prompt 塞進一個 URL、curl一下就回一張圖。這篇把它的設計(URL 即 API)、實測坑(/models清單跟文件對不上、傳不存在的 model 不報錯)、seed 決定性、匿名與註冊 tier 的差別、watermark 政策、以及 Referrer / Bearer 兩種認證都寫清楚,附可直接抄的curl與 Node.js 範例。本文 2 張配圖全是用 Pollinations 匿名 API 當場生的。
📌 目錄
- 一行 URL 就生圖:Pollinations 在做什麼
- 最小可用範例:一個 curl 就出圖
- 參數一覽:model / 尺寸 / seed / nologo
- 實測坑一:/models 清單跟文件對不上
- 實測坑二:傳不存在的 model 不報錯
- seed 決定性:同請求拿同一張圖
- 匿名 tier 與註冊 tier 的差別
- watermark 政策(2025 之後)
- 兩種認證:Referrer 與 Bearer token
- Node.js 整合範例
- Pollinations 適合誰、不適合誰
- 常見問題 FAQ
- 延伸資源
🌸 一行 URL 就生圖:Pollinations 在做什麼
我前一篇寫怎麼用 Hugging Face FLUX.1-schnell 免費生 100 張卡牌插圖,那套要先申請 token、勾權限、算額度。整套跑下來很完整,但門檻不算低——對「只是想快速生幾張、不想碰任何帳號設定」的場景太重。
這篇講另一個極端:Pollinations。它的核心設計是 URL 即 API——生圖這件事被壓縮成「組一個網址、發一個 GET」。沒有 SDK、沒有 POST body、沒有 JSON、沒有 key。你甚至可以直接把那個網址貼進瀏覽器網址列,按 Enter 就看到圖。
上面那張綠寶石,就是我寫這篇時用 Pollinations 匿名 API 當場生的,指令只有一行(下一節給完整版)。
對「零門檻、馬上要一張圖」的需求,這是我看過最快的路徑。
⚡ 最小可用範例:一個 curl 就出圖
端點長這樣,prompt 直接放進路徑:
https://image.pollinations.ai/prompt/{你的描述}
實際跑一次,把描述 URL-encode 後接上去:
# 最小範例:免 key、免註冊,直接拿回一張 jpg
curl -s -o emerald.jpg \
"https://image.pollinations.ai/prompt/a%20glowing%20emerald%20gemstone%2C%20oil%20painting%2C%20no%20text?width=512&height=512&seed=42&nologo=true"
# round-trip 驗它真的是圖(別只看檔案存在)
file -b --mime-type emerald.jpg # 預期:image/jpeg
就這樣。沒有第二步。width / height / seed / nologo 都是 query string,全部可選。
這裡有個寫任何生圖腳本都該養成的習慣:寫檔後驗 mime-type。生圖 API 失敗時常回 HTML 錯誤頁或 JSON,但 HTTP 200、檔案照寫,如果不驗,你會得到一堆「看起來存在、其實打不開」的壞檔。file --mime-type 一行就能擋掉。
🎛️ 參數一覽:model / 尺寸 / seed / nologo
| 參數 | 作用 | 預設 / 備註 |
|---|---|---|
model | 指定生圖模型 | 以 /models 當下回應為準(見下節坑) |
width / height | 輸出尺寸 | 常用 512 / 1024;建議 8 的倍數 |
seed | 隨機種子 | 固定後同請求可重現 |
nologo | 去掉角落浮水印 | true / false |
enhance | 自動潤飾 prompt | 會改寫你的描述,要可控就別開 |
private | 不進公開 feed | 預設你的圖可能出現在公開瀏覽頁 |
private 這個值得特別留意:Pollinations 預設會把匿名生成的圖丟進公開 feed。如果你的 prompt 含任何不想被別人看到的內容,記得帶 private=true——但更穩的做法是「敏感內容根本別用免費公開服務生」。
🕳️ 實測坑一:/models 清單跟文件對不上
官方 API 文件(GitHub 上的 APIDOCS.md)列的可用 model 是 flux / turbo / stable-diffusion。但我這次(2026-06)實際查當下的清單:
curl -s "https://image.pollinations.ai/models"
# 回應:["sana"]
只有 sana 一個。文件寫的 flux、turbo 全都不在清單裡了。
教訓:免費公開服務的可用 model 會無預警變動,別照文件硬抄 model 名,腳本裡先打一次 /models 拿當下清單再用。 這跟商業 API 有版本承諾、有 deprecation 通知完全不同——免費服務沒有義務維持向後相容,model 說換就換。
🤫 實測坑二:傳不存在的 model 不報錯
接著踩到更隱蔽的一個。既然清單只剩 sana,那我傳已經不存在的 ?model=flux 會怎樣?照直覺應該報錯。實測:
# 同 prompt、同 seed,一張指定已不存在的 flux、一張指定清單裡的 sana
curl -s -o flux.jpg "https://image.pollinations.ai/prompt/${P}?seed=7&model=flux&nologo=true"
curl -s -o sana.jpg "https://image.pollinations.ai/prompt/${P}?seed=7&model=sana&nologo=true"
md5 flux.jpg sana.jpg
# 兩個 md5 完全相同
兩張 md5 一模一樣——代表 ?model=flux 沒有報錯,而是被靜默 fallback 到 sana,給你一張你以為是 flux、實際是 sana 的圖。
這比明確報錯更危險:你的腳本跑得好好的、檔案也都生出來,但你拿到的根本不是你指定的模型,還渾然不覺。對付這種靜默 fallback,只能在腳本啟動時拿 /models 比對你要的 model 在不在清單,不在就自己擋下來。
🎲 seed 決定性:同請求拿同一張圖
好消息是 Pollinations 對「相同請求」是決定性的。同 prompt、同 seed、同尺寸連抓兩次:
curl -s -o a.jpg "https://image.pollinations.ai/prompt/${P}?seed=123&nologo=true"
curl -s -o b.jpg "https://image.pollinations.ai/prompt/${P}?seed=123&nologo=true"
md5 a.jpg b.jpg # 兩個 md5 完全相同
我實測兩張 md5 完全相同。這代表它對相同請求有快取/決定性出圖,而不是每次重跑。
這個性質很實用:批次補圖時可以安全地「跳過已存在檔、只補缺的」,不用怕補出來的跟原本那批風格飄掉。 下面這張藍寶石就是用固定 seed 生的,重跑幾次都長一樣:
要每次都不同,把 seed 拿掉或每次換值即可。
🪜 匿名 tier 與註冊 tier 的差別
完全免費可用,但「免費」分層,主要差在 rate limit:
| Tier | 怎麼進 | rate limit | 適合 |
|---|---|---|---|
| Anonymous | 什麼都不用做 | 約 15 秒 1 張 | 試玩、零星生圖 |
| Seed | 免費註冊拿 token | 約 5 秒 1 張 | 個人專案小批次 |
| 付費層 | 升級方案 | 更高併發 | 商業/高量 |
sleep,不然會被限流擋掉。我這篇的 2 張配圖就是匿名生的,每張之間隔 16 秒。如果要常態小批次,花兩分鐘免費註冊拿個 token 升到 5 秒一張,體感差很多。
💧 watermark 政策(2025 之後)
要講清楚的一點:Pollinations 在 2025-03-31 起,免費層生成的圖可能帶浮水印。 nologo=true 在部分情境能去角落 logo,但政策會隨營運調整變動,不保證永遠乾淨。
對照前一篇的結論:如果你的需求是「整副風格統一、要拿來當正式素材」,我的組合策略還是 HF FLUX.1-schnell 出主力品質的那幾十張、Pollinations 補量——Pollinations 的定位是「零門檻補量 / fallback」,不是高品質主力。watermark 風險也是這個定位的一部分。
🔐 兩種認證:Referrer 與 Bearer token
匿名能用,但如果你註冊了、想用較高的 tier,有兩條認證路徑:
- 網頁前端:靠
Referrerheader 辨識來源網域,適合直接在瀏覽器端呼叫的場景。 - 後端服務:到
auth.pollinations.ai拿 Bearer token,放進Authorization: Bearerheader,適合伺服器端批次。
# 後端帶 token(升 tier 後)
curl -s -o out.jpg \
-H "Authorization: Bearer ${POLLINATIONS_TOKEN}" \
"https://image.pollinations.ai/prompt/${P}?width=1024&height=1024&seed=42"
token 是機密,跟任何 API key 一樣——別 commit、別貼公開地方,走環境變數。
🧩 Node.js 整合範例
把上面那些收進一支可重用的函式,含 /models 比對與 round-trip 驗證:
import { writeFile } from 'node:fs/promises';
import { execSync } from 'node:child_process';
const BASE = 'https://image.pollinations.ai';
async function listModels() {
const res = await fetch(${BASE}/models);
return res.json(); // 例如 ["sana"]
}
async function genImage(prompt, { model, width = 1024, height = 1024, seed, outPath }) {
// 坑二防護:指定的 model 不在當下清單就擋下來,別讓它靜默 fallback
if (model) {
const available = await listModels();
if (!available.includes(model)) {
throw new Error(model "${model}" 不在清單 ${JSON.stringify(available)},會被靜默替換);
}
}
const qs = new URLSearchParams({ width, height, nologo: 'true' });
if (model) qs.set('model', model);
if (seed !== undefined) qs.set('seed', String(seed));
const url = ${BASE}/prompt/${encodeURIComponent(prompt)}?${qs};
const res = await fetch(url);
if (!res.ok) throw new Error(HTTP ${res.status});
const buf = Buffer.from(await res.arrayBuffer());
await writeFile(outPath, buf);
// round-trip:驗它真的是圖,不是錯誤頁
const mime = execSync(file -b --mime-type "${outPath}").toString().trim();
if (!mime.startsWith('image/')) throw new Error(不是圖:${mime});
return outPath;
}
// 用法
await genImage('a glowing emerald gemstone, oil painting, no text', {
seed: 42,
outPath: 'emerald.jpg',
});
匿名批次時,每張之間記得 await new Promise(r => setTimeout(r, 16000)) 避開 rate limit。
⚖️ Pollinations 適合誰、不適合誰
| 你的情況 | 建議 |
|---|---|
| 想零門檻、馬上拿一張圖 | ✓ Pollinations,一行 URL 最快 |
| demo / 原型 / 一次性插圖 | ✓ 匿名就夠 |
| 個人專案常態小批次 | ✓ 免費註冊升 5 秒一張 |
| 要整副風格統一的正式素材 | △ 用 HF FLUX 出主力,Pollinations 補量 |
| 商業專案、不能有 watermark 風險 | ✗ 走有授權保證的付費 API |
| prompt 含敏感內容 | ✗ 別用免費公開服務,或至少帶 private=true |
❓ 常見問題 FAQ
Q1:Pollinations 真的完全不用註冊、不用 key?
匿名 tier 確實如此——一個 GET 就回圖。註冊只是為了升 rate limit(從約 15 秒一張到 5 秒一張),不註冊也能用。
Q2:為什麼我傳 ?model=flux 沒報錯但圖不像 flux?
因為當下 /models 清單可能已經沒有 flux,服務會靜默 fallback 到清單裡的 model(我實測是 sana),不報錯。腳本啟動時打一次 /models 比對你要的 model 在不在,不在就自己擋。
Q3:同 prompt 同 seed 會拿到一模一樣的圖嗎?
會。我實測同 prompt、同 seed、同尺寸連抓兩次,md5 完全相同。所以批次補圖可以安全地「只補缺的、跳過已存在」。
Q4:免費生的圖可以商用嗎?有浮水印嗎?
Pollinations 程式碼走 MIT,但 2025-03-31 起免費層生成的圖可能帶浮水印,nologo=true 不保證永遠去得乾淨。要拿來正式商用,建議走有明確授權保證的方案,或至少先確認當下的服務條款。
Q5:Pollinations 和 HF FLUX.1-schnell 該選哪個?
看門檻與品質的取捨。要零門檻、快、補量 → Pollinations;要較高品質、整副統一 → HF FLUX.1-schnell 當主力。兩個疊起來(HF 主力 + Pollinations 補量)就是一條 $0 的完整管線。
🔗 延伸資源
- Pollinations 官方 API 文件(APIDOCS.md) — 端點與參數,但 model 清單以
/models實際回應為準 - Pollinations 首頁 — 線上試玩與公開 feed
- 我的前一篇:HF FLUX.1-schnell 免費生 100 張卡牌插圖 — 主力生圖 + sharp 後製的完整生產線
- auth.pollinations.ai — 註冊拿 Bearer token 升 tier
- file 指令 mime-type 驗證 — round-trip 驗圖檔的最簡工具