本篇是免費 token fuel 系列第 103 篇,查核 Luma Dream Machine 的 web/iOS Free plan 是否能提供學生主要 agent 使用的免費 API fuel。結論先講:Luma 官方付款與 credits 文件明確寫 Dream Machine subscriptions 與 credits 不適用於 Dream Machine API,API credits 要走獨立的 API billing;API 還需要 platform key 與 credit balance。因此本篇分類為 EXCLUDED_LUMA_DREAM_MACHINE_WEB_FREE_API_CREDITS_SEPARATE,不把 web 免費額度列成 API token。

Luma 的網頁 Free plan 可以讓使用者探索部分圖片與影片功能,但 web credits、watermark、personal-use restriction、月度 plan allowance 與 API credits 是不同產品邊界。官方 API 文件則說 Dream Machine API 用 Bearer key 送 image/video generation,另有 credits endpoint 查 API 使用者餘額。這篇 recheck 的核心不是否定 Luma,而是阻止 agent 把 web session 偷換成可程式化 API quota。
查核日期為 2026-08-25。Luma model、API billing、web plan、credits、commercial rights、watermark、data policy、terms 與 endpoint 都可能變動。本文不註冊 Luma、不登入、不建立或取得 API key、不購買 API credits、不送 live generation、不上傳圖片或影片、不設定 callback、不保存 output、不付款、不做外部 publication 或 WordPress 寫入。
本系列的「捕獲」是官方來源查核與錯誤分類,不是捕獲別人的 secret。學生不應共享 Luma API key、用 web cookie 假裝 API auth、多開帳戶取得更多 web runs、把 API balance 借給主 agent、或在 API 402 後靜默切回 web automation。若要看共通的 secret、資料與人工 stop 原則,可延伸閱讀 YOLO LAB AI agent 使用 FAQ。
本文程式碼都是本地 surface classifier、credit separation、generation state、callback、failure refund、watermark、license 與 fallback 示意。所有 token、account、generation id、credit balance、prompt、image URL、video URL 與 output 只使用 placeholder、布林值或 hash,程式不會連到 Luma。
截至 2026-08-25 的敲門模型:Luma UNI-1.1/Ray3.2,API credits 仍與 web 分離
Luma 官方最新的 AI assistant information page 目前把 UNI-1.1 列為影像/多模態模型,把 Ray3.2 列為 current video model,並提醒不要再把 Dream Machine 當成最新模型名稱。本篇因此用 UNI-1.1/Ray3.2 作為當日 model entry;這不會把 web/iOS Free plan 變成 API fuel,也不會消除 API key、API balance、endpoint 和 billing requirements。
目前還存在文件時間差:Payments & Subscriptions 指南仍以 Photon/Ray3.14 描述 Free plan,而較新的官方 model notice 已改用 UNI-1.1/Ray3.2。遇到這種命名衝突,agent 不得猜測 model alias 或沿用舊 price;應保存 source URL、updatedAt、model id 與 checkedAt,直到 API owner read-back 和最新 API 文件一致,否則維持 MODEL_RECHECK_REQUIRED。
Web Free plan 與 Dream Machine API 分開
Luma 的 Payments & Subscriptions 官方指南列出 web/iOS 的 Free plan 與月度 credits;同一頁用醒目說明 Dream Machine subscriptions and credits do not apply to Dream Machine API,API credits 要到 Dream Machine API billing 購買。這是直接的產品分流證據,不能因兩邊都叫 Luma 或沿用舊 Dream Machine 名稱就合併 allowance。
function classifyLumaSurface(surface) {
if (surface === 'web-free' || surface === 'ios-plan') return 'WEB_CREDITS_ONLY';
if (surface === 'dream-machine-api') return 'API_CREDITS_SEPARATE';
return 'SURFACE_RECHECK_REQUIRED';
}
Free web generation 不是 API token
Web Free plan 的「可免費試用」描述的是瀏覽器產品裡的 generation surface;API 是另一個需 platform account、Bearer key、generation endpoint 和 API billing 的服務。主要 agent 若需要自動化、可重現 request、status polling、image/video URL 或 callback,就已經進入 API surface,不能引用 web Free plan 作為 funding proof。
同樣地,web 上可看到的 free image、draft video、watermark 或 relaxed generation 不是 API 的 post-zero behavior。文章中的 provider manifest 要記錄 surface、credentialKind、creditPool、commercialUse 和 checkedAt,避免下游把人工 UI session 當成 API quota。
function guardLumaRoute(route) {
if (route.surface === 'web' && route.automation === true) return 'WEB_AUTOMATION_NOT_API';
if (route.surface !== 'dream-machine-api') return 'API_SURFACE_REQUIRED';
if (route.apiCreditPool !== true) return 'API_CREDIT_READBACK_REQUIRED';
return 'API_ROUTE_OWNER_REVIEW';
}
API 要 platform key 與 Bearer auth
Luma API 的 image 與 video 文件都要求先從 platform.lumalabs.ai 取得 key,再使用 Authorization Bearer header 呼叫 API endpoints。這不是 web browser 的 session cookie,也不是從 Free plan UI 複製出來的暫時 token。API key 要由合資格 owner 建立、server-side 保存、限制用途並可撤銷;本文不取得任何 key。
主要 agent 不應把教學範例中的 luma-xxxx 當成可用密鑰,也不應把完整 Bearer header 寫入 log、前端、notebook 或學生群組。若 owner 未明確批准 API route,所有 Luma 任務回 local-only;如果只需要人工試看,另行標記 web-only,不進 API scheduler。
function validateLumaSecret(secret) {
if (!secret.serverSide || secret.clientVisible || secret.inSource) return 'SECRET_EXPOSURE_STOP';
if (secret.kind !== 'api-bearer') return 'API_KEY_KIND_REVIEW';
if (secret.ownerApproved !== true) return 'OWNER_APPROVAL_REQUIRED';
return 'LUMA_API_SECRET_MANUAL_REVIEW';
}
Credits endpoint 只查 API pool
Luma API reference 提供 GET /dream-machine/v1/credits,用來取得 API user 的 credits information;官方 changelog 說 API credits endpoint 的 credit_balance 以 cents(USD)表示。這個 endpoint 是 API funding read-back,不是 web/iOS subscription 的月度 credits endpoint。agent 必須把兩個 pool 分開保存,不可加總。
若 API balance 未讀回、單位不明、account owner 不一致或 web plan 被誤當成 API pool,就停止 generation。即使 UI 顯示還有 web credits,也不能推論 api_credit_balance 大於零;同樣,API credits 也不能被寫成 web subscription 的可用圖片張數。
function classifyLumaBalance(balance) {
if (balance.surface !== 'api') return 'WEB_POOL_NOT_API_POOL';
if (balance.unit !== 'usd-cents') return 'CREDIT_UNIT_REVIEW';
if (balance.value === undefined) return 'API_BALANCE_READBACK_REQUIRED';
if (balance.value <= 0) return 'API_ZERO_BALANCE_STOP';
return 'API_PAID_BALANCE_OWNER_REVIEW';
}
API image 與 video 是 async generation
Luma API 的基本流程是建立 generation request,取得 id,再用 id 查狀態直到完成;video 文件也提供 callback_url 讓 server 收到 dreaming、completed 或 failed 更新。這是可程式化 API job,不是瀏覽器中按一次 Generate 的 web preview。每個 job 都要設定 deadline、poll 次數、output size、callback owner 與 cleanup。
API reference 的 image route 與 video route 使用不同 endpoint、model、aspect ratio、duration、keyframe 和 status。主要 agent 不可因 video generation 只先回一個 id,就延後記帳或把 credits 扣除當成未發生;建立 request 前要先確認 API pool、model pricing、input rights 與人工批准。
function chooseLumaGeneration(job) {
if (job.surface !== 'api' || job.apiBalanceReadback !== true) return 'API_FUNDING_STOP';
if (job.type === 'image' && job.model) return 'IMAGE_API_CANARY_REVIEW';
if (job.type === 'video' && job.durationSeconds <= 10) return 'VIDEO_API_CANARY_REVIEW';
return 'LONG_MEDIA_LOCAL_OR_OWNER_REVIEW';
}
Failed generation 會 refund 不等於免費
Luma FAQ 說 generation 先從 account pre-charge,若 generation failed,會把 amount fully refund 回 credit balance。這是 paid billing 的失敗處理,不是 free API allowance。學生仍要保存 status、failure_reason、generation id hash、balance read-back 與 retry count,不能用 failed refund 當作無限免費測試的理由。
Agent 只允許在 input 修正後做一次有 deadline 的 retry;未知狀態、callback timeout、credit balance 不一致或 refund 尚未 read-back 時停在人工 handoff。這樣可以避免同一個 request 因 network timeout 被重複提交,也避免將帳務退款與免費 quota 混淆。
function handleLumaGeneration(result, state) {
if (result.state === 'completed') return 'RECORD_API_PAID_RESULT';
if (result.state === 'failed' && state.refundReadback === true) return 'REFUND_RECORDED_NO_FREE_RETRY';
if (result.state === 'failed') return 'REFUND_READBACK_REQUIRED';
if (result.state === 'dreaming' || result.state === 'processing') return 'POLL_WITH_DEADLINE';
return 'UNKNOWN_GENERATION_STATE_STOP';
}
Web Free output 有 watermark 與非商業邊界
Luma learning hub 的 licensing guide 說 Free 與 Lite web plans 的 generated content 是 personal use only,帶有 watermark,且 Luma 可取得較廣的 display、reproduce、distribute、improve service 與 train AI model 權利。這些是 web plan 的 output terms,不能套到 API,也不能因 API output 沒 watermark 就忽略 API Terms 與 privacy policy。
同一份指南說 Plus、Unlimited、Enterprise 才有 commercial usage rights;API FAQ 則說 API image/video 沒有 watermark 且允許 commercial use。這種差異正是為什麼 manifest 要記錄 surface 與 license snapshot:web Free 作品不能自動轉成 commercial API output,API 也不能被寫成 web subscription 的免費素材。
function classifyLumaOutput(output) {
if (output.surface === 'web-free') return 'PERSONAL_WATERMARKED_WEB_OUTPUT';
if (output.surface === 'api' && output.apiTermsReadback === true) return 'API_LICENSE_REVIEWED';
return 'OUTPUT_LICENSE_UNKNOWN_STOP';
}
API credits 與 web monthly credits 不可轉移
Luma Credit System 官方文章解釋 web subscription 每月有 allowance、可能依 billing cycle reset,top-up credits 有自己的有效期與 paid-plan 條件;同頁再次說 Dream Machine credits 不會轉到 Dream Machine API,兩邊不可互換。這個產品分流必須放在 provider registry 的 schema,而不是只寫在文章敘述裡。
學生常見的誤讀是看見 web Free plan 有圖片或 draft video,就把 monthly allowance 除以每張圖的 cost,推估可用 API requests。這個算法沒有 funding 基礎:web plan、API plan、model pricing、unit、reset、watermark、commercial rights 與 data policy 都不同,數字不能跨 pool 運算。
function preventLumaCreditMix(state) {
if (state.webCredits > 0 && state.apiCredits === undefined) return 'WEB_BALANCE_NOT_API_BALANCE';
if (state.webCredits > 0 && state.apiCredits <= 0) return 'API_POOL_STOP';
if (state.creditPoolsSame !== true) return 'KEEP_POOLS_SEPARATE';
return 'API_BALANCE_OWNER_REVIEW';
}
Image 與 video input 都有資料責任
Luma image API 要用自己的 CDN image URLs 作 references,video API 也接受 keyframes 的 image URL。這代表 image URL 的權利、可公開讀取時間、access log、retention 與 deletion 都需要 owner review。學生不應把私人檔案、客戶素材、肖像、聲音、未公開 storyboard 或帶簽名 query 的 URL 直接送進 API。
最小 canary 先用 synthetic prompt 與公開授權素材;只記錄 input hash、generation id hash、status、尺寸、model、cost 與 checkedAt。完成後依 policy 下載到受控位置並清理 temporary URL、callback log、output cache 和未使用的 input;免費 web 或付費 API 都不能省略資料權利檢查。
function allowLumaInput(input, policy) {
if (input.secret || input.pii || input.privateMedia) return 'LOCAL_ONLY';
if (input.urlExpiresAt === undefined) return 'INPUT_URL_REVIEW';
if (policy.rightsConfirmed !== true || policy.retentionKnown !== true) return 'DATA_REVIEW_REQUIRED';
return input.synthetic === true ? 'SYNTHETIC_API_CANARY' : 'OWNER_APPROVAL_REQUIRED';
}
Callback 要有 idempotency 與期限
Luma API callback 文件說 generation status updates 可能多次送出,callback endpoint 回傳非 200 時會重試,且有 timeout。這要求 receiver 以 generation id hash 與 event state 做 idempotency,不可每一次 callback 都扣一次本地 credit、發布一次 output 或觸發下一個 paid generation。
主要 agent 不應為了免費燃料讓 callback worker 無限等待或重送。callback URL 要由 owner 控制、驗證來源、設定過期與 max retries;若 generation 已 terminal,重複 event 只做 read-back,不啟動第二個任務。未取得 API authorization 前,學生可在本機 fake callback fixture 測試 completed、failed、duplicate、timeout 與 unknown state。
function handleLumaCallback(event, ledger) {
if (ledger.seenEventHashes.includes(event.hash)) return 'DUPLICATE_NO_SIDE_EFFECT';
if (event.retryCount > 3) return 'CALLBACK_RETRY_STOP';
if (event.state === 'completed' || event.state === 'failed') return 'RECORD_TERMINAL_EVENT';
return event.ageSeconds > 900 ? 'CALLBACK_EXPIRED_HANDOFF' : 'RECORD_NONTERMINAL_EVENT';
}
Privacy 與 Terms 要和 surface 一起讀
Luma API FAQ 將 API output 的 watermark 與 commercial use 說明,並連到 Luma Terms 與 Privacy;web licensing guide 則對 Free/Lite output 有另外的 personal-use、watermark 與 content rights 描述。學生不能拿某一個 surface 的簡短 FAQ 取代另一個 surface 的 legal read-back,尤其是要公開 output 或送 customer media 時。
Agent registry 應保存 apiTermsUrl、webTermsUrl、privacyUrl、modelLicenseUrl、checkedAt、inputClass、outputUse 與 humanReviewer。若 API terms、privacy、license 或 account region 未確認,回 LEGAL_REVIEW_REQUIRED;不能因 generation 成功就自動放行 publishing、商業廣告或學生作品集。
Local fixture 先測 API 排除
學生可以在本機模擬 web Free balance、API balance zero、API balance positive、web/API pool mismatch、Bearer key missing、image URL private、video duration too long、generation failed、refund pending、callback duplicate、watermark、commercial rights unknown 與 terms not checked。測試目標是確保 route 不會把 web 免費訊號轉成 API request。
通過條件包括:web credits 永不餵給 API;API balance 未讀回停止;zero balance 停止;failed 只等 refund read-back;callback duplicate 無 side effect;private media 回 local-only;watermark/license 未確認回人工;web automation 不得當 API;API 402 不自動付款。這些負面結果才是安全的 provider capture。
function dryRunLuma(snapshot) {
if (snapshot.surface === 'web-free') return 'WEB_ONLY_NO_API_CALL';
if (snapshot.apiCreditsUsd === undefined) return 'API_BALANCE_UNKNOWN_STOP';
if (snapshot.apiCreditsUsd <= 0) return 'API_ZERO_BALANCE_STOP';
if (snapshot.inputRights !== true) return 'INPUT_RIGHTS_REVIEW';
if (snapshot.apiTerms !== true) return 'API_TERMS_REVIEW';
return 'PAID_API_OWNER_REVIEW_ONLY';
}
重新列入需要新的官方 API grant
Luma 的排除分類只有在官方 API 文件或 API billing 頁明確推出 free API credits、student grant、fixed quota 或合法 promotional program 時才 recheck。web Free plan 更新、免費圖片、relaxed generation、教育折扣、subscription monthly credits、第三方 coupon 或社群分享的 API key,都不能解除 API pool separation。
新 grant 出現後還要確認 eligibility、amount、unit、expiry、model、endpoint、rate limit、credit pool、post-zero、failed refund、input retention、commercial rights、watermark、terms、privacy 與是否需要 payment method。若任何欄位只能從 web plan 推論,仍維持排除;只有 API 第一方文件完整支持,才進入 owner canary。
function reverifyLumaApiGrant(evidence) {
const fields = ['eligibility', 'amount', 'unit', 'expiry', 'model', 'endpoint', 'postZero', 'dataPolicy'];
if (evidence.webOnly === true) return 'KEEP_API_EXCLUDED';
if (fields.some(field => !evidence[field])) return 'API_GRANT_RECHECK_INCOMPLETE';
if (evidence.paymentRequired === true) return 'PAID_API_ROUTE_ONLY';
return 'OWNER_MAY_REVIEW_API_GRANT';
}
Web 與 API 要使用兩本 credit ledger
若 owner 同時使用 Luma web 與 API,ledger 也要完全分開。Web ledger 只記 plan、monthly allowance、watermark、commercial restriction、generation count 與 web checkedAt;API ledger 才記 API credit balance、cents unit、model、endpoint、generation id、pre-charge、refund、actual output 與 API checkedAt。兩本 ledger 不能用同一個 total credits 欄位合併。
這個分離可以防止三種錯誤:把 web Free allowance 當成 API balance、把 API paid credits 當成學生免費 quota、把 web output license 套到 API output。若資料來源只回報「Luma 還有 credits」,agent 要回 CREDIT_POOL_UNKNOWN,要求 owner 指明 product、surface、unit 與 account。
function recordLumaCreditPool(event) {
if (!event.product || event.balance === undefined) return 'CREDIT_POOL_INCOMPLETE';
const ledger = event.product === 'dream-machine-api' ? 'LUMA_API_LEDGER' : 'LUMA_WEB_LEDGER';
return {
ledger,
product: event.product,
surface: event.surface,
unit: event.unit,
balance: event.balance,
checkedAt: event.checkedAt
};
}
不要用 browser automation 假造 API fuel
把 web Free plan 放進主要 agent,通常會需要 browser automation、cookie、session、畫面點擊與非正式下載流程。這不但不是 API token,也會讓 web plan 的 watermark、個人使用、內容權利與帳戶 owner 變得難以追蹤。主要 agent 不應用瀏覽器代替 API key、用 cookie 逃避 API billing,或在 Free plan 畫面背後長期跑未批准任務。
若課堂只想示範 prompt 到 video 的互動,可以讓學生人工使用 web surface,但結果要標成 WEB_MANUAL_DEMO,不可流入 API queue、production pipeline、background scheduler 或多學生共享 session。需要可重現的自動化時,另由 owner 走 API billing 與 key review;沒有批准就用 local mock。
function blockLumaBrowserFallback(task) {
if (task.usesCookie || task.usesSession || task.browserAutomation) return 'NO_BROWSER_API_SUBSTITUTE';
if (task.surface === 'web-free') return 'MANUAL_WEB_DEMO_ONLY';
return 'API_OR_LOCAL_ROUTE_REQUIRED';
}
API paid fallback 要先有 owner budget
當文字 provider、影像 provider 或本地模型失敗時,Luma 不能被當成無聲的免費 fallback,因為它是 media API、會讀取 API credit pool,並可能建立長時間的 video generation。fallback decision 要先確認 task modality、API balance、model、duration、resolution、data rights、cost cap、deadline、refund path 與 output retention。
若 owner 只批准了 web Free demo,agent 不能自動升級到 API;若 owner 只批准一次 API image canary,agent 不能改送 video;若 API balance 不足,不能回 web automation 繼續。每一種 surface 都要有獨立的 allowlist 與 stop condition,否則「免費燃料」會變成無法稽核的跨產品轉換。
function chooseLumaFallback(task, policy) {
if (task.type !== policy.approvedType) return 'MODALITY_SCOPE_STOP';
if (policy.surface === 'web-free') return 'WEB_MANUAL_ONLY';
if (policy.surface !== 'api' || policy.apiBalanceReadback !== true) return 'LOCAL_ONLY';
if (task.estimatedUsd > policy.maxUsd || task.deadlineSeconds > policy.maxSeconds) return 'OWNER_REVIEW';
return 'LUMA_API_PAID_CANARY';
}
學生交接可以交付 web/API surface、官方 separation URL、API endpoint、model、license snapshot、credit unit、status mapping、local fixture、watermark、commercial boundary、refund read-back 與下一次 recheck trigger;不能交付 cookie、session、Bearer key、完整 image URL、私有 input URL、callback secret、完整 output 或 payment screenshot。
交接記錄要明確寫「web manual demo」或「API paid owner review」,並說明目前是否有 API authorization。若前一位學生只看到 web Free plan,就把狀態傳為 API_NOT_VERIFIED;若曾經使用 API paid credits,也只傳非敏感的 cost summary 與 hash,不傳可以繼續呼叫的權限。
排除鏈本身是可靠的捕獲結果
本篇沒有把 Luma 寫成「不能用」,而是把它放到正確的產品類別:web Free 是人工多媒體試用;Dream Machine API 是需要獨立 key、獨立 credits 與獨立 billing 的可程式化 route。這個分類能讓學生知道哪一條路不需要 API token,哪一條路不能假裝免費。
可靠的燃料清單不只記錄「有免費 provider」,也要記錄「哪些免費訊號不能轉移」。當 web subscription、API billing、model license、commercial use 與 data policy 都彼此分開時,最安全的結果就是不把它們相加。未來若官方 API grant 出現,也能從這份 separation baseline 重新開始查核。
function publishLumaNegativeEvidence(evidence) {
if (evidence.webCreditsApplyToApi === true) return 'POLICY_CHANGED_RECHECK';
if (evidence.apiBillingSeparate !== true) return 'SEPARATION_UNVERIFIED';
if (evidence.apiKeyRequired !== true) return 'API_AUTH_RECHECK';
if (evidence.apiCreditsReadback !== true) return 'API_CREDIT_RECHECK';
return 'WEB_FREE_NOT_API_FREE_CONFIRMED';
}
API cost ledger 不能用 web credits 推算
即使 web guide 公開每張圖片或每秒影片的 credits,這些數字也不能拿來估 API cost;API model、resolution、duration、generation type、credit unit 與 billing page 可能不同。真正的 API ledger 要保存 owner read-back 的 API unit、pre-charge、成功扣款、failed refund、generation type、model、resolution、duration、output hash 與 cost timestamp。
如果只能讀到 web pricing,API cost 應標成 unknown,不能填零。這個保守結果比虛構一個免費估算更適合學生 agent,因為後續可能出現較長 video、較高 resolution、multiple keyframes、modify 或 reframe,不能以一次短 demo 推導整個 API 產品的免費程度。
function estimateLumaApiCost(job, price) {
if (price.surface !== 'api' || price.unit === undefined) return 'API_PRICE_UNKNOWN';
if (job.durationSeconds <= 0 || job.model === undefined) return 'JOB_COST_INPUT_MISSING';
if (job.estimatedUsd > price.ownerCapUsd) return 'COST_CAP_STOP';
return 'OWNER_API_COST_REVIEW';
}
Output URL、callback 與 cache 要清理
Luma API 完成後會回傳 image 或 video asset URL;這些 URL 不應直接成為永久公開資產。owner 要決定 download、retention、access control、output hash 與 deletion,並在 callback log、worker queue、local cache 和 preview page 中移除不必要的完整 URL。學生只交接 hash 與狀態,不交付可能仍可存取的 asset link。
若任務失敗,除了等待 credit refund,也要清理失敗 generation 的 prompt、input URL、callback payload 與 error log。對免費 web demo 也要遵守個人/非商業與資料使用限制;對 API paid canary 則要遵守 API terms、privacy 與 owner retention policy。兩種 surface 都不應把輸出自動發布到外部系統。
function closeLumaOutput(output, state) {
if (!['completed', 'failed'].includes(output.state)) return 'GENERATION_NOT_TERMINAL';
if (!output.hash || !state.costReadback) return 'OUTPUT_EVIDENCE_MISSING';
if (state.callbackActive || state.cacheActive) return 'CLEANUP_REQUIRED';
return output.state === 'failed' ? 'REFUND_AND_ERROR_RECORDED' : 'OUTPUT_OWNER_RETENTION_REVIEW';
}
Free web demo 也不應共享帳戶
「不用 API key」不等於可以把一個 Luma web account、cookie 或 login session 給全班使用。Web account 仍有 owner、terms、content rights、usage limits 與個人資料責任;多位學生共用 session 會讓 generation、輸出、billing 與刪除權限無法歸屬。課堂應各自人工使用公開流程,或由 owner 建立清楚的受控 demo,不把 session 傳給 agent。
主要 agent 更不能保存或重用 web cookie 來達到「免 key API」效果。若自動化需要背景任務、callback、status poll、cost read-back,就應走官方 API route;若只做短暫人工探索,就保持 WEB_MANUAL_DEMO。兩者之間沒有可安全偷接的中間狀態。
本篇只留下清楚的 local fallback
當 API key、API credits、model price、terms、privacy 或 output retention 任何一項不明時,agent 應回到本機 mock:固定 prompt、固定 fake generation id、固定 completed/failed/refund/callback event,讓學生繼續練習 adapter、ledger 與 UI,而不消耗 web credits、API credits 或帳戶 session。
這個 fallback 不是把 Luma 永久封鎖,而是把未授權的外部費用與資料風險隔離。未來 owner 若決定使用 Luma API,只需從 API billing、credits endpoint、key scope、model、rights、deadline 與 cleanup 重新建立一次 canary,不必繼承任何 web cookie 或舊 output。
狀態到期就回到未驗證
web plan、API billing 與模型文件有任何更新,舊的成功 canary 都不能永久延長權限。只要查核日期過期、surface 改名、credits endpoint 變更、model 移除、license 更新或 API platform 顯示新的 payment gate,就把狀態改回 UNVERIFIED,重新讀取第一方文件。
這個到期規則讓免費捕獲保持可追蹤:文章保存的是當日證據與判定,不是對未來價格、配額或帳戶行為的承諾。
因此下一次 recheck 要從 API billing 與 API credits endpoint 開始,而不是先看 web Free 畫面;這是本篇交給主要 agent 的第一個停止順序。
只要兩個產品的帳務仍分離,任何跨 pool 的免費推論都必須拒絕,避免將人工體驗誤記成 API token fuel,並保留清楚的學生交接與回退邊界,供日後查核與審計記錄持續使用,避免狀態漂移與誤判,維持清楚的 fuel 分類與完整治理記錄證據可見性。
本篇的排除判定
Luma Dream Machine web/iOS Free plan 目前不列入學生主要 agent 的免費 API fuel:官方明確分開 web credits 與 API credits,API 需要 platform Bearer key、獨立 credit balance 與 API billing。Web Free 的 monthly allowance、watermark、personal use、非商業限制與 API output rights 不能互換。
Luma 仍可能是合理的 paid image/video sidecar,但需 owner、API budget、key scope、input rights、API terms、privacy、generation deadline、callback idempotency、failure refund、output cleanup 與 cost ledger。若沒有這些條件,主要 agent 回 local-only,不把 web automation 當作偷偷取得 API token 的方法。
function finalLumaDecision(evidence) {
if (evidence.webFreeCredits && evidence.apiCreditsSeparate !== true) return 'KEEP_EXCLUDED';
if (!evidence.apiKeyServerSide || !evidence.apiBalanceReadback) return 'API_REVIEW_REQUIRED';
if (!evidence.apiTerms || !evidence.inputRights) return 'LEGAL_DATA_STOP';
return 'PAID_API_CANARY_OWNER_ONLY';
}
本篇完成閘門
完成本篇只代表 Luma web Free plan 與 API credits 的錯誤合併已排除,不代表 Luma API 不可用。驗收內容包括:web/iOS/API surface、separate credits、Bearer key、credits endpoint、image/video generation、async status、callback、failed refund、watermark、commercial rights、input URL、privacy、terms、local fixture、paid stop 與 recheck trigger。
未完成項目包括:沒有 Luma 註冊、登入、建立或取得 API key、查 API balance、購買 API credits、live image/video generation、callback、資料上傳、output 保存、商業用途判定、付款、外部 publication 或 WordPress 寫入;不代收、不建立、不分享任何 key、token、cookie、prompt、response 或 billing 資料。
官方來源與下一篇
本篇主要依據 Luma 官方 AI assistant information、Dream Machine API、Image Generation、Video Generation、Get credits、Generate an image、Create a generation、API FAQ、Dream Machine Credit System、Payments & Subscriptions、Licensing 與 Terms。正式使用前以當日 API billing、credits endpoint、model、terms、privacy 與 owner read-back 為準。
第 103 篇完成後,下一篇會繼續尋找尚未收錄、且官方能證明免費 API quota、合法 promotional credits 或教育方案的候選。Luma 先保留為 web free 不等於 API free 的排除證據,不會把 web monthly credits、watermark-free API output 或人工 playground 誇大成學生免費 token fuel。
KEEP READING
接著讀什麼?
從同一主題繼續閱讀,或回到 YOLO LAB 的完整文章索引,找到下一個值得投入時間的問題。


發表迴響