<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>画像プロンプト生成機 (パノラマ特化)</title>
<style>
body { font-family: "Helvetica Neue", Arial, "Hiragino Kaku Gothic ProN", "Hiragino Sans", sans-serif; padding: 1em; background-color: #f0f2f5; color: #333; }
.container { display: flex; flex-direction: column; gap: 20px; max-width: 700px; margin: 0 auto; background: #fff; padding: 25px; border-radius: 16px; box-shadow: 0 4px 12px rgba(0,0,0,0.1); }
h1 { text-align: center; color: #444; font-size: 1.6em; margin-bottom: 10px; }
.section-box {
border: 1px solid #e1e4e8;
padding: 20px;
border-radius: 12px;
background-color: #fafbfc;
}
.section-label {
font-weight: bold;
color: #555;
display: block;
margin-bottom: 10px;
display: flex;
align-items: center;
gap: 5px;
}
/* 入力要素のデザイン */
.prompt-input, textarea, select {
width: 100%;
padding: 12px;
font-size: 1em;
border: 1px solid #ccc;
border-radius: 8px;
box-sizing: border-box;
background-color: #fff;
}
.prompt-input:focus, textarea:focus, select:focus {
outline: none;
border-color: #007bff;
box-shadow: 0 0 0 3px rgba(0,123,255,0.1);
}
/* 数値調整グリッド */
.settings-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
gap: 15px;
margin-bottom: 20px;
}
.setting-item {
background: #fff;
border: 1px solid #ddd;
padding: 10px;
border-radius: 8px;
text-align: center;
}
.setting-item label {
display: block;
font-size: 0.85em;
color: #666;
margin-bottom: 5px;
font-weight: bold;
}
.setting-item input[type="number"] {
width: 100%;
padding: 8px;
text-align: center;
font-size: 1.1em;
border: 1px solid #ccc;
border-radius: 6px;
}
/* 履歴周り */
.history-controls { display: flex; gap: 10px; align-items: center; margin-top: 8px; }
select.history-select { flex-grow: 1; padding: 8px; border: 1px solid #ddd; }
.clear-btn { font-size: 0.85em; cursor: pointer; color: #d9534f; background: none; border: 1px solid #d9534f; border-radius: 6px; padding: 6px 10px; white-space: nowrap; }
/* ランダムボタン */
.random-btn {
width: 100%;
padding: 12px;
font-size: 1em;
font-weight: bold;
color: #fff;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border: none;
border-radius: 8px;
cursor: pointer;
transition: all 0.2s;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}
.random-btn:active { transform: translateY(2px); box-shadow: none; }
.random-btn:hover { opacity: 0.9; }
/* 詳細エリア */
textarea { height: 180px; line-height: 1.6; resize: vertical; }
/* 送信エリア */
.controls { display: flex; gap: 10px; align-items: center; margin-top: 10px; }
button.send-btn {
padding: 12px 25px;
cursor: pointer;
font-size: 1em;
background-color: #007bff;
color: white;
border: none;
border-radius: 8px;
font-weight: bold;
white-space: nowrap;
box-shadow: 0 4px 6px rgba(0,123,255,0.2);
}
button.send-btn:hover { background-color: #0056b3; }
button.copy-btn {
padding: 12px 25px;
cursor: pointer;
font-size: 1em;
background-color: #28a745; /* 緑色 */
color: white;
border: none;
border-radius: 8px;
font-weight: bold;
white-space: nowrap;
box-shadow: 0 4px 6px rgba(40, 167, 69, 0.2);
}
button.copy-btn:hover { background-color: #218838; }
.sub-label { font-size: 0.8em; color: #888; margin-top: -5px; margin-bottom: 10px; display:block;}
</style>
</head>
<body>
<h1>🎨 超・画像生成プロンプト作成機 (個数調整版)</h1>
<div class="container">
<div class="section-box">
<label class="section-label">📌 1. 何を作りますか?(指示)</label>
<input type="text" id="instructionInput" class="prompt-input"
value="360度パノラマ画像を作って。">
<div class="history-controls">
<select id="instructionHistory" class="history-select" onchange="selectHistory()">
<option value="" disabled selected>履歴から選択...</option>
</select>
<button type="button" class="clear-btn" onclick="clearHistory()">履歴削除</button>
</div>
</div>
<div class="section-box">
<label class="section-label">🎲 2. どんな情景ですか?(詳細)</label>
<span class="sub-label">各要素の個数を指定してください(0にすると除外されます)</span>
<div class="settings-grid">
<div class="setting-item"><label>SF・未来</label><input type="number" id="n_scifi" value="1" min="0"></div>
<div class="setting-item"><label>ファンタジー</label><input type="number" id="n_fantasy" value="1" min="0"></div>
<div class="setting-item"><label>自然</label><input type="number" id="n_nature" value="1" min="0"></div>
<div class="setting-item"><label>日常</label><input type="number" id="n_daily" value="1" min="0"></div>
<div class="setting-item"><label>時間・天候</label><input type="number" id="n_time" value="1" min="0"></div>
<div class="setting-item"><label>スタイル</label><input type="number" id="n_style" value="1" min="0"></div>
<div class="setting-item"><label>物体</label><input type="number" id="n_creature" value="1" min="0"></div>
<div class="setting-item"><label>状況</label><input type="number" id="n_object" value="1" min="0"></div>
<div class="setting-item"><label>雰囲気</label><input type="number" id="n_atm" value="1" min="0"></div>
</div>
<button class="random-btn" onclick="generateRandomPrompt()">
設定した個数でランダム生成する!
</button>
<textarea id="detailArea" placeholder="ボタンを押すと、ここに詳細な情景が生成されます..."></textarea>
</div>
<div class="section-box" style="background-color: #eef2ff; border-color: #d0d7de;">
<label class="section-label">🚀 3. AIを選択して作成</label>
<div class="controls">
<select id="aiSelector">
<option value="gemini">Google Gemini</option>
<option value="bing">Bing Image Creator (日本語OK/無料)</option>
<option value="firefly">Adobe Firefly (日本語OK/高品質)</option>
<option value="chatgpt">ChatGPT (DALL-E 3)</option>
<option value="claude">Claude (プロンプト相談用)</option>
<option value="perplexity">Perplexity (検索して作成)</option>
</select>
<button class="copy-btn" onclick="askAI(false)">コピーのみ</button>
<button class="send-btn" onclick="askAI(true)">立ち上げて開始</button>
</div>
</div>
</div>
<script>
// ---------------------------------------------------------
// ■ 設定:ランダムワードリスト
// ---------------------------------------------------------
const promptData = {
scifi: [
"近未来都市の摩天楼", "ネオン輝くサイバーパンクな路地裏", "巨大な宇宙ステーションのドック",
"火星の居住ドーム", "浮遊する空中都市", "量子コンピュータの内部空間", "ディストピアな地下都市",
"ホログラム広告が溢れる繁華街", "海底に沈んだ未来都市の廃墟", "軌道エレベーターのターミナル",
"植物と機械が融合したソーラーパンクな庭園", "ワープ航法中の宇宙船", "二つの月が浮かぶ異星の空",
"アステロイドベルトの採掘基地", "ブラックホールの事象の地平線", "ダイソン球の巨大構造物",
"ガス惑星の軌道プラットフォーム", "銀河を背景にした宇宙艦隊", "未知の惑星の原生林", "氷の惑星の秘密基地",
"空飛ぶ車の渋滞", "重武装した二足歩行メカ", "反重力バイク","巨大な恒星間移民船", "透明なチューブを走るリニアトレイン",
"一人乗りの飛行ポッド", "パワードスーツを装着した兵士", "深海探査用潜水艇", "可変翼の宇宙戦闘機", "サイボーグの整備士",
"脳直結インターフェース", "アンドロイドの製造ライン", "ナノマシンの集合体", "人工知能の中枢サーバー",
"空中に投影される立体ディスプレイ", "拡張現実のナビゲーション", "コールドスリープのカプセル",
"デジタル雨が降る街", "グリッチノイズの入った視界","マトリックスのようなデータ空間", "サイバーパンクなバーのカウンター",
"錆びついた巨大ロボットの残骸", "発光するキノコの森", "クリスタルでできたデータバンク", "磁気嵐の吹き荒れる荒野",
"反物質エンジンの青い光", "未来のコンビニエンスストア", "垂直農場の緑", "宇宙港の混雑したロビー",
"未知の異星生物","シールド越しに見る超新星爆発", "無重力空間での浮遊", "クローン培養槽", "テラフォーミングされた惑星の地表",
"サイバー義肢の露店", "ホバーボードに乗る若者", "空を覆う巨大な宣伝飛行船", "未来の医療ポッド",
"エネルギーラインが走る壁面", "金属生命体の群れ", "情報端末のホログラムキーボード", "惑星直列の夜",
"銀河鉄道の駅", "宇宙を泳ぐ巨大生物", "蒸気とネオンのスチームパンク", "サイバータトゥー", "虹彩認証スキャン",
"未来の図書館", "プラズマシールド", "レーザー加工機", "遺伝子操作ラボ", "タイムマシンのゲート",
"異次元への裂け目", "要塞化した移動都市", "砂漠に埋もれた宇宙船", "AIホログラムのアバター",
"ニューラルネットワークの可視化", "多層構造のハイウェイ", "ドローン配送", "合成食料の屋台",
"エネルギー採掘リグ", "月面クレーターの影", "宇宙エレベーターのゴンドラ", "バイオルミネセンスの海",
"放棄された研究所", "センチネルロボット", "未来のスポーツスタジアム", "重力制御装置", "エネルギータンク",
"翻訳機端末", "レーザーブラスター", "プラズマソード", "宇宙服のバイザー", "電子回路のようなタトゥー",
"ホログラムの歌手", "サイバー空間の玄関口"
],
fantasy: [
"古代遺跡が眠る密林", "魔法使いの隠れ家", "クリスタルの洞窟", "雲の上の神殿",
"ドラゴンの巣がある火山", "妖精が住む光る森", "中世ヨーロッパ風の城下町", "空飛ぶ島々",
"エルフの聖なる泉", "ドワーフの地下要塞", "世界樹の根本", "満月の夜の古城", "霧深い沼地と魔女の家",
"天空に浮かぶ島々", "夕暮れの冒険者ギルド", "賑やかな市場の屋台", "薄暗い地下ダンジョンの通路",
"伝説の聖剣が刺さった岩", "錬金術師の散らかった工房", "召喚魔法陣と光の柱", "グリフォンが飛び交う渓谷",
"人魚が泳ぐサンゴ礁の宮殿", "氷の女王が住む水晶の城", "灼熱の溶岩地帯", "砂漠に半分埋もれた巨像", "廃墟となった神殿",
"オーロラが輝く雪原", "巨大なキノコの森", "精霊が集まる湖畔", "雷雨の中の塔", "王宮の大広間", "古い図書館と禁断の魔導書",
"宝箱の山", "ミミックが潜む部屋", "ユニコーンの休息", "フェニックスの羽ばたき", "巨大なゴーレム", "スケルトンの軍団",
"オークの砦", "ゴブリンの洞窟", "スライムの群生地", "魔法の絨毯で空を飛ぶ", "ペガサスに乗った騎士", "ドラゴンライダー",
"黒騎士の威圧感", "白魔道士の祈り", "弓使いのエルフ", "ドワーフの鍛冶屋", "吟遊詩人の演奏", "盗賊の隠れ家",
"賢者の石", "光り輝くポーション", "ルーン文字が刻まれた石碑", "魔法の杖", "錆びついた鎧", "ドラゴンの鱗",
"マンドラゴラ", "使い魔の黒猫", "クリスタルボール", "空飛ぶ帆船", "海賊船とクラーケン", "虹の架かる滝", "星降る夜の野営地",
"キャンプファイアの炎", "ランタンの灯る石畳の道", "ツタの絡まる石橋", "ステンドグラスの大聖堂", "地下墓地の石棺",
"異界へのゲート", "呪われた森", "聖なる結界", "マナの奔流", "炎の精霊", "水の精霊", "風の精霊", "土の精霊",
"幻獣の卵", "ガラスの靴", "カボチャの馬車", "お菓子の家", "豆の木", "石化した人々", "鏡の国", "時計塔の歯車",
"操り人形の館", "迷いの森", "オアシスの蜃気楼", "深海の沈没船", "天空の回廊", "女神の彫像", "英雄の記念碑",
"終末の予言書", "封印された扉", "魔法学院の教室", "薬草園", "夜光虫の海", "守護獣の視線", "戦乙女ヴァルキリー",
"神々の黄昏", "約束の地", "冒険の始まり"
],
nature: [
"静かな湖畔のキャンプ場", "オーロラが見える雪原", "サンゴ礁が広がる海底",
"桜が満開の並木道", "紅葉が美しい日本庭園", "広大なサバンナ", "霧の立ち込める海岸", "険しい山岳地帯",
"エメラルドグリーンの透き通る海", "波打ち際の白い砂浜", "木漏れ日が差し込む深い森", "満天の星空と天の川",
"燃えるような夕焼け空", "入道雲が湧き上がる夏の空", "一面に広がるひまわり畑", "ラベンダー畑の紫の絨毯",
"雪を頂いた壮大な山脈", "グランドキャニオンのような渓谷", "熱帯雨林のジャングル", "苔むした岩と清流",
"大迫力の巨大な滝", "水面に映る逆さ富士", "砂丘に描かれた風紋", "ダイヤモンドダスト", "マングローブの林",
"竹林の小径", "鍾乳洞の神秘的な空間", "噴煙を上げる火山", "雲海に浮かぶ山頂", "切り立ったフィヨルド",
"岩肌が露出した荒涼とした大地", "カルスト台地の奇岩", "新緑のブナ林", "朝露に濡れた草花", "風に揺れる黄金色の麦畑",
"色とりどりの高山植物", "ダブルレインボー", "皆既日食の瞬間", "流れ星が降り注ぐ夜", "紫色の雷光", "台風一過の青空",
"薄明光線が降り注ぐ谷", "月明かりに照らされた海", "桜吹雪が舞う川沿い", "銀世界に佇む一本松", "紅葉で真っ赤に染まる山肌",
"凍りついた滝", "初雪が積もった庭", "落ち葉の絨毯", "梅雨時の紫陽花", "秋のすすき野原", "野生の馬が走る草原",
"鹿が佇む静かな森", "渡り鳥の群れ", "ホタルが飛び交う小川", "クジラが泳ぐ大海原", "イチョウ並木のトンネル", "藤棚の下",
"ブドウ畑の丘", "サボテンの生える砂漠", "霧氷のついた枝", "蜃気楼が見える地平線", "夜明け前の蒼い世界", "水平線に沈む太陽",
"青の洞窟", "孤島のリゾート", "氷河の崩落", "湿原の木道", "菜の花畑とローカル線", "棚田の夕暮れ", "茶畑の幾何学模様",
"オアシスの泉", "間欠泉の噴出", "塩湖の鏡張り", "バオバブの並木道", "セコイアの巨木", "断崖絶壁の灯台", "入江の漁村",
"嵐の海", "雪解け水が流れる川", "水芭蕉の群生地", "ネモフィラの青い丘", "コスモス畑", "彼岸花が咲く畦道", "樹氷の森",
"流氷の海", "火口湖のエメラルドグリーン", "リアス式海岸", "干潟の夕景", "朝靄に包まれた牧場", "渓谷の吊り橋",
"風車のある風景", "水車小屋と小川", "蓮の花が咲く池", "サトウキビ畑", "パイナップル畑",
"雪の結晶", "つらら", "霜柱", "春一番の風"
],
daily: [
"日差しが差し込む図書館", "散らかった画家の部屋", "雨の日のカフェの窓辺",
"賑やかな夜の屋台通り", "誰もいない深夜のコンビニ", "レトロなゲームセンター", "活気ある市場",
"朝日が差し込むキッチン", "通勤ラッシュの駅のホーム", "猫が眠る縁側", "放課後の夕暮れの教室",
"雨上がりの水たまり", "静かな夜のコインランドリー", "焼きたてのパンが並ぶベーカリー",
"古い本屋の埃っぽい匂い", "洗濯物が揺れるベランダ", "湯気が立つラーメン屋のカウンター",
"満員電車の窓ガラス", "桜の花びらが舞う通学路", "真夏の入道雲と信号機", "雪が積もった電話ボックス",
"クリスマスイルミネーションの街角", "部活動中のグラウンド", "終電後の静まり返った街", "日曜日の朝の食卓",
"散歩中の犬と飼い主", "高層ビルのオフィスからの夜景", "閉店間際のスーパーマーケット", "古着屋のディスプレイ",
"レコードショップの視聴機", "バス停で待つ人々", "路面電車の走る街並み", "夏祭りの提灯と浴衣", "線香花火の儚い光",
"こたつとみかん", "扇風機が回る畳の部屋", "書きかけのノートとペン", "使い込まれた革靴", "淹れたてのコーヒーの湯気",
"冷蔵庫を開けた時の光", "テレビの砂嵐", "深夜の高速道路のサービスエリア", "空港の出発ロビー",
"ガソリンスタンドのネオン", "工事現場の点滅するライト", "路地裏の野良猫", "軒下のアジサイ",
"金木犀の香る小道", "自動販売機の明かり", "自転車置き場の自転車", "団地の公園のブランコ", "屋上から見下ろす街",
"理科室の標本", "音楽室のピアノ", "体育館のバスケットゴール", "図書室の貸出カード", "下駄箱の手紙", "黒板消しの跡",
"廊下に差し込む西日", "文化祭の準備風景", "ファミレスのドリンクバー", "カラオケボックスのモニター", "映画館のポップコーン",
"ボウリング場のレーン", "水族館のクラゲ水槽", "動物園のパンダ", "遊園地の観覧車", "博物館の恐竜の骨格標本",
"美容室の鏡", "銭湯の富士山の絵", "サウナの砂時計", "マッサージチェア", "歯医者の待合室", "病院の長い廊下",
"郵便ポストと手紙", "宅配便のトラック", "タクシーの空車表示", "横断歩道の白い線", "マンホールの蓋", "電柱と電線",
"ガード下の飲み屋街", "川沿いのサイクリングロード", "釣り人がいる堤防", "キャンプ場の朝霧", "ピアノの発表会",
"結婚式のブーケトス", "誕生日のケーキのロウソク", "卒業式の桜", "新入社員のスーツ姿", "引越しのダンボール",
"大掃除の雑巾", "年越しそば", "初詣の賽銭箱", "バレンタインのチョコレート", "ハロウィンのカボチャ",
"お正月の鏡餅", "七夕の短冊", "節分の豆まき", "ひな祭りの人形", "鯉のぼり"
],
time: [
"夕暮れ時、マジックアワー", "満天の星空が広がる真夜中", "朝日が昇る早朝",
"太陽が照りつける真昼", "激しい雷雨の中", "しんしんと雪が降る日", "濃い霧に包まれた状態",
"虹がかかっている空", "花吹雪が舞っている", "日食で薄暗い瞬間",
"夜明け前の静寂", "地平線から顔を出す朝日", "朝霧が立ち込める早朝", "爽やかな青空の午前",
"太陽が真上にある正午", "強い日差しが降り注ぐ午後", "雲の隙間から光が差す天使の梯子",
"夕日が沈む直前の黄金色", "空が紫とオレンジに染まる夕暮れ", "街灯がともり始めた黄昏時", "ブルーアワー",
"月明かりだけの静かな夜", "満月が輝く夜", "新月の真っ暗な闇", "星々が瞬く深夜", "天の川が見える夜空",
"突然の土砂降り", "シトシトと降る小雨", "天気雨", "雷光が走る嵐の夜", "吹雪で視界が白い",
"雹が降っている", "台風が接近している不穏な空", "霧雨が煙る", "蜃気楼揺らぐ暑い日", "皆既月食の赤い月",
"オーロラが舞う空", "流星群が降り注ぐ", "ダイヤモンドダストが輝く", "嵐の前の静けさ"
],
style: [
"高精細な写真のようなリアルさ"
// ,"油絵のような重厚なタッチ", "水彩画風の淡い色彩",
// "スタジオジブリ風のアニメスタイル", "新海誠風のドラマチックな背景", "浮世絵スタイル",
// "ドット絵(ピクセルアート)", "アメコミ風のポップなスタイル", "3Dレンダリング(Unreal Engine 5)", "墨絵スタイル"
],
creature: [
"巨大な猫が寝ている", "空飛ぶクジラが泳いでいる", "小さなロボットが掃除をしている",
"フードを被った謎の人物が立っている", "サイボーグの少女が座っている", "沢山の柴犬が遊んでいる",
"透明なクラゲが浮遊している", "機械仕掛けの鳥が止まっている",
"王冠を被ったペンギンが行進している", "巨大な砂時計が時を刻んでいる", "宙に浮く巨大な立方体",
"森の賢者である老木", "読書をするフクロウ", "ギターを弾く骸骨", "廃墟に佇むアンドロイド",
"花束を抱えた少女", "剣を構える騎士", "実験中のマッドサイエンティスト", "空飛ぶ絨毯に乗った魔法使い",
"巨大なガラス瓶の中の世界", "錆びついた巨大な歯車", "光り輝く蝶の群れ", "コーヒーを淹れるバリスタ",
"スケートボードに乗る恐竜", "二足歩行のウサギ", "瞑想する僧侶", "踊るバレリーナ", "迷彩服の兵士",
"宇宙服を着たチンパンジー", "深海探査用の潜水ポッド", "空中に浮かぶ古代の石碑",
"燃え盛るフェニックス", "氷でできたドラゴン", "クリスタルの身体を持つ鹿",
"風船を持って空を飛ぶ子供", "ラーメンを食べるサラリーマン", "地図を広げる冒険者たち", "望遠鏡を覗く天文学者",
"キャンバスに向かう画家", "チェスをする二人", "積み上げられた古本の山", "アンティークなランタン",
"苔むした石像", "壊れたテレビモニター", "水槽の中の金魚", "空から降ってくる魚たち", "溶けかけた時計",
"螺旋状に続く階段", "鏡に映る別の自分", "巨大な目玉が空から見ている", "多脚戦車", "浮遊する監視ドローン",
"ナノマシンの集合体", "脳だけが入った培養カプセル", "レトロなブリキのおもちゃ", "操り人形",
"仮面をつけた舞踏会の人々", "和傘をさす着物の女性", "パイプを燻らす探偵", "道化師(ピエロ)",
"重厚な鎧を着たドワーフ", "弓を引くエルフ", "宝石を抱えたドラゴン", "三つの頭を持つ犬", "歌う人魚",
"森の精霊コダマ", "カボチャ頭のジャック", "空飛ぶほうき", "歩き回るキノコ", "意思を持った魔剣",
"巨大な手が地面から伸びている", "空中に浮かぶドア", "割れた鏡の破片", "絡み合うツタ", "七色に光るキノコ",
"シャボン玉の中に住む妖精", "折り紙の鶴が飛んでいる", "角の生えたクジラ", "甲羅に街を乗せた巨大亀",
"雲でできた城", "雷を纏う虎", "翼の生えたライオン", "機械化されたサメ",
"電脳空間のアバター", "ホログラムの歌手", "配線を修理するエンジニア", "自律走行する配送ロボット",
"警備用の番犬ロボット", "空飛ぶ車", "蒸気機関車", "難破船", "宝箱", "ミミック(宝箱の怪物)",
"クリスタルボール", "タロットカード", "羽ペンと羊皮紙", "試験管とフラスコ",
"魔法陣", "祭壇", "トーテムポール", "埴輪", "土偶", "モアイ像", "スフィンクス", "狛犬", "招き猫",
"ダルマ", "赤べこ", "風鈴", "提灯", "万華鏡", "プリズム", "砂の城", "雪だるま", "ジャック・オー・ランタン",
"クリスマスツリー", "バースデーケーキ", "ピザ", "ハンバーガー", "寿司", "ビールジョッキ", "ワイングラス",
"ティーカップ", "タイプライター", "蓄音機", "黒電話", "カセットテープ", "レコードプレーヤー",
"ゲームボーイ風の携帯ゲーム機", "ブラウン管テレビ", "一眼レフカメラ", "映写機", "顕微鏡", "コンパス",
"砂漠を旅するキャラバン", "羊飼いと羊の群れ", "カウボーイ", "忍者", "侍", "宇宙人(グレイ)",
"タコの火星人", "スライムの大群", "一つ目小僧", "河童", "天狗", "鬼", "天使", "悪魔", "死神", "吸血鬼"
],
object: [
"謎の古代文字が空中に浮かんでいる", "色とりどりの発光植物が生えている", "レトロな飛行船が飛んでいる",
"美味しそうなパンケーキが置かれている", "魔法陣が床に描かれている", "ガラスの破片が舞っている",
"巨大な歯車が錆びついている", "時空の歪みが発生している",
"重力が反転して物が上に落ちている", "建物がドミノのように倒れている", "床が水没して魚が泳いでいる",
"壁から無数の手が伸びている", "本が鳥のように羽ばたいている", "インクが飛び散ったような跡がある",
"石像が涙を流している", "鏡の中から何かが覗いている", "地面がひび割れてマグマが見える", "空がガラスのように割れている",
"巨大な月が手に届きそうな位置にある", "雲がソフトクリームのような形をしている",
"街全体がカプセルの中に閉じ込められている", "階段がどこまでも続いている", "時計の針が逆回転している",
"影が本体とは違う動きをしている", "人物がピクセル状に崩壊している", "花びらが雪のように積もっている",
"シャボン玉の中に宇宙が見える", "雷が地面から空へ登っている", "すべてがモノクロの世界",
"一部だけ色が鮮やかに残っている", "幽霊のような透明な人々が歩いている", "巨大な足跡が残されている",
"竜巻が炎を巻き上げている", "水面が鏡のように静止している", "森の木々が会話しているように見える",
"岩が空中に静止している", "本棚から光が漏れている", "ドアを開けるとそこは砂漠だった", "部屋の中なのに雨が降っている",
"コーヒーカップの中に嵐が起きている", "ピアノが勝手に演奏されている", "彫刻が動き出そうとしている",
"絵画の中の人物が抜け出している", "信号機がすべて青になっている", "マンホールから煙が吹き出している",
"電線がスパークしている", "霧の中から巨大なシルエットが現れる", "大量の風船が空を埋め尽くしている",
"コインが噴水のように吹き出している", "紙吹雪が乱舞している", "ロウソクの火が青く燃えている",
"氷の中に花が閉じ込められている", "溶岩が滝のように流れている", "砂時計の砂が下から上へ落ちている",
"巨大なキノコが傘代わりになっている", "電車が空を走っている", "ビルが植物に侵食されている",
"廃墟がネオンでライトアップされている", "パソコンの画面から手が伸びている", "スマホの画面がひび割れて光っている",
"ぬいぐるみたちが会議をしている", "洗濯物が風に激しく煽られている", "水たまりに異世界が映っている",
"フェンスに南京錠が大量にかけられている", "壁一面に落書きがされている", "道路標識が迷路のようになっている",
"自動販売機がジャングルに埋もれている", "ポストから手紙が溢れ出している", "街灯がスポットライトのように照らしている",
"屋根の上で猫が集会を開いている", "雪だるまが溶けずに夏に残っている", "桜と紅葉が同時に見られる",
"太陽と月が同時に出ている", "虹が二重にかかっている", "雲海が足元に広がっている", "星が降るように落ちてくる",
"オーロラがカーテンのように揺れている", "ダイヤモンドダストがキラキラ輝いている", "水中で呼吸ができている",
"体が小さくなって草むらにいる", "巨人が街を見下ろしている", "透明なバリアが張られている",
"レーザービームが交差している", "エネルギーフィールドが展開されている",
"テレポートの瞬間の光", "ワープホールの入り口が開いている", "ドローンが荷物を運んでいる",
"監視カメラがこちらを見ている", "サイバー空間にダイブしている", "コードが絡まり合っている",
"回路基板が街の地図のように見える", "ノイズが視界を遮っている", "グリッチが発生している",
"ポリゴンが剥き出しになっている", "ワイヤーフレームの世界", "設計図のような線が見える",
"インクの水墨画のような世界", "油絵のようなタッチになっている", "水彩画のように色が滲んでいる",
"点描画のように粒が集まっている", "切り絵のようなシルエット", "ステンドグラスを通した光",
"万華鏡のような模様", "フラクタル図形が無限に続いている", "幾何学模様が浮かんでいる",
"煙がドクロの形になっている", "炎が踊っているように見える", "水しぶきが王冠の形になっている",
"ミルククラウンができている", "果物が爆発して果汁が飛んでいる", "料理が湯気を立てている",
"ビールが黄金色に輝いている", "氷がグラスに当たって音を立てている", "焼きたてのパンの香りが漂ってきそう",
"ケーキにナイフが入る瞬間", "プレゼントの箱が開けられている", "クラッカーが鳴らされている",
"紙テープが絡まっている", "花火が打ち上がっている", "祭りの屋台が並んでいる", "群衆が同じ方向を見ている",
"誰もいない遊園地", "ライトアップされた夜桜", "キャンドルナイトの灯り", "暖炉の火がパチパチ燃えている",
"焚き火を囲んでいる", "テントの中から光が漏れている", "ハンモックが揺れている",
"自転車が壁に立てかけられている", "バス停で誰かを待っている", "雨宿りをしている",
"傘をさして歩いている", "水溜りを飛び越えている", "泥だらけになっている", "ペンキまみれになっている",
"小麦粉を被っている", "仮装をしている", "ダンスをしている", "楽器を演奏している", "歌を歌っている"
],
atm: [
"ノスタルジックな雰囲気", "退廃的で不気味な空気感", "神々しく幻想的な光",
"活気に満ち溢れている", "孤独で寂しい雰囲気", "夢の中にいるような感覚",
"緊張感のある張り詰めた空気",
"ノスタルジックなセピア色の世界", "昭和レトロな暖かい雰囲気", "色あせた古い写真のような質感",
"80年代のポップな色彩", "ヴェイパーウェイヴのような幻想的な空間", "ゾクッとするような恐怖感",
"狂気に満ちたサイケデリックな空間", "ゴシックで重厚な空気", "絶望的な終末感", "闇に飲み込まれそうな気配",
"希望に満ちた明るい未来感", "幸福感に包まれた優しい世界", "エネルギッシュで力強い躍動感",
"清涼感のある爽やかな風", "祝祭のような賑やかな喧騒", "神秘的で厳かな静寂",
"魔法がかかったようなキラキラした空気", "異次元のような浮遊感", "幽玄で儚い美しさ",
"古代の神話のような荘厳さ", "映画のワンシーンのようなドラマチックな構図","アニメーションのような鮮やかな色彩",
"孤独で静謐な時間", "世界から取り残されたような寂しさ", "音のない静止した世界", "哀愁漂う夕暮れの空気",
"冷たく無機質な質感", "ロマンチックで甘い雰囲気", "夢心地のふわふわした感覚",
"おとぎ話のようなメルヘンチックな世界", "パステルカラーの可愛らしい空間", "ハードボイルドで渋い世界観",
"鉄と油の匂いがする無骨な雰囲気", "戦場のような張り詰めた緊張感", "スチームパンクな蒸気の煙る空気",
"洗練されたラグジュアリーな空間", "ミニマルで整然とした美しさ", "カオスで雑多なエネルギー",
"瞑想的な深い精神世界", "記憶の断片のような曖昧なイメージ", "クリスタルのように透き通った空気",
"嵐の前の不穏な静けさ", "白昼夢のような非現実感", "インダストリアルな荒廃感",
"ボタニカルで癒やされる空間", "近未来的なスタイリッシュさ", "壮大な冒険の予感"
]
};
// ---------------------------------------------------------
// ■ 履歴管理機能
// ---------------------------------------------------------
const STORAGE_KEY = 'ai_image_instruction_history_v4'; // バージョン更新
window.onload = function() { loadHistory(); };
function saveToHistory(text) {
if (!text) return;
let history = JSON.parse(localStorage.getItem(STORAGE_KEY)) || [];
history = history.filter(item => item !== text);
history.unshift(text);
if (history.length > 20) history.pop();
localStorage.setItem(STORAGE_KEY, JSON.stringify(history));
loadHistory();
}
function loadHistory() {
const historySelect = document.getElementById('instructionHistory');
const history = JSON.parse(localStorage.getItem(STORAGE_KEY)) || [];
historySelect.innerHTML = '<option value="" disabled selected>履歴から選択...</option>';
const defaults = [
"360度パノラマ画像を作って。",
"PCのデスクトップ壁紙(16:9)を作って。",
"スマホ用の縦長壁紙(9:16)を作って。",
"ファンタジー小説の挿絵を作って。",
"RPGのアイテムアイコン画像を作って。",
"ブログのアイキャッチ画像を作って。",
"リアルな写真風のポートレートを作って。"
];
const allItems = [...new Set([...history, ...defaults])];
allItems.forEach(text => {
const option = document.createElement('option');
option.value = text;
option.text = text.length > 40 ? text.substring(0, 40) + "..." : text;
historySelect.appendChild(option);
});
}
function selectHistory() {
document.getElementById('instructionInput').value = document.getElementById('instructionHistory').value;
}
function clearHistory() {
if(confirm("履歴を削除しますか?")) {
localStorage.removeItem(STORAGE_KEY);
loadHistory();
}
}
// ---------------------------------------------------------
// ■ ランダム生成機能 (個数指定対応)
// ---------------------------------------------------------
function generateRandomPrompt() {
const detailArea = document.getElementById('detailArea');
const pick = (arr) => arr[Math.floor(Math.random() * arr.length)];
let allParts = [];
// UIのIDとデータキーの紐付け
const config = [
{ id: 'n_scifi', data: promptData.scifi },
{ id: 'n_fantasy', data: promptData.fantasy },
{ id: 'n_nature', data: promptData.nature },
{ id: 'n_daily', data: promptData.daily },
{ id: 'n_time', data: promptData.time },
{ id: 'n_style', data: promptData.style },
{ id: 'n_creature', data: promptData.creature },
{ id: 'n_object', data: promptData.object },
{ id: 'n_atm', data: promptData.atm }
];
// 各設定をループして取得
config.forEach(item => {
const count = parseInt(document.getElementById(item.id).value) || 0;
for(let i = 0; i < count; i++) {
allParts.push(pick(item.data));
}
});
if (allParts.length === 0) {
detailArea.value = "(要素が選択されていません。数値を1以上に設定してください)";
return;
}
// 結合して表示
detailArea.value = allParts.join("。\n") + "。";
// アニメーション効果
detailArea.style.borderColor = "#007bff";
setTimeout(() => detailArea.style.borderColor = "#ccc", 300);
}
// ---------------------------------------------------------
// ■ 送信機能(修正版:コピーのみ / 起動 の分岐対応)
// ---------------------------------------------------------
function askAI(isLaunch) {
const instruction = document.getElementById('instructionInput').value.trim();
const details = document.getElementById('detailArea').value.trim();
if (!instruction || !details) {
alert("指示と詳細の両方が必要です。");
return;
}
saveToHistory(instruction);
const finalPrompt = instruction + "\n\n【画像の詳細指示】\n" + details;
// コピー処理
if (navigator.clipboard) {
navigator.clipboard.writeText(finalPrompt).then(() => {
if (!isLaunch) {
// コピーのみの場合
alert("クリップボードにコピーしました!");
} else {
// 立ち上げて開始の場合
launchService(finalPrompt);
}
}).catch(err => {
alert("コピーに失敗しました。");
});
} else {
// クリップボードAPIが使えない環境(古いブラウザ等)
if (!isLaunch) {
alert("このブラウザではコピー機能が制限されています。");
} else {
launchService(finalPrompt);
}
}
}
// サービスを開く処理を分離
function launchService(promptText) {
const aiService = document.getElementById('aiSelector').value;
const encodedPrompt = encodeURIComponent(promptText);
let url = "";
switch (aiService) {
case "bing": url = "https://www.bing.com/images/create"; break;
case "firefly": url = "https://firefly.adobe.com/upload/text_to_image"; break;
case "gemini": url = "https://gemini.google.com/app"; break;
case "chatgpt": url = "https://chatgpt.com/"; break;
case "claude": url = "https://claude.ai/new"; break;
case "perplexity": url = `https://www.perplexity.ai/search?q=${encodedPrompt}`; break;
}
// PerplexityはURLで実行、それ以外は確認してから開く
if (aiService === 'perplexity') {
window.open(url, '_blank');
} else {
let serviceName = document.getElementById('aiSelector').options[document.getElementById('aiSelector').selectedIndex].text;
let msg = "プロンプトをコピーしました!\n\n" + serviceName + "を別タブで開きますか?\n(開いた先で貼り付けてください)";
if(confirm(msg)) {
window.open(url, '_blank');
}
}
}
</script>
</body>
</html>
使用変数
| aiService | |
| allItems | |
| allParts | |
| askAI -------( Function ) | |
| borderColor | |
| charset | |
| class | |
| clearHistory -------( Function ) | |
| config | |
| count | |
| defaults | |
| detailArea | |
| details | |
| encodedPrompt | |
| err | |
| finalPrompt | |
| generateRandomPrompt -------( Function ) | |
| history | |
| historySelect | |
| i | |
| id | |
| innerHTML | |
| instruction | |
| item | |
| lang | |
| launchService -------( Function ) | |
| length | |
| loadHistory -------( Function ) | |
| min | |
| msg | |
| onchange | |
| onclick | |
| onload | |
| option | |
| pick | |
| placeholder | |
| promptData | |
| q | |
| saveToHistory -------( Function ) | |
| selectHistory -------( Function ) | |
| serviceName | |
| STORAGE_KEY | |
| style | |
| text | |
| type | |
| url | |
| value |