spicyapi/image-upscaler-v1/upscaleは、出来上がった画像1点を拡大します。最終トリミングに必要な画素数に合わせて2k、4k、8kの3段階から選びます。この3段階はそれぞれ約4、17、67メガピクセルの画素予算であり、固定の長辺の寸法ではありません。3つとも出力画像1枚につき$0.012(1000枚なら$12)で、JPEG、PNG、WebPに対応しています。まずPlaygroundで試し、その後で短いPythonの例を実行するか、Agentに任せてください。
最終トリミングから段階を選ぶ
Image Upscalerは入力のアスペクト比を維持します。1024×1536の縦図は次の結果を返します。
| リクエスト | 画素予算 | 返すサイズ | 価格 |
|---|---|---|---|
2k | 約4 MP | 1672×2508 | $0.012/画像 |
4k(既定) | 約17 MP | 3344×5017 | $0.012/画像 |
8k | 約67 MP | 6689×10033 | $0.012/画像 |
アスペクト比が変われば寸法も変わります。「2倍」「4倍」で考えると、線形の拡大率は画素予算の平方根を入力のメガピクセル数で割った値になります。
| 入力 | 2k | 4k | 8k |
|---|---|---|---|
| 1024×1536(1.6 MP) | 1.6× | 3.3× | 6.5× |
| 1920×1080(2.1 MP) | 1.4× | 2.8× | 5.7× |
| 4000×3000(12 MPのスマートフォン写真) | 0.6×(縮小) | 1.2× | 2.4× |
入力の画素数より低い段階は縮小します。3344×5017の入力を2kで送ると1672×2509が返ります。入力が既に目的の寸法に達していれば、通常の書き出しで構いません。このエンドポイントに「元のサイズでくっきりさせる」モードはありません。
2倍密度で幅600ピクセル表示するWebカードなら、最終トリミングには1200ピクセル必要です。そのトリミングが入力の幅の半分しか使わない場合、マスターは幅2400ピクセル必要です。2kの1672ピクセルの縦図では足りません。4kなら対応できます。
印刷では、インチ数にプリンターが求める密度を掛けます。10×15インチの画像を1インチ300ピクセルで出力するには3000×4500ピクセルが必要で、4kの縦図はトリミングなしでこれをカバーします。密度のメタデータを変えても画素数は増えず、トリミングを詰めれば計算をやり直す必要があります。
8kはトリミングで必要なときにだけ選んでください。価格は同じですが、67メガピクセルは約268 MBの4チャンネルの生の画素データになるため、編集時のメモリに影響します。この段階でダウンロードするJPEGは約8 MBになります。
きれいな入力を用意する
物体除去、トリミング、その他の編集を先に済ませ、ウェブサイトのサムネイルではなく最良の原本から始めてください。入力は10 MB以下のJPEG、PNG、WebPの1枚なので、大きな印刷マスターは送信前に書き出しが必要かもしれません。架空の文具カタログなら、承認済みの万年筆とその箱の写真を使い、刻印された名前の正確な表記は別の参照として残してください。拡大すると、曖昧だった痕跡が、確実で間違っている文字に化けることがあります。
次の工程に合わせてoutput_formatを選んでください。jpeg(既定)が最も小さく、PNGは損失なしですが8kでは数倍になります。WebPはその中間です。PNGでも再構成されたディテールが事実になるわけではありません。プロンプトも、正確な幅と高さも、顔の修復強度も、seedもありません。

確認領域のイラスト。拡大処理の結果ではありません。
まずPlaygroundで確認する
- Image Upscalerのページを開き、PlaygroundタブのForm表示のまま進みます。実行には残高のあるアカウントでサインインします。
- 画像をInput image(JPG、PNG、WEBP、最大10 MB)にドロップするか、Asset URLでリンクを貼り付けます。
- Resolutionを2K、4K、8Kのいずれかに、Output formatをJPEG、PNG、WebPのいずれかに設定します。
- 実行し、最終的なカード表示サイズまたは印刷サイズで結果を確認します。
コードを書く前に、ここで最善の入力を試してください。PlaygroundのリクエストボディはAPIが受け取るJSONと同じなので、ここで動作した設定はそのままコードに書き移せます。
続いてコードから呼び出す
Python SDK(pip install spicyapi)をインストールし、環境変数にSPICY_API_KEYを設定して実行します。
この例のダウンロード検証にはPillow(python -m pip install Pillow)が必要です。元の出力ファイルは、新しいJPEGのデコードが成功してから置き換わります。
import os
from pathlib import Path
import tempfile
import urllib.request
import uuid
from PIL import Image
from spicyapi import SpicyClient, output_assets
client = SpicyClient() # reads SPICY_API_KEY from the environment
source = client.upload_file("./fountain-pen-master.png") # local file becomes a spicy:// URI
task = client.create_task(
model="spicyapi/image-upscaler-v1/upscale",
input_data={"image_url": source["uri"], "resolution": "4k", "output_format": "jpeg"},
idempotency_key=str(uuid.uuid4()), # new key per new request; reuse only to retry the same one
)
print(f"Task ID: {task['taskId']}", flush=True)
final = client.wait_for_terminal(task["taskId"])
if final["state"] != "succeeded":
raise RuntimeError(f"Task {task['taskId']} ended as {final['state']}")
assets = [a for a in output_assets(final)
if a.get("url") and not a.get("pending") and not a.get("unavailable")]
if not assets:
raise RuntimeError(f"Task {task['taskId']} has no downloadable output yet")
request = urllib.request.Request(assets[0]["url"], headers={"User-Agent": "upscale-example/1.0"})
target = Path("upscaled.jpg")
temporary = None
try:
with tempfile.NamedTemporaryFile(dir=target.parent, suffix=".jpg", delete=False) as out:
temporary = Path(out.name)
with urllib.request.urlopen(request, timeout=60) as response:
out.write(response.read())
with Image.open(temporary) as image:
if image.format != "JPEG":
raise ValueError("Expected a JPEG output")
image.load() # reject unreadable or truncated data before replacing the keeper
os.replace(temporary, target)
finally:
if temporary is not None:
temporary.unlink(missing_ok=True)1回の実行は約45秒かかります。resolutionとoutput_formatを変えれば段階や形式を切り替えられます。アップロード、待機、再試行、エラーはtasksガイドとPython SDKリファレンスにまとまっています。結果リンクの有効期間は約20分で、生成ファイルは最大14日で削除されるため、結果を自分のストレージにコピーしてください。
Agentに実行させる
アシスタントに画像を拡大させる場合、3つの公式ツールはいずれも価格を表示し、有料の呼び出しの前に確認を求めます。
- CLI.
spicyapiはターミナルから1つのタスクを実行します(npx @spicyapi/cliならインストールなしで動きます)。{"image_url": "spicy://...", "resolution": "4k"}をinput.jsonに書き、アップロード時に表示されるURIを使ってください。
``bash spicyapi files upload ./fountain-pen-master.png spicyapi tasks create --model spicyapi/image-upscaler-v1/upscale --input-file input.json --wait ``
- MCPサーバー. アシスタントにMCPサーバーを追加し、"Upscale ./fountain-pen-master.png to 4K with Image Upscaler."と尋ねます。
spicyapi_upload_fileを呼び出し、次に価格確認のためspicyapi_task_createで止まり、その後spicyapi_task_waitを呼び出します。 - Skill.
npx skills add spicyapi-ai/spicy-skillはAgent Skillをインストールし、コーディングアシスタントがフィールドを推測せずに最新のモデルスキーマを読むようにします。それ自体はタスクを実行できないため、CLIやMCPと合わせて使ってください。
追加した画素が役に立つか判断する
まず最終的なカードレイアウトや印刷版面で結果を確認し、次にペン先や刻印、箱の縁をフルサイズで確認してください。追加した画素はその用途に役立ちながら、製品の正確さも保てていますか。
| 症状 | 次の手順 |
|---|---|
| 出力が入力より小さい | 入力の画素数とその段階の予算を比べます。目標が本当に拡大を求めている場合にだけ1段階上げます。 |
| 刻印された文字が鮮明だが間違っている | 入力をより鮮明な写真または承認済みの原図に差し替えます。大きな段階でも欠けている文字は検証できません。 |
| 暗い縁に明るい輪郭が出る | 送信した原本と比べます。輪郭が原本自身のシャープ化で生じているなら、やり直す前に、よりきれいな入力を書き出してください。 |
| 顔が滑らかだが別人のように見える | 目、表情、髪の生え際を原本と比べます。鮮明さだけを理由に承認せず、その候補は不合格にします。 |
| ウェブページが巨大な画像をダウンロードする | 承認済みのマスターを保管し、表示枠にはもっと小さい通常の派生物を書き出します。 |
| APIが余分なフィールドを拒否する | scale、face_restore、widthおよび同様の項目を削除します。このエンドポイントにそのような項目はありません。 |

比較用のポートレート詳細を描いたイラスト。復元された顔のディテールではありません。
架空の成人ポートレートでは、SpicyAPIはこのツールで安全チェッカーを動かしません。同意と法的義務は、ご自身が担うものです。中程度および高度なNSFW入力は通常どおり拡大されます。一括処理の前に、ご自身の素材で一度試してください。
マスターに問題はないのに小さいカードで刻印が失われる場合は、その派生物を調整するか、ズームを弱めてください。もう一度AIを通すのは最初の解決策ではありません。画素数ではなく広い画幅が必要なら、新しいアスペクト比への拡張を参照してください。クリップについては動画の拡大を参照してください。






