メインコンテンツへスキップ

クイックアンサー

APIYIを通じて生成されるほとんどの画像や動画(Veo 3.1、Sora、Nano Banana、gpt-image-2-vipなど)は、CloudflareなどのグローバルCDNでホストされているURLとして返されます。ダウンロードの速度低下やタイムアウトは、通常、次の2つの原因のいずれかによって発生します。
  • お使いのサーバーからCDNまでのネットワーク経路: 中国本土のサーバーから海外のCDNへ接続する場合、越境帯域幅、ISPのルーティング、ローカルDNSの影響を受けます
  • ストレージ側: CDNの背後にあるストレージノードの応答が低下すると、すべてのルートに影響が及ぶ可能性があります
どちらもプログラムのエラーログ上ではほぼ同じに見え、単一のマシンからのテストだけで区別することは困難です。以下のセルフチェック手順を実行し、その結果をお送りください。ストレージ側と照合いたします。これにより、無駄なやり取りを大幅に削減できます。
ポイントCloudflare R2のリソースURLは通常、*.r2.cloudflarestorage.comまたはCloudflareを経由してプロキシされたカスタムドメインの形式になります。ダウンロード速度は、お使いのサーバーが最も近いCloudflareエッジノードにどれだけ効率的にアクセスできるかによって左右されます。

APIは成功したのに、画像がダウンロードできませんか?

画像生成は2つのステージで行われます:
  1. プログラムがAPIYI APIを呼び出し、画像が生成され、URLが返されます
  2. プログラムがそのURLから画像をダウンロードします
ステージ2はお使いのサーバーから画像ストレージホストへ直接通信し、APIYI ゲートウェイを経由しません。そのため、以下のようになります:
  • APIYIのログにはリクエストが成功および課金済みと表示されます — 実際に画像は生成されています
  • プログラムはRead timed outやConnection resetのようなエラーを報告し、エラー内のホストはapi.apiyi.comではなく画像ドメインになります
  • Read timed outは接続が確立されたものの、長時間データが届かなかったことを意味します。「接続できない」こととは異なり、これ単体ではどちら側に原因があるかを特定することはできません
URLが有効な間は、同じURLを再ダウンロードできます(例えばgpt-image-2-vipの場合は48時間)。ダウンロードに失敗しても画像を再生成する必要はありません — 単にダウンロードを再試行してください。コードパターンについては、以下の「オプション2」を参照してください。
アラートメッセージを確認してください:API呼び出しが失敗したときはapi.apiyi.comを報告し、ダウンロードが失敗したときは画像ドメインに加えて「生成成功」を報告してください。この2つを混同すると、ダウンロードの問題がAPIの障害のように見えてしまいます。

主な原因

越境トラフィックの混雑

中国本土のサーバーが海外 CDN に到達する際、ピーク時間帯には国際出口回線で混雑が発生しやすく、速度低下やタイムアウトの原因になります。

ISP ルーティングの最適化不足

一部のクラウドプロバイダーは国際トラフィックを米国西海岸やヨーロッパ経由でルーティングし、不要な数十ミリ秒の遅延を追加します。

DNS 解決の不良

ローカル DNS が Cloudflare のホスト名を、最寄りの APAC ノードではなく遠方のエッジ(例: 米国西海岸)に解決する場合があります。

ファイアウォール / セキュリティグループの制限

一部のサーバーは、海外の IP レンジ、port 443、または特定の CDN ドメインへのアウトバウンドトラフィックを制限し、接続品質を低下させます。

HTTP/2 と接続の再利用

HTTP/2 や接続の再利用を行わないクライアントは、ファイルごとに TCP/TLS ハンドシェイクのコストを支払うことになります。

単一スレッドのダウンロード

逐次的な単一スレッドのダウンロードでは CDN の多重化の恩恵を受けられず、スループットは低いままです。

トラブルシューティングの手順

1

送信元IPとCDNノードの取得

画像ドメインがCloudflare経由で配信されている場合、その/cdn-cgi/traceパスを使用すると、1つのコマンドで送信元IPと割り当てられたノードを確認できます。Linux、macOS、Windowsのcmdで動作します:
次の3行を確認してください:ip=(送信元IP)、colo=(HKG、SIN、LAX、FRAなどのノードコード)、loc=(リージョン)。
  • 30秒以内に出力がない場合:サーバーがドメインにまったくアクセスできていません。ステップ4と5を中心に対処してください
  • 即座に出力される場合:接続は正常であり、問題は転送処理にあります。フェーズごとの所要時間を計測するため、ステップ3へ進んでください
2

ノートPCとサーバーの比較

ノートPCとサーバーの双方から同一の画像URLをダウンロードします(コマンドはステップ3を参照)。
  • ノートPCは高速でサーバーは低速:サーバー側のネットワーク経路が原因である可能性が最も高いですが、一部のルートでのみストレージ側の性能が低下している可能性もあります。両方の結果をお送りください
  • どこからでも低速:ストレージ側の問題である可能性が最も高いため、URLを添えてお問い合わせください
3

CDNへの基本ネットワークのテスト

ping、mtr、tracerouteを使用して、レイテンシとパケットロスを確認します:
サーバーからCloudflareへの全体的なスループットを確認するには、5 MBのテストデータをダウンロードします: curl -o /dev/null -m 60 -w "total=%{time_total} speed=%{speed_download}\n" "https://speed.cloudflare.com/__down?bytes=5000000" (Windowsでは、/dev/nullをNULに置き換えてください)。これも遅い場合はサーバーの送信回線(エグレス)に問題があります。これが高速で画像URLのみが遅い場合は、その結果をお送りください。パケットロス、200msを超えるレイテンシ、または海外を経由するようなルーティングの揺れは、いずれも回線レベルの問題を示しています。
4

実際のダウンロード速度の測定

curlを使用して、所要時間とスループットを確認します:
-m 60を指定すると、curlは60秒後に処理を中断しつつ所要時間を出力するため、処理が途中でハングすることはありません。-4の代わりに-6を指定して再度実行してください。片方のプロトコルでのみ停止する場合は、プログラムを正常に動作する方に固定できます。次の項目に注目してください:
  • time_namelookup:DNS名前解決時間
  • time_connect:TCP接続時間
  • time_appconnect:TLSハンドシェイク完了時間(0はハンドシェイク失敗を意味します)
  • time_starttransfer:最初の1バイトを受信するまでの時間(TTFB)
  • size_download:実際に受信したバイト数(0または極端に小さい値は接続されたものの転送が停止したことを意味します)
  • speed_download:平均スループット(バイト/秒)
5

DNS名前解決の調査

解決されたIPが地理的に近い場所にあるか確認してください。APACのユーザーにはAPACのエッジが割り当てられるべきです。そうでない場合は、パブリックDNSへの切り替えをお試しください。
6

サーバー自体の確認

「昨日は動作していたのに、今日は動かない」という場合、通常はサーバー上で何かが変更されたことを意味します。各項目を確認してください:
  • クラウドコンソール:トラフィッククォータを使い切っていないか、帯域幅が制限されていないか、アカウントの支払いが滞っていないか
  • 他のプロセスによって帯域幅が逼迫していないか(Windows:タスク マネージャー → パフォーマンス → イーサネット、Linux:iftop、nload)
  • セキュリティグループやファイアウォールでポート443および海外IPレンジが許可されているか、アウトバウンドルールが最近変更されていないか
  • プログラムが無効なプロキシを経由していないか:HTTP_PROXY / HTTPS_PROXYを確認し、Windowsではnetsh winhttp show proxyも確認してください

解決策

選択肢1: パブリックDNSへの切り替え(最も簡単)

多くのサーバーのデフォルトDNSは、Cloudflareを遠くのノードに解決してしまいます。以下のパブリックDNSサーバーをお試しください。
1.1.1.1を推奨します。これはCloudflare自身のDNSであり、最寄りのCloudflareエッジに確実に解決されるため、R2 / Cloudflare CDNトラフィックに最適です。

選択肢2: ダウンロード方法の最適化

並行ダウンロード

複数ファイルをまとめてダウンロードする場合は、帯域幅を最大限に活用するために並行ダウンローダー(aria2c -x 8、Pythonのasyncio + httpx)を使用してください。

短いタイムアウト + 再試行

接続タイムアウトと読み取りタイムアウトを個別に設定し、読み取りタイムアウトは約30秒に抑えて、3〜4回再試行してください。接続が停滞した場合、新規に接続し直すとうまくいくことが多く、120秒間待ち続けるよりもはるかに効率的です。

接続の再利用

繰り返しのハンドシェイクを避けるため、HTTP/2またはkeep-aliveに対応したクライアント(httpx、requests.Session())を使用してください。

ディスクへのストリーミング保存

ファイル全体をメモリに読み込むのではなく、レスポンスを直接ディスクへストリーミングして保存してください。
Pythonの例(推奨): timeout=120を使用した単一のダウンロードは避けてください。接続が停滞すると何も得られないまま120秒待たされることになり、タスク全体が失敗と判定されてしまいます。その結果、すでに生成されて課金対象となった画像が無駄になってしまいます。
aria2cの例(CLI):

選択肢3: より接続性の高いリージョンへの移行

ユースケースで許容される場合は、Cloudflareへの接続性が良好なリージョンを優先してください。

海外(推奨)

AWS / GCP / Azure / Cloudflare Workersはいずれも非常に低いレイテンシ(通常10〜50ミリ秒)でCloudflare R2に到達できます。

中国国内: プレミアムデータセンター

中国本土にデプロイする必要がある場合は、トリプルネットワークBGP+プレミアム国際回線(CN2 GIA、CMI、AS9929)を備えたデータセンターを選択してください。

香港 / シンガポール

優れた妥協案です。中国本土へのレイテンシが低く(30〜80ミリ秒)、アジア太平洋地域のCloudflare接続性も優れています。

格安VPSの回避

格安ホストは国際回線の送信トラフィックが著しく混雑していることが多く、ピーク時には数十KB/sまで低下する可能性があります。CDNトラフィックの負荷が高いワークロードには推奨されません。

選択肢4: 別のホストを経由した中継(最後の手段)

サーバーがどうしてもCloudflareに高速にアクセスできず、リージョンの変更も不可能な場合:
  1. 海外サーバーを中継として利用する: まず海外のマシンにダウンロードし、その後専用線やプレミアム回線経由で転送します
  2. 独自のオブジェクトストレージ経由で中継する: 自前のOSS / COS / S3(例:中国リージョンのバケット)にアセットをミラーリングし、そこから配信します
  3. 事前ウォームアップとキャッシュ: バックエンドで一度ダウンロードし、後続のリクエストにはローカルキャッシュから対応します
有効期限にご注意ください画像や動画に対してAPIYIから返されるCDN URLには、通常、有効期限が設定されています(返却されたURLをご確認ください)。後からリンク切れになるのを防ぐため、コールバックを受信したら直ちにアセットをダウンロードし、ご自身のストレージに永続化してください。

よくある質問

家庭用ブロードバンドとデータセンターの国際送信回線では品質が大きく異なる場合があり、これが最も一般的な原因です。ただし、それだけが理由ではありません。ストレージ側のノードのパフォーマンスが低下している場合、特定のルートにのみ影響が及ぶことがあり、これも「ノートパソコンでは高速なのにサーバーでは遅い」という現象として現れます。これだけで判断せず、上記の手順を実行して結果をお送りいただければ、ストレージ側と照合して確認いたします。
そのテキストは、通常お客様自身のプログラムによって組み立てられています。実際に失敗したのは画像のダウンロードであり、生成 API の呼び出し自体は成功しています。詳細情報に記載されているホストを信頼し、これら2種類のエラーメッセージを分けて処理することをご検討ください。
DNS は、名前解決される CDN エッジにのみ影響します。基盤となる国際帯域がすでに混雑している場合、DNS を変更しただけでは改善されません。リージョンを変更するか、海外ホスト経由で中継することをご検討ください。
Cloudflare は中国本土でブロックされていませんが、ピーク時間帯には国際回線が混雑することがあり、一部の ISP が最適でないルートを経由するため、アクセスの品質が不安定になります。これは国境を越えるネットワーク全般の課題であり、R2 固有の問題ではありません。
aria2c や wget -c など、**レジューム(再開)**に対応したダウンローダーを使用し、適切なタイムアウトとリトライを設定してください:
動画はサイズが大きく(数十〜数百 MB)、Base64 では約 33% のオーバーヘッドが発生する上にレジューム機能もサポートされないため、実際にはより遅くなり帯域幅を浪費します。大容量ファイルに対する Base64 の使用は推奨されません。一部の画像エンドポイントでは Base64 レスポンスをサポートしています。詳細は関連する API ドキュメントをご参照ください。
海外ホスト(AWS 東京、シンガポールなど)から同じ curl テストを実行してください。そこで高速であり、お使いのサーバーで遅い場合、ボトルネックは CDN 自体ではなく、お使いのサーバーと Cloudflare の間にあります。

関連ドキュメント

ネットワークプロキシ設定

国際接続が不安定な場合のプロキシオプション

APIYI サーバーの設置場所

APIYI サーバーの設置場所とレイテンシについてご確認ください

Veo 動画生成 API

動画 API の出力形式と URL の有効期限

サポートへのお問い合わせ

解決しない場合は、サポートチームがお手伝いします
サポートに提供する情報自己診断で解決しない場合は、何度もやり取りする手間を省くため、以下の情報を一度にまとめてお送りください:
  • 問題が発生している画像 URL とその生成日時(またはリクエスト ID)
  • 完全な /cdn-cgi/trace 出力(お使いのノート PC から1つ、サーバーから1つ)
  • curl のフェーズタイミング出力(-4 で1回、-6 で1回実行)
  • tracert / mtr の出力と 5 MB のテストダウンロード結果
  • ご利用のサーバーのクラウドプロバイダーとリージョン
  • 問題が発生し始めた大体の日時(タイムゾーン付き、例:21:23 (UTC+8))
送信する前に、スクリーンショットに写っている API Key を必ずマスキングしてください。