Skip to main content
Orux AIOruxAI

Orux AI / モデルノート

FLUX.2 Proの画像をA4観察ワークシートに配置する

既存のFLUX.2 Proのキツネ作例を使い、PythonでA4観察ワークシートを作成。画像を伸ばさず、質問を別途組版し、実効解像度と再利用費用を確認します。

Orux AI公開 13 分で読めます
FLUX.2 Proの画像をA4観察ワークシートに配置する — 既存のFLUX.2 Proのキツネ作例を使い、PythonでA4観察ワークシートを作成。
目次

手元にある画像に合わせてページを組み立てる

FLUX.2 Proの正方形イラストは、動物を引き伸ばしたり、モデルにワークシートの文字を生成させたりせずに、A4の観察ワークシートにできます。 画像全体を寸法の決まった正方形の枠に収め、質問は別途組版し、AI生成画像であることを明記します。この記事ではOruxに保存されている雪の中のキツネの作例を使い、プロンプトの提案だけでなく、再現可能な実際のページレイアウトを作ります。

想定するのは、目に見える細部を説明し、観察と根拠のない推測を区別する視覚リテラシーの活動を準備する教育者です。動物学的な識別シートや、野生動物を目撃した証拠を作るものではありません。完成ページには手書きメモ用の余白を設け、このイラストからは何が分からないかを問いかけます。コードは既存の利用許可された作例をダウンロードし、ローカルでページを組み立て、フル解像度のPNGを保存します。画像生成リクエストは送りません。

既存のFLUX.2 Proによるキツネのイラストと、その画像を使ってローカルで組版したA4観察ワークシート。
既存のFLUX.2 Proによるキツネのイラストと、その画像を使ってローカルで組版したA4観察ワークシート。

被写体には既存のモデル生成イラストを使い、ワークシートは同じ画像からローカルでレイアウトしました。ワークシート自体は別のモデル出力ではありません。

実際のFLUX.2 Proのキツネ作例から始める

素材はOruxのFLUX.2 Proモデルページにあるfox作例です。保存されている生成入力ではresolution: "1K"とaspect_ratio: "1:1"を指定し、次のプロンプトを使っています。原文をそのまま掲載します。

Wildlife photograph of a red fox standing in fresh snow in a birch forest, soft snowflakes falling, warm rim light on its fur, shallow depth of field.

「photograph」という語は生成リクエストの一部であり、結果が実在の動物を記録した写真だという主張ではありません。既存出力はAI生成の1,024 × 1,024ピクセルのイラストです。今回は保存済みの結果を再利用しており、この記事のために新たなFLUX.2 Pro呼び出しは行っていません。

既存のFLUX.2 Pro作例。雪の上に立つアカギツネと柔らかく描かれた白樺の背景、暖色の輪郭光。
既存のFLUX.2 Pro作例。雪の上に立つアカギツネと柔らかく描かれた白樺の背景、暖色の輪郭光。

FLUX.2 Proが生成した、公開済みの元のキツネ作例です。1,024 × 1,024のイラストを元画像として変更せずに再利用し、野生動物の写真としては提示していません。

目に見える構図は、レイアウトの判断に関わります。動物の頭は右上側にあり、胴体と尾は左下に向かって広がっています。雪、柔らかく描かれた木々の背景、暖色の輪郭光など、観察できる細部が複数あります。正方形全体を残せば、尾、脚、周囲の状況を保てます。正方形を引き伸ばして縦長のページ全体を埋めると、これらの関係がゆがみます。狭い縦長に切り抜けば、学習者が説明できる周囲の情報が失われます。

横長・縦長のWebヘッダー全体を意図的に埋める別のレイアウト作業については、Seedreamのレスポンシブ画像トリミングガイドを参照してください。一方、このワークシートでは元の正方形全体を残します。

授業での問いは、見えている細部に即したものにします。「どの部分から寒さを感じますか?」なら、雪や描かれた環境を根拠に説明できます。「この写真はどこで撮影されましたか?」と聞けば、生成画像には存在しない来歴を前提にしてしまいます。写実的に見えるというだけで、場所、季節、カメラ設定、動物の行動を推定してはいけません。

画像生成の設定とページ寸法を分ける

2026年11月3日に確認したOruxの公開フォームでは、このエイリアスの設定は解像度1K、縦横比1:1のみです。保存されたキツネの出力も、この正方形の形式と一致します。以下で作る2,480 × 3,508ピクセルのワークシートは、ローカルで組み立てたページであり、FLUX.2 Proが生成したA4画像ではありません。

Black Forest Labsのネイティブな寸法ドキュメントでは、FLUX.2の幅と高さに関する、より広い設定範囲を説明しています。ただし、そのネイティブ機能が現在のOruxフォームに追加設定として存在することは裏付けられません。この作業では、未確認のカスタムサイズ指定を当てにせず、実際に取得できる正方形の出力を使います。

ページは、W3Cのページサイズ資料にも記載されている210 × 297 mmというA4の公称比率に従います。1インチあたり300ピクセルのページグリッドへ換算し、丸めると2,480 × 3,508ピクセルになります。イラストは1,000 × 1,000ピクセルの枠に置き、その外側にタイトルと質問を配置します。これにより、ソースコード内で画像と編集用テキストを別々に変更できます。

この分離は、文字を正確に保ちたい場面で役立ちます。誤字の修正、翻訳、質問の追加に必要なのはローカルのレイアウト変更だけで、画像生成のやり直しではありません。書き出したPNGは統合された画像なので、別々の文字レイヤーが残るとは考えず、Pythonソースと元画像を編集可能なマスターとして保管してください。

完成したワークシートで実際に使えるもの

ページには短いタイトル、構図を変えていない正方形画像、3つの観察用の問い、メモ用の罫線5本があります。見える位置のキャプションに、AI生成画像であり野生動物の記録ではないことを記載します。コード内のワークシート用ラベルは英語で、プレビューでも英語のままです。この記事の日本語キャプションで構成を説明しています。別の言語のワークシートを作る場合は、文字列を置き換え、その文字体系に対応したフォントを使い、文字の境界チェックを再実行してください。

3つの問いには、それぞれ目的があります。「What can you see?(何が見えますか?)」は直接的な描写を求めます。「What suggests cold?(何から寒さを感じますか?)」は結論を視覚的な手がかりに結び付けます。「What is uncertain?(何が不確かですか?)」は足りない証拠に気付くための問いです。解答例では、見えている特徴と現実世界についての断定を区別します。地面は雪のように見えますが、この画像から実測の気温や地理的な場所は確定できません。

画像枠の幅は、公称の印刷スケールで約84.67 mmです。この幅に元画像の1,024ピクセルを配置するため、元画像の実効密度は1インチあたり307.2ピクセルとなります。これはファイルに「300 DPI」と書き込むだけのこととは異なります。メタデータで元画像の細部を増やすことはできません。同じ画像を幅180 mmまで拡大すると、ページのメタデータにかかわらず、元画像の密度は約1インチあたり144.5ピクセルまで下がります。

307.2という値は、再サンプリング前の元画像のピクセル数から計算したものです。コードは1,024ピクセルの元画像を1,000ピクセルの枠に縮小するため、ページの公称倍率では、実際に配置された画像領域は1インチあたり300ピクセルになります。

キツネの正方形イラスト全体を残し、観察用の問いとAI生成画像であることを加えたA4ワークシート。
キツネの正方形イラスト全体を残し、観察用の問いとAI生成画像であることを加えたA4ワークシート。

実際にローカルで書き出したワークシートを、Web用に縮小して表示しています。構図を保った正方形イラストの外側に、英語のラベル、3つの問い、メモ用の罫線を配置しています。キャプションではAI生成イラストと明記しています。

埋め込んでいるページ画像は、縮小したWebプレビューです。フルサイズの2,480 × 3,508ピクセルのPNGは、コードを使ってローカルで生成してください。実機プリンターによる校正印刷は行っておらず、印刷ダイアログの「用紙に合わせる」設定で実際の倍率が変わることがあります。授業用に配布する前に、手元の機器で用紙サイズ、印刷余白、コントラスト、書き込みスペースを確認してください。

費用を比較する:再利用、1枚の新規画像、10枚の候補

2026年11月3日に確認したflux-2-proの現在のOrux料金は、公開の既定価格行で1画像あたり2.67024 Creditsです。設定されている換算の1 Credit = USD 0.005を使うと、1画像あたりUSD 0.0133512となります。実際に再利用できる素材は保存済みの1K正方形作例であり、別の解像度について未確認の料金を仮定していません。

作業の選択新しい画像リクエスト数Oruxでの生成費用の計画額変更できるもの
この利用許可された既存作例を再利用し、ローカルで組版する0追加0 Credits (USD 0)ワークシートの文言、余白、レイアウト
現在の掲載料金で候補を1枚新規生成する12.67024 Credits (USD 0.0133512)別の生成イラスト
現在の掲載料金で候補を10枚生成する1026.7024 Credits (USD 0.133512)検討できる画像候補が増える。使えるワークシート10枚を保証するものではない

横にスワイプすると表全体を確認できます。

0の行が意味するのは、再利用した素材に対する新たなモデル生成料金がないことです。すべての素材を自由に再利用できるという意味でも、ソフトウェア、人件費、印刷に費用がかからないという意味でもありません。再利用の権限がある素材を使ってください。他の行も計算上の計画例であり、今回実行したリクエスト、アカウント向けの見積書、成功率の主張ではありません。

別のイラストを得る判断と、ページを調整する判断は分けます。メモ欄を広げるのは組版の問題です。姿勢や場面を全面的に変えるには別の元画像が必要です。ワークシートの見出しを直すために画像を生成し直すと、根本の文字レイアウトを解決できないまま、費用と見た目のばらつきが増えます。後日有料で連携する前には、現在のモデル料金とOrux APIドキュメントを確認してください。

Pythonでページ全体を再現する

Python 3.9以降を使い、python3 -m pip install "Pillow>=10.1"でPillowをインストールします。以下をmake_card.pyとして保存し、書き込み可能なディレクトリでpython3 make_card.pyを実行してください。Pillowにはサイズ指定可能な既定フォントと画像の保存に関する説明があります。プログラムは既存の公開JPEGを取得してローカルでレイアウトするだけで、生成用エンドポイントには接続せず、APIキーも使いません。

Python
import hashlib
import io
import json
import urllib.request
from pathlib import Path
from PIL import Image, ImageDraw, ImageFont

URL = 'https://orux-ai.oss-cn-hongkong.aliyuncs.com/model-examples/9129330888225451304/b90f1d3428e4759fb18de8a1781769dc81ddfc45725a21d6982692c107812698.jpg'
SHA = 'b90f1d3428e4759fb18de8a1781769dc81ddfc45725a21d6982692c107812698'
OUT = Path('fox-card.png')
PAGE = (2480, 3508)  # Rounded A4 pixel grid at 300 pixels per inch.
DPI = 300
BOX = (180, 550, 1000, 1000)  # x, y, width, height; preserve full square.


def label(draw, xy, value, size, color='#17283b'):
    font = ImageFont.load_default(size=size)
    bounds = draw.textbbox(xy, value, font=font)
    if bounds[0] < 0 or bounds[1] < 0 or bounds[2] > PAGE[0] - 120 or bounds[3] > PAGE[1] - 120:
        raise ValueError('text exceeds safe page area')
    draw.text(xy, value, font=font, fill=color)
    return bounds


def main():
    with urllib.request.urlopen(URL, timeout=30) as response:
        data = response.read()
    if hashlib.sha256(data).hexdigest() != SHA:
        raise ValueError('source changed; inspect before reusing')
    source = Image.open(io.BytesIO(data)).convert('RGB')
    if source.size != (1024, 1024):
        raise ValueError('unexpected source dimensions')
    x, y, w, h = BOX
    if w > source.width or h > source.height:
        raise ValueError('layout would upscale source')
    page = Image.new('RGB', PAGE, 'white')
    draw = ImageDraw.Draw(page)
    bounds = []
    def write(xy, value, size, color='#17283b'):
        bounds.append(label(draw, xy, value, size, color))
    write((180, 180), 'LOOK CLOSELY', 112)
    write((180, 340), 'Describe the image. Test your assumptions.', 56)
    page.paste(source.resize((w, h), Image.Resampling.LANCZOS), (x, y))
    write((1320, 580), 'VISIBLE CLUES', 60)
    for i, line in enumerate(['1. What can you see?', '2. What suggests cold?', '3. What is uncertain?']):
        write((1320, 740 + i * 210), line, 48)
    write((180, 1650), 'AI-generated illustration | FLUX.2 Pro', 44, '#5b6470')
    write((180, 1720), 'Not a wildlife record.', 44, '#5b6470')
    write((180, 1940), 'OBSERVATION NOTES', 62)
    for line_y in [2100, 2280, 2460, 2640, 2820]:
        draw.line((180, line_y, 2300, line_y), fill='#bac4cd', width=3)
    write((180, 3010), 'Name: __________________  Date: ______________', 46)
    write((180, 3220), 'Example image: orux.top/models/flux-2-pro', 40, '#5b6470')
    page.save(OUT, dpi=(DPI, DPI))
    reopened = Image.open(OUT)
    assert reopened.size == PAGE
    assert abs(reopened.info['dpi'][0] - DPI) < 0.1
    source_ppi = source.width / (w / DPI)
    result = {'sourceSha256': SHA, 'sourceSize': source.size,
              'pageSize': PAGE, 'storedDpi': reopened.info['dpi'],
              'imageBox': BOX, 'displayWidthMm': w / DPI * 25.4,
              'effectiveSourcePpi': source_ppi,
              'sourceAspectPreserved': w / h == source.width / source.height,
              'upscaled': False, 'textBoundsChecked': len(bounds),
              'outputSha256': hashlib.sha256(OUT.read_bytes()).hexdigest()}
    print(json.dumps(result, indent=2))

if __name__ == '__main__':
    main()

実際のローカル実行では、1,024 × 1,024の元画像、2,480 × 3,508の書き出し、11か所の文字境界チェック、画像の縦横比1:1の維持、拡大処理なしを確認しました。PNGを開き直すと、DPIは約299.9994と報告されました。これは今回の書き出しで保存されるメタデータの丸め表現です。画像枠の幅は1,000ピクセルのままで、前述した84.67 mmの幅と、元画像の1インチあたり307.2ピクセルという値になります。

元画像のハッシュ確認によって、同じURLの画像が変更されたのに気付かず再構築することを防ぎます。不一致が出た場合は、確認を削除して無理に成功させるのではなく、差し替わった画像を調べて承認する必要があります。境界のガードが確認するのは、このページの外側の安全領域です。翻訳した文章の自動折り返し、すべての重なりの検出、科学的内容の検証を行うものではありません。フォントやPillowのバージョンによって描画は変わるため、編集後には生成したページを確認してください。

別の画像を求める前にレイアウトを見直す

まず、動物の全身の輪郭が残っていることと、質問を読めることを確認します。次に、解答欄が活動に合うかを見ます。短い描写なら罫線入りのメモ欄に収まりますが、長い作文なら別のページが必要です。AI画像であることを示すキャプションは、大きなデスクトップ画面だけでなく、実際に読む大きさで確認してください。後で編集する人がモデル由来の部分を把握できるよう、元のプロンプトと元画像をレイアウトと一緒に保管します。

動物を大きくする必要があるなら、拡大前に元画像の実効密度を計算します。質問にもっと場所が必要なら、画像を切り抜く前に、別途組版した文字を移動するか短くします。授業で検証済みの解剖学、生息地、行動を扱う必要がある場合は、この生成イラストを証拠とせず、その主張を裏付ける信頼できる参考資料を選んでください。

完成物が支えるのは、画像を観察しながら、その画像が証拠として示せる範囲を考えるという1つの具体的な活動です。FLUX.2 Proが野外記録用の道具になるわけではありません。役割分担は明確です。視覚的な題材にはモデルの既存イラストを使い、正確な文字、寸法、書き込みスペースには再現性のあるページ組版を使います。

FAQ

A4ワークシートを生成したのはFLUX.2 Proですか?

いいえ。FLUX.2 Proが生成したのは既存の正方形のキツネイラストです。A4サイズのページ、ラベル、書き込み欄はPythonでローカルに組み立てました。今回確認したOruxの公開フォームは1Kと1:1に対応しており、A4生成の設定を検証したものではありません。

300 DPIを設定すると元画像の細部は増えますか?

いいえ。DPIメタデータは意図する印刷スケールに関係しますが、元画像の本当の細部を増やしません。既存の1,024ピクセルの画像を、ワークシートの公称幅84.67 mmの枠に配置すると、元画像の密度は約1インチあたり307.2ピクセルになります。

質問を翻訳するには、別の画像を生成する必要がありますか?

別途組版した質問の編集に、新しい画像生成は必要ありません。文字列を変更し、その言語に適したフォントを選んで、新しいレイアウトを確認してください。書き出したPNGは統合画像なので、編集可能なコードと元画像を保管します。

このワークシートで実際のキツネに関する事実を教えられますか?

このワークシートが扱うのは視覚的な描写と不確かさの検討であり、検証済みの動物学的な主張ではありません。キャプションにもAI生成画像と記載しています。解剖学、生息地、行動を教える際は、信頼できる参考資料を使ってください。

この記事では実際に何をテストしましたか?

ローカルでのページ書き出し、素材のハッシュ、画像寸法、文字の境界、公称印刷スケールの計算、価格の掛け算を確認しました。新たなモデル呼び出し、画質ベンチマーク、実機での校正印刷、教室での学習効果の調査は行っていません。

Orux AI で OruxのFLUX.2 Proモデルページ を試すモデルページでオンライン試用し、料金と API の例を確認できます。モデルを開く

1 つの API でこれらのモデルを利用

チャット・画像・動画・音声モデルに対応した OpenAI 互換 API。Credits で従量課金です。