junkerstock
 画像プロンプト生成機 (簡素版)2 

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Prompt Dashboard</title>
<style>
/* ベーススタイル */
body {
font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Kaku Gothic ProN", "Hiragino Sans", Arial, sans-serif;
padding: 20px;
background-color: #f4f6f9;
color: #333;
height: 100vh;
box-sizing: border-box;
overflow: hidden; /* 一画面に収めるためスクロール抑制 */
}

/* メインコンテナ */
.dashboard-container {
display: grid;
grid-template-columns: 260px 1fr; /* 左サイドバー固定、右可変 */
gap: 15px;
max-width: 1000px;
margin: 0 auto;
height: calc(100vh - 40px); /* 上下パディング分を引く */
background: #fff;
border-radius: 12px;
box-shadow: 0 4px 20px rgba(0,0,0,0.08);
overflow: hidden;
}

/* 共通パネルスタイル */
.panel { padding: 15px; overflow-y: auto; }

/* 左パネル(設定エリア) */
.left-panel {
background-color: #fafbfc;
border-right: 1px solid #e1e4e8;
display: flex;
flex-direction: column;
}

/* 右パネル(エディタエリア) */
.right-panel {
display: flex;
flex-direction: column;
gap: 10px;
padding-right: 20px;
}

/* 数値設定グリッド */
.settings-list {
display: flex;
flex-direction: column;
gap: 8px;
flex-grow: 1; /* ボタンを下に押しやる */
margin-bottom: 10px;
}
.setting-item {
display: flex;
justify-content: space-between;
align-items: center;
background: #fff;
border: 1px solid #ddd;
padding: 6px 10px;
border-radius: 6px;
}
.setting-item label {
font-size: 0.85em;
font-weight: bold;
color: #555;
cursor: pointer;
}
.setting-item input[type="number"] {
width: 50px;
padding: 4px;
text-align: center;
font-size: 1em;
border: 1px solid #ccc;
border-radius: 4px;
}

/* ボタン類のデザイン */
button { cursor: pointer; border: none; border-radius: 6px; font-weight: bold; transition: opacity 0.2s; }
button:hover { opacity: 0.9; }

.random-btn {
width: 100%;
padding: 12px;
font-size: 0.95em;
color: #fff;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}

/* 右側の各要素 */
.history-bar {
display: flex;
gap: 5px;
}
.history-select { flex-grow: 1; padding: 6px; border: 1px solid #ddd; border-radius: 4px; font-size: 0.85em; }
.clear-btn { font-size: 0.75em; color: #d9534f; background: #fff; border: 1px solid #d9534f; padding: 0 8px; }

.prompt-input {
width: 100%; padding: 10px; font-size: 1em; border: 1px solid #ccc; border-radius: 6px; box-sizing: border-box;
}
.prompt-input:focus, textarea:focus, select:focus {
outline: none; border-color: #007bff; box-shadow: 0 0 0 2px rgba(0,123,255,0.1);
}

textarea {
flex-grow: 1; /* 余った高さを全て使う */
width: 100%;
padding: 10px;
font-size: 0.95em;
line-height: 1.6;
border: 1px solid #ccc;
border-radius: 6px;
resize: none;
box-sizing: border-box;
}

.action-area {
display: flex;
gap: 8px;
background: #f8f9fa;
padding: 10px;
border-radius: 8px;
border: 1px solid #eee;
}
#aiSelector { padding: 8px; border: 1px solid #ccc; border-radius: 6px; flex-grow: 1; }

.copy-btn { padding: 0 20px; background-color: #28a745; color: white; white-space: nowrap; }
.send-btn { padding: 0 20px; background-color: #007bff; color: white; white-space: nowrap; }

</style>
</head>
<body>

<div class="dashboard-container">
<div class="panel left-panel">
<div class="settings-list">
<div class="setting-item"><label for="n_sf_bg">SF背景</label><input type="number" id="n_sf_bg" value="1" min="0"></div>
<div class="setting-item"><label for="n_sf_obj">SF物体</label><input type="number" id="n_sf_obj" value="0" min="0"></div>
<div class="setting-item"><label for="n_fantasy_bg">ファンタジー背景</label><input type="number" id="n_fantasy_bg" value="0" min="0"></div>
<div class="setting-item"><label for="n_fantasy_obj">ファンタジー物体</label><input type="number" id="n_fantasy_obj" value="0" min="0"></div>
<div class="setting-item"><label for="n_nature_bg">自然背景</label><input type="number" id="n_nature_bg" value="0" min="0"></div>
<div class="setting-item"><label for="n_nature_obj">自然物体</label><input type="number" id="n_nature_obj" value="0" min="0"></div>
<div class="setting-item"><label for="n_time">時間</label><input type="number" id="n_time" value="1" min="0"></div>
<div class="setting-item"><label for="n_weather">天候</label><input type="number" id="n_weather" value="1" min="0"></div>
<div class="setting-item"><label for="n_atm_bright">明るい雰囲気</label><input type="number" id="n_atm_bright" value="0" min="0"></div>
<div class="setting-item"><label for="n_atm_dark">暗い雰囲気</label><input type="number" id="n_atm_dark" value="0" min="0"></div>
</div>
<button class="random-btn" onclick="generateRandomPrompt()">🎲 設定値で生成</button>
</div>

<div class="panel right-panel">
<div class="history-bar">
<select id="historySelect" class="history-select" onchange="restoreHistory()">
<option value="" disabled selected>履歴...</option>
</select>
<button type="button" class="clear-btn" onclick="clearHistory()">削除</button>
</div>

<input type="text" id="instructionInput" class="prompt-input" value="360度パノラマ画像を作って。 Deep focus 、高精細で頼む。">

<textarea id="detailArea" placeholder="ここに生成結果が表示されます..."></textarea>

<div class="action-area">
<select id="aiSelector">
<option value="gemini">Google Gemini</option>
<option value="bing">Bing Image Creator</option>
<option value="firefly">Adobe Firefly</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="handleAction(false)">コピー</button>
<button class="send-btn" onclick="handleAction(true)">開始</button>
</div>
</div>
</div>

<script>
// ---------------------------------------------------------
// ■ データ定義 (変更なし)
// ---------------------------------------------------------
const promptData = {
sf_bg: [
"近未来都市の摩天楼", "浮遊する空中都市", "ディストピアな地下都市", "ホログラム広告が溢れる繁華街",
"海底に沈んだ未来都市の廃墟", "植物と機械が融合したソーラーパンクな庭園", "二つの月が浮かぶ異星の空",
"アステロイドベルトの採掘基地", "ブラックホールの事象の地平線", "未知の惑星の原生林", "氷の惑星の秘密基地",
"デジタル雨が降る街", "発光するキノコの森", "磁気嵐の吹き荒れる荒野", "垂直農場の緑",
"シールド越しに見る超新星爆発", "テラフォーミングされた惑星の地表", "惑星直列の夜", "バイオルミネセンスの海",
"月面クレーターの影", "異次元への裂け目", "スペースコロニーの円筒内部", "酸性雨が降り注ぐ工業地帯",
"クリスタルで覆われた渓谷", "人工太陽に照らされた巨大地下空洞", "オーロラが輝く極地の氷原", "雲海に突き出る尖塔群",
"リングワールドの地平線", "中性子星の磁場", "データストリームが流れる電脳空間", "廃棄された宇宙船の墓場",
"大気が燃える惑星の空", "重力が崩壊した破片のフィールド", "ナノマシン構成体でできた砂漠", "無限に続くサーバーファーム",
"赤い矮星に照らされた荒野", "水没した巨大データセンター", "成層圏プラットフォームからの眺め", "オニール・シリンダーの農村エリア",
"レトロフューチャーな真空管都市", "化学汚染された極彩色の沼地", "結晶化した植物の森", "恒星のコロナ",
"ワームホールの入り口", "銀河中心の超高密度星団", "軌道エレベーターのケーブルが見える空", "反重力で浮く岩山群",
"鏡面加工された金属の大地", "巨大なパイプラインが走る荒野", "スラム化した高層建築の谷間", "人工知能が設計した幾何学的な都市",
"厚い氷の下に広がる海", "メタンの海とオレンジの空", "彗星の尾の中", "崩壊する月を見上げる地表",
"巨大なファンが回る換気口内部", "放棄されたテラフォーミング施設", "無数の培養ポッドが並ぶ巨大プラント",
"サイバー空間のグリッド", "錆びた鉄屑の山脈", "雲を突き抜ける巨大なダム", "軌道上から見た夜の地球",
"巨大な歯車が噛み合う機械都市", "プラズマの滝", "空中ハイウェイのジャンクション", "人工的な多層構造の洞窟",
"放射能で変異したジャングル", "氷河期に入った未来の都市", "砂漠に埋もれた古代のランドマーク", "巨大な眼のような星雲",
"アクリルのような透明な海", "幾何学的なクリスタルの平原", "巨大な送電塔が続く風景", "ドローンが飛び交う配送センター",
"レーザー光線が交差する戦場", "惑星リングの影が落ちる場所", "有毒な霧が立ち込めるスラム", "巨大なホログラムクジラが泳ぐ空",
"ガラス張りの海底トンネル", "雲の上に建つ白亜の塔", "巨大なパラボラアンテナの森", "人工降雪機が動くスキーリゾート",
"溶岩をエネルギーに変える発電所", "宇宙ゴミの帯", "異星の古代遺跡と二重太陽", "巨大なモノリスが並ぶ海岸",
"紫色の草が生い茂る平原", "巨大な菌糸ネットワークの森", "常に夜の都市", "空中庭園の廃墟", "ロボットだけが住む街",
"巨大なエネルギーシールドに守られたドーム", "重金属の雨が降る惑星", "光ファイバーの森", "量子もつれの視覚化空間",
"崩壊したスペースコロニーの外壁", "無限回廊", "鏡の世界", "巨大な配管が密集する路地", "スチームが噴き出す工場地帯",
"アンドロイドの廃棄場", "巨大なクレーター湖", "六角形の柱状節理の惑星", "浮遊する水の球体がある空間",
"ソーラーセイル越しに見る星の海", "虹色のガスが漂う星雲","マイクラのようなブロックでできた町",

"ダイソン球殻の内壁に見える無限の地平", "マトリョーシカ・ブレインの演算層", "アルダーソン円盤の広大な平面", "恒星を包むダイソン・スウォームの輝き",
"トポポリスのチューブ状居住区", "ビショップ・リングの湾曲した大地", "恒星エンジンの巨大な噴射炎", "惑星の環を採掘するドローン群",
"ラグランジュポイントに浮かぶ巨大ステーション", "テセラック(四次元超立方体)の内部構造", "クラインの壺のように繋がった回廊", "メビウスの輪状にねじれた道路",
"非ユークリッド幾何学の歪んだ空間", "ペンローズの階段が続く迷宮", "フラクタル構造の海岸線", "マンデルブロ集合のような地形",
"エッシャー風の重力が錯綜する建築群", "量子泡が沸き立つミクロの風景", "超ひも理論が視覚化された振動する世界", "ダークマターの黒い雲",
"重力レンズで光が歪む星空", "宇宙ひもの亀裂", "クエーサーのジェット流", "パルサーの灯台のような点滅",
"白色矮星の冷たい光", "赤色超巨星の膨張した表面", "ガンマ線バーストの残光", "宇宙マイクロ波背景放射の可視化",
"ボイド(超空洞)の完全な暗闇", "銀河フィラメントの網目構造", "事象の地平線に吸い込まれる恒星物質", "ワープバブルの境界",
"超光速航行中の流れる星々", "亜空間トンネルのサイケデリックな壁面", "スターゲートの液状の鏡面", "惑星シールドのハニカム構造",
"人工衛星の墓場", "ケスラーシンドロームの破片の雲", "マスドライバーの長いレール", "月面のマスコン(重力異常)地帯",
"ヘリウム3の採掘プラント", "静かの海の記念碑", "裏側の永久影クレーター", "ラグランジュ・コロニーの農業ブロック",
"小惑星帯の隠れ家", "彗星の核の地表", "オールトの雲の中", "カイパーベルトの氷の天体",
"液体金属の海", "水銀の川が流れる谷", "ドライアイスの砂丘", "硫黄の火山と黄色い空",
"塩素の雲が漂う酸の惑星", "ダイヤモンドの雨が降る世界", "ガラスの破片が吹き荒れる嵐", "鉄の雪が積もる原野",
"プラズマの竜巻", "音速の衝撃波が見える大気", "凍ったメタンの波", "沸騰する泥の沼地",
"間欠泉が吹き上がる谷", "ウユニ塩湖のような鏡面の惑星", "黒曜石の鋭利な崖", "軽石が浮遊する空",
"タールで満たされた湖", "火山灰が降り積もる廃墟", "濃霧に包まれた吊り橋", "成層圏を飛ぶ空中空母の甲板",
"電離層の放電現象", "磁気圏のオーロラカーテン", "ヴァン・アレン帯の放射線ベルト", "太陽風が吹き付ける岩肌",
"日食の影が落ちる都市", "潮汐ロックされた惑星の夕暮れ帯", "惑星のコア(内核)の輝き", "マントル対流の動き",
"プレートテクトニクスの境界", "巨大な地溝帯", "連鎖クレーターの列", "流星群が降り注ぐ夜空",
"肉でできた壁のバイオ建築", "骨のような白い摩天楼", "血管のようなチューブが走る街", "巨大な眼球が埋め込まれた壁",
"遺伝子操作された巨大樹の村", "DNAの二重らせん構造の塔", "アミノ酸の海", "タンパク質の結晶洞窟",
"巨大な細胞膜のドーム", "ニューロンのような光のネットワーク", "シナプスがスパークする空", "バクテリアコロニーの平原",
"ウイルス結晶の砂漠", "ハイブマインドの孵化場", "生体コンピュータの中枢", "皮膚のような質感の大地",
"筋肉繊維の橋", "歯のような岩山", "胃酸の湖", "腸のようなトンネル",
"肺のように収縮する換気システム", "植物と動物が融合したジャングル", "花粉の嵐", "巨大な花の居住区",
"昆虫型種族の巣", "琥珀に閉じ込められた古代都市", "化石化した超巨大生物の肋骨", "珊瑚礁のような高層ビル群",
"スライムカビの交通網", "キチン質の装甲に覆われた要塞", "蜘蛛の巣に覆われた廃都", "繭(コクーン)の倉庫街",
"培養タンクが並ぶ育成所", "アール・デコ調のロケット発射場", "ブルータリズムのコンクリート要塞", "ゴシック様式の宇宙大聖堂",
"禅庭園のような宇宙船内", "ネオンの鳥居が並ぶ参道", "サイバーパンクな屋台街", "九龍城砦風の過密居住区",
"崖にへばりつくファヴェーラ", "コンテナ船を積み上げた海上都市", "石油リグを改造した海上要塞", "水没した鳥居と神殿",
"無重力カジノのホール", "全宇宙の知識が集まる図書館", "絶滅種の博物館", "ホログラムの墓地",
"グリッチ(バグ)だらけの風景", "ピクセルアートのような山脈", "ボクセル(立方体)の雲", "ワイヤーフレームの都市",
"ローポリゴンの森", "ASCIIアートで描かれた空", "データの滝(マトリックス風)", "ファイアウォールの炎の壁",
"暗号化されたゲート", "サーバーラックの峡谷", "回路基板のような都市計画", "マイクロチップの迷路",
"トランジスタの林", "アナログメーターが並ぶ計器の街", "蒸気機関が唸る雲上の城", "歯車仕掛けの太陽系儀",
"真鍮のパイプが絡み合う路地", "銅線が蔦のように絡まる廃墟", "錆びついた工場の煙突群", "廃棄された遊園地",
"音波が可視化された地形", "カラースペクトルのグラデーション世界", "モノクロ映画のような街", "セピア色の回想空間",
"赤外線サーモグラフィ風の視界", "X線で透けた都市", "ナイトビジョンの緑色の世界", "ネガフィルムのような反転世界",
"スケッチブックのような手書き風の街", "水墨画の山水", "水彩画のような滲んだ空", "油絵のタッチの星雲",
"大理石の彫像が並ぶ庭園", "チェス盤のような白黒の平原", "トランプの城", "ドミノ倒しの塔",
"おもちゃのブロックの街", "段ボールで作られた要塞", "ペーパークラフトの町", "折り紙の森",
"操り人形の糸が見える空", "影絵の壁", "合わせ鏡の迷宮", "万華鏡のトンネル",
"プリズムの分光", "レンズフレアが眩しい場所", "ボケ(Bokeh)の光が溢れる夜景", "周辺減光(ビネット)された視界",
"フィルムグレイン(粒子)の荒れた荒野", "テクスチャ欠けの紫と黒の市松模様", "ローディングバーが浮かぶ地平線", "エラーメッセージで埋め尽くされた空",
"ブルースクリーンの壁", "テストパターンの野原", "砂嵐(スノーノイズ)の空間", "ブラウン管の走査線が見える風景",
"カプセルホテルのような蜂の巣住居", "スラム化した宇宙船のドック", "海賊放送のアンテナ群", "闇市が広がる地下鉄跡",
"ブラックマーケットの路地裏", "クローン工場のベルトコンベア", "サイボーグ化された動物園", "ナノマシンの霧",
"フェムトテクノロジーの塵", "素粒子加速器のリング内部", "核融合炉のトカマク内部", "反物質封じ込めフィールド",
"コールドスリープカプセルの霊廟", "冷凍刑務所", "精神転送装置のサーバールーム", "ブレイン・マシン・インターフェースの接続ポート",
"拡張現実(AR)の広告が重なる街角", "スマートダストが舞う部屋", "3Dプリンターが自己増殖する工場", "自動運転車の渋滞するハイウェイ",
"ドローン配送のハブ空港", "成層圏気球の展望台", "軌道フックのケーブル", "宇宙エレベーターのターミナル駅",
"マスドライバーの射出カタパルト", "ラグランジュポイントのゴミ捨て場", "スペースデブリの回収船団", "小惑星捕獲ミッションの現場",
"テラフォーミング初期の苔むした岩場", "大気製造プラントの排気口", "極地冠の氷を溶かすミラー群", "惑星改造用バクテリアの散布",
"人工磁場の発生塔", "オゾン層生成シールド", "海水を淡水化する巨大プラント", "遺伝子バンクの地下金庫"

],
sf_obj: [
"火星の居住ドーム", "ダイソン球の巨大構造物", "ガス惑星の軌道プラットフォーム", "銀河を背景にした宇宙艦隊",
"巨大な恒星間移民船", "錆びついた巨大ロボットの残骸", "空を覆う巨大な宣伝飛行船", "宇宙を泳ぐ巨大生物",
"要塞化した移動都市", "砂漠に埋もれた宇宙船", "多層構造のハイウェイ", "エネルギー採掘リグ",
"未来のスポーツスタジアム", "軌道エレベーターのアンカー", "古代文明の黒いモノリス", "大気を浄化する巨大プラント",
"惑星を囲む巨大なリング", "墜落した軍事衛星", "成層圏まで伸びる世界樹", "シンギュラリティの塔", "巨大な螺旋構造物"
],
fantasy_bg: [
"古代遺跡が眠る密林", "クリスタルの洞窟", "妖精が住む光る森", "中世ヨーロッパ風の城下町",
"エルフの聖なる泉", "霧深い沼地", "空飛ぶ島々", "薄暗い地下ダンジョンの通路",
"グリフォンが飛び交う渓谷", "灼熱の溶岩地帯", "オーロラが輝く雪原", "巨大なキノコの森",
"精霊が集まる湖畔", "虹の架かる滝", "星降る夜の野営地", "ランタンの灯る石畳の道",
"呪われた森", "マナの奔流", "迷いの森", "オアシスの蜃気楼", "夜光虫の海", "神々の黄昏",
"彼岸花が咲き乱れる冥界の河原", "巨人の骨が散らばる荒野", "重力が歪んだ魔法地帯", "天まで届く大瀑布",
"雲海に浮かぶ天空の城郭", "朽ち果てた剣が無数に刺さる荒野(剣の墓場)", "サンゴでできた地上の森",
"水没した古代都市", "永遠に夜が続く吸血鬼の国", "ステンドグラスのような空の下", "巨大樹の枝の上に広がる村",
"見渡す限りのクリスタル砂漠", "竜巻が常に吹いている平原", "空中に浮遊する水の球体群", "黄金色に輝く麦畑と風車",
"紫色の霧に包まれた毒の沼", "ドワーフの巨大な地下採掘場", "本棚が地平線まで続く無限図書館", "鏡のような水面を持つ塩の湖",
"イバラに覆われた眠れる城の庭園", "火山灰が降り積もる灰色の世界", "星座が地上に描かれた魔法陣の広場",
"巨大な鎖で繋がれた浮遊大陸", "氷の華が咲き乱れる凍土", "七色の川が流れる谷", "ユニコーンが駆ける草原",
"月明かりに照らされた廃教会", "歯車と蒸気が動くドワーフの都", "精霊の光が舞う地下湖", "巨大な蓮の葉が浮く池",
"灼熱の砂漠にある氷のオアシス", "雷雲が渦巻くドラゴンの領域", "ガラスの花が咲く透明な草原", "時が止まったモノクロの世界",
"巨大な化石の中にある村", "虹の橋がかかる雲の上", "深海にある人魚の王国(広域)", "輝く鉱石が露出した峡谷",
"空から海へ水が落ちる世界の果て", "巨大なキノコの傘の上", "幽霊船が漂う霧の海", "五色の炎が燃える祭壇",
"古代文字が刻まれた石柱の森", "空飛ぶクジラの群れが見える空", "巨大な砂時計がある砂漠", "飴細工でできたお菓子の国",
"カボチャ畑が広がるハロウィンの里", "雪の中に温泉が湧く秘境", "大理石でできた白亜の迷宮", "巨大なランタンが浮く夜の祭",
"マンドラゴラが自生する奇妙な畑", "星の欠片が落ちている海岸", "巨大な本が開かれたような地形", "インクで描かれたような水墨画の世界",
"チェス盤のような白黒の大地", "トランプが舞う不思議の国", "煉獄の炎が燃える断崖", "天国へと続く長い階段",
"神殿の回廊", "地下深くに広がる発光苔の洞窟", "ペガサスの羽が舞う山頂", "巨大な水晶クラスターの谷",
"錬金術の廃液が流れる極彩色の川", "ルーン文字が光る黒い岩肌", "天空から鎖で吊るされた牢獄", "魔力が結晶化した森",
"ドライアドが住む新緑の森", "セイレーンが歌う岩礁地帯", "巨大な貝殻が点在する砂浜", "スライムが大量発生している草原",
"火の粉が舞う鍛冶の町", "風の精霊が通り抜ける風穴", "土の精霊が守る棚田", "光の精霊が住むプリズムの谷",
"闇の精霊が潜む影の谷", "異次元と繋がる亀裂のある空", "古代の戦争の跡が残るクレーター",
"神獣が眠る巨大な祠の前","マイクラのようなブロックでできた町",
"雲海の上に並ぶ大量の古代の塔",

"世界樹の根元に広がる苔の絨毯", "竜の背中のような鋸状の山脈", "天空から無限に水が降り注ぐ「世界の穴」", "琥珀の中に閉じ込められた黄金の森",
"巨人の剣で真っ二つに割れた峡谷", "精霊獣が渡る光の架け橋", "召喚儀式の跡が残る焼けた大地", "魔法使いの塔から見下ろす雲海",
"薬草師が住む秘密の空中庭園", "錬金術師の巨大なフラスコの中の世界", "使い魔たちが飛び交う夕暮れの尖塔群", "グリモワール(魔導書)のページの上",
"インク壺の中に広がる夜の海", "羽ペンで描かれたような線画の世界", "タロットカードの絵柄のような運命の庭", "占星術の天球儀の内側",
"クリスタルパレスの舞踏会場", "仮面舞踏会が開かれる水上の宮殿", "ガラスの靴が片方落ちている大階段", "カボチャの馬車が走る星屑の道",
"お菓子の魔女の森", "チョコレートの川が流れる谷", "マカロンカラーの雲が浮かぶ空", "金平糖の星が降る夜",
"人魚の歌声が響く珊瑚の歌劇場", "真珠貝のベッドが並ぶ海底の寝室", "海竜が眠る海底火山の火口", "沈没船の墓場にある幽霊酒場",
"クラーケンの足が絡みつく灯台跡", "セイレーンの岩場に打ち付ける荒波", "氷の精霊が舞うダイヤモンドダストの平原", "雪の女王の氷の宮殿",
"永久凍土に閉ざされたマンモスの谷", "オーロラカーテンの向こう側の世界", "炎のサラマンダーが泳ぐ溶岩の湖", "火の鳥が巣を作る灰の山",
"不死鳥(フェニックス)が蘇る炎の祭壇", "イフリートが支配する灼熱の砂宮殿", "風のジンが住む竜巻の内部", "雷鳥が住む雷雲の上の巣",
"ノームが耕す地下のキノコ畑", "ドワーフの鍛冶場の巨大な溶鉱炉", "ミスリル銀が輝く地底湖", "ゴブリンの洞窟の入り口",
"オークの砦がある荒野", "トロールが潜む石橋の下", "ハーピーの巣がある断崖絶壁", "グリフォンの卵がある高い岩山",
"ペガサスの泉と虹", "ユニコーンが隠れ住む霧の聖域", "ケンタウロスの狩場となる草原", "エルフの弓道場がある森",
"ドルイドのストーンサークル", "古代ルーン文字が浮かび上がる夜の遺跡", "聖剣が眠る湖の小島", "円卓の騎士が集う城の広間",
"魔王城へと続くイバラの道", "勇者の故郷ののどかな村", "旅立ちの朝の城門", "吟遊詩人が歌う酒場の暖炉前",
"冒険者ギルドの依頼掲示板前", "ポーション屋の怪しい実験室", "魔法道具店の雑多な陳列棚", "武器屋の灼熱の炉",
"王立図書館の禁書庫", "賢者の石が精製される実験場", "ホムンクルスの培養槽が並ぶ部屋", "ゴーレムが守る宝物庫",
"ミミックが潜むダンジョンの宝箱部屋", "スライムの粘液で光る地下通路", "スケルトンが彷徨う地下墓地(カタコンベ)", "ゾンビが這い出る腐敗した沼",
"リッチ(不死の王)の玉座", "デュラハンの馬車が走る霧の街道", "バンパイアの古城の薔薇園", "狼男が吠える満月の崖",
"魔女の集会(サバト)が開かれる禿山", "大釜が煮えたぎる魔女の家", "黒猫の目が無数に光る森", "カラスの大群が覆う空",
"死神が渡る三途の川", "彼岸花が無限に続く冥界の丘", "賽の河原の石積み", "閻魔大王の法廷",
"天国への門", "天使の梯子が降り注ぐ教会", "ステンドグラスの光が満ちる大聖堂", "修道院の静寂な回廊",
"ヴァルハラの勇士たちが宴をする広間", "世界蛇ヨルムンガンドが見える海", "虹の橋ビフレスト", "ユグドラシルの枝の上",
"オリンポスの神殿群", "パルテノン神殿風の遺跡", "アトランティスの水没した回廊", "エデンの園の禁断の果実の木",
"ノアの方舟が漂着した山頂", "バベルの塔の建設現場", "空中庭園バビロンの遺跡", "ピラミッドの内部迷路",
"スフィンクスが見守る砂漠", "ナイルの賜物である豊かな川辺", "ファラオの黄金のマスクが眠る墓室", "万里の長城のような城壁",
"桃源郷の桃の花が咲く谷", "仙人が住む霧深い岩山", "龍脈が噴出するパワースポット", "竹林にある隠れ里",
"桜吹雪が舞う武家屋敷", "鳥居が千本並ぶ参道", "神社の境内の夏祭り", "妖怪が行列する百鬼夜行の夜道",
"九尾の狐が化かすススキ野原", "天狗が住む鞍馬山のような山", "河童が泳ぐ透き通った川", "雪女が現れる吹雪の峠",
"千夜一夜物語のアラビアンナイトの夜景", "魔法の絨毯から見下ろす砂漠の都", "市場(スーク)の賑わい", "オアシスのハーレム",
"ガリバー旅行記の巨人の国", "小人の国のミニチュアの街", "不思議の国のアリスのティーパーティー会場", "ハートの女王のバラ園",
"ジャックと豆の木の雲の上の城", "ヘンゼルとグレーテルのお菓子の家", "赤ずきんの森の小道", "眠れる森の美女のイバラの城",
"オズの魔法使いのエメラルドの都", "黄色い煉瓦道", "ピーターパンのネバーランド", "フック船長の海賊船",
"宝島の洞窟", "ロビンソン・クルーソーの無人島", "海底二万マイルのネモ船長の潜水艦窓", "地底旅行のキノコの森",
"失われた世界(ロストワールド)の恐竜の谷", "キングコングが住む髑髏島", "ラピュタのような空に浮く古代兵器", "ナウシカの腐海のような胞子の森",
"王蟲の抜け殻がある砂漠", "トトロの森のバス停", "千と千尋の神隠しの油屋周辺", "ハウルの動く城が歩く荒野",
"もののけ姫のシシ神の森", "指輪物語のホビット庄", "エルフの裂け谷", "モルドールの滅びの山",
"ハリーポッターの魔法魔術学校の食堂", "ダイアゴン横丁のような魔法商店街", "ナルニア国物語の雪の街灯", "終わりのない物語の象牙の塔",
"ゲームの世界のドット絵の平原", "RPGのワールドマップ", "セーブポイントのクリスタル", "ボス部屋の重厚な扉",
"隠しステージへの入り口", "バグったテクスチャの異世界", "マインクラフト風のブロックの山岳", "テラリア風の地下空洞",
"ゼルダの伝説風の祠の内部", "ダークソウル風の退廃した城下町", "エルデンリング風の黄金樹が見える景色", "ファイナルファンタジー風のクリスタルの海",
"ドラクエ風の毒の沼地と橋", "モンスターハウスの部屋", "伝説の武器が刺さる台座", "封印された魔神の壺",
"願いを叶える井戸", "未来を映す魔法の鏡", "時間を巻き戻す時計塔", "空間を切り裂く次元刀の跡",
"色が失われた灰色の世界", "音が聞こえない静寂の森", "重力が逆転した天井の街", "永遠に明けない夜の国",
"太陽が沈まない白夜の国", "季節が混在する不思議な庭", "過去の幻影が見える廃墟", "未来の崩壊が見える予言の泉",
"感情が天気雨になる世界", "言葉が文字となって浮遊する谷", "音楽が光となって流れる川", "香りが色となって漂う花畑",
"記憶の欠片が散らばる海岸", "忘れ去られた夢のゴミ捨て場", "想像力が実体化するキャンバスの平原", "物語の終わりの空白ページ",
"本の中の世界の挿絵", "絵画の中の風景", "映画のスクリーンの向こう側", "舞台セットの裏側",
"操り人形の糸が垂れ下がる空", "ガラス玉の中の小宇宙", "スノードームの中の冬景色", "万華鏡のような幾何学模様の空",
"フラクタル図形の海岸線", "メビウスの輪のように繋がった道", "エッシャーの騙し絵のような建築", "シュルレアリスムの溶けた時計がある砂漠",
"ダリの象の足のような長い柱", "マグリットの空に浮く岩と城", "ゴッホの星月夜のような渦巻く空", "モネの睡蓮のような池",
"クリムトのような黄金の装飾の部屋", "ミュシャのような植物文様の森", "ヒエロニムス・ボスの快楽の園のような混沌", "ブリューゲルのバベルの塔",
"水墨画の山水", "浮世絵の波間", "曼荼羅のような極彩色の宇宙", "禅の枯山水庭園",
"盆栽の上の小宇宙", "箱庭の中の世界", "テラリウムの中の苔の森", "アクアリウムの水草の森",
"バードケージ(鳥籠)の中の庭園", "虫籠の中の草原", "顕微鏡で見た微生物の森", "望遠鏡で見た星雲の彼方",
"オーロラソースの海", "ゼリーのプール", "プリンの山", "綿菓子の雲",
"ポップコーンの雪", "キャンディケインの林", "ビスケットの地面", "クリームソーダの湖"

],
fantasy_obj: [
"雲の上の神殿", "ドラゴンの巣がある火山", "ドワーフの地下要塞", "世界樹の根本", "満月の夜の古城",
"伝説の聖剣が刺さった岩", "召喚魔法陣と光の柱", "人魚が泳ぐサンゴ礁の宮殿", "氷の女王が住む水晶の城",
"砂漠に半分埋もれた巨像", "廃墟となった神殿", "雷雨の中の塔", "不動の巨大ゴーレム", "オークの砦",
"空飛ぶ帆船", "海賊船とクラーケン", "ツタの絡まる石橋", "ステンドグラスの大聖堂", "異界へのゲート",
"カボチャの馬車", "森の奥のお菓子の家", "雲を突き抜ける豆の木", "深海の沈没船", "天空の回廊",
"女神の彫像", "英雄の記念碑", "動く城", "バベルの塔のような未完の巨塔", "剣の墓場", "竜巻の中に建つ魔術師の塔"
],
nature_bg: [
"静かな湖畔のキャンプ場", "オーロラが見える雪原", "サンゴ礁が広がる海底", "桜が満開の並木道",
"紅葉が美しい日本庭園", "広大なサバンナ", "霧の立ち込める海岸", "険しい山岳地帯",
"エメラルドグリーンの透き通る海", "波打ち際の白い砂浜", "木漏れ日が差し込む深い森",
"満天の星空と天の川", "燃えるような夕焼け空", "入道雲が湧き上がる夏の空", "一面に広がるひまわり畑",
"ラベンダー畑の紫の絨毯", "雪を頂いた壮大な山脈", "熱帯雨林のジャングル", "苔むした岩と清流",
"砂丘に描かれた風紋", "マングローブの林", "竹林の小径", "雲海に浮かぶ山頂", "岩肌が露出した荒涼とした大地",
"新緑のブナ林", "風に揺れる黄金色の麦畑", "色とりどりの高山植物の群生", "薄明光線が降り注ぐ谷",
"月明かりに照らされた海", "紅葉で真っ赤に染まる山肌", "落ち葉の絨毯", "秋のすすき野原",
"野生の馬が走る草原", "ホタルが飛び交う小川", "イチョウ並木のトンネル", "ブドウ畑の丘",
"サボテンの生える砂漠", "霧氷のついた枝", "夜明け前の蒼い世界", "湿原の木道", "菜の花畑とローカル線",
"棚田の夕暮れ", "茶畑の幾何学模様", "塩湖の鏡張り", "バオバブの並木道", "入江の漁村", "嵐の海",
"雪解け水が流れる川", "水芭蕉の群生地", "ネモフィラの青い丘", "コスモス畑", "彼岸花が咲く畦道",
"樹氷の森", "流氷の海", "リアス式海岸", "干潟の夕景", "朝靄に包まれた牧場", "サトウキビ畑", "パイナップル畑",
"五色の石が転がる河原", "真っ白な石灰岩の棚田", "コバルトブルーの温泉地帯", "極夜の氷原",
"雲海の上に並ぶ大量の古代の塔","雲海"

],
nature_obj: [
"グランドキャニオンのような渓谷", "大迫力の巨大な滝", "水面に映る逆さ富士", "鍾乳洞の神秘的な空間",
"噴煙を上げる火山", "切り立ったフィヨルド", "カルスト台地の奇岩", "ダブルレインボー", "皆既日食の瞬間",
"流れ星が降り注ぐ夜", "紫色の雷光", "桜吹雪が舞う川沿い", "銀世界に佇む一本松", "凍りついた滝",
"渡り鳥の群れ", "クジラが泳ぐ大海原", "藤棚の下", "蜃気楼が見える地平線", "水平線に沈む太陽",
"青の洞窟", "孤島のリゾート", "氷河の崩落", "オアシスの泉", "間欠泉の噴出", "セコイアの巨木",
"断崖絶壁の灯台", "火口湖のエメラルドグリーン", "渓谷の吊り橋", "風車のある風景", "水車小屋と小川",
"蓮の花が咲く池", "テーブルマウンテンのような台地", "柱状節理の断崖", "巨大な一枚岩(モノリス)",
"ハートの形をした浮島", "古代杉の切り株", "竜の背のような岩礁"
],
time: [
"夜明け前", "早朝", "日の出", "朝", "午前", "正午", "真昼", "午後",
"夕方", "夕暮れ", "日没", "黄昏時", "マジックアワー", "ブルーアワー",
"夜", "真夜中", "深夜", "丑三つ時"
],
weather: [
"快晴", "青空", "曇り", "霧", "濃霧", "朝霧",
"雨", "小雨", "霧雨", "天気雨", "土砂降り", "豪雨", "雷雨", "嵐", "台風",
"雪", "吹雪", "雹", "ダイヤモンドダスト",
"虹", "天使の梯子", "蜃気楼", "花吹雪", "オーロラ",
"日食", "月食", "満月", "新月", "星空", "流星群", "天の川"
],
atm_bright: [
"神々しく幻想的な光", "活気に満ち溢れている", "夢の中にいるような感覚", "昭和レトロな暖かい雰囲気",
"80年代のポップな色彩", "ヴェイパーウェイヴのような幻想的な空間", "希望に満ちた明るい未来感",
"幸福感に包まれた優しい世界", "エネルギッシュで力強い躍動感", "清涼感のある爽やかな風",
"祝祭のような賑やかな喧騒", "魔法がかかったようなキラキラした空気", "アニメーションのような鮮やかな色彩",
"ロマンチックで甘い雰囲気", "夢心地のふわふわした感覚", "おとぎ話のようなメルヘンチックな世界",
"パステルカラーの可愛らしい空間", "洗練されたラグジュアリーな空間", "ボタニカルで癒やされる空間",
"近未来的なスタイリッシュさ", "壮大な冒険の予感", "勝利のファンファーレが聞こえる高揚感",
"トロピカルで開放的な空気", "コメディタッチの陽気な世界", "聖なる祝福に満ちたオーラ"
],
atm_dark: [
"ノスタルジックなセピア色の世界", "色あせた古い写真のような質感", "退廃的で不気味な空気感",
"孤独で寂しい雰囲気", "緊張感のある張り詰めた空気", "ゾクッとするような恐怖感",
"狂気に満ちたサイケデリックな空間", "ゴシックで重厚な空気", "絶望的な終末感", "闇に飲み込まれそうな気配",
"神秘的で厳かな静寂", "異次元のような浮遊感", "幽玄で儚い美しさ", "古代の神話のような荘厳さ",
"映画のワンシーンのようなドラマチックな構図", "孤独で静謐な時間", "世界から取り残されたような寂しさ",
"音のない静止した世界", "哀愁漂う夕暮れの空気", "冷たく無機質な質感", "ハードボイルドで渋い世界観",
"鉄と油の匂いがする無骨な雰囲気", "戦場のような張り詰めた緊張感", "スチームパンクな蒸気の煙る空気",
"ミニマルで整然とした美しさ", "カオスで雑多なエネルギー", "瞑想的な深い精神世界",
"記憶の断片のような曖昧なイメージ", "クリスタルのように透き通った空気", "嵐の前の不穏な静けさ",
"白昼夢のような非現実感", "インダストリアルな荒廃感", "監獄のような息苦しい閉塞感",
"呪われた不浄な空気", "深淵から見つめられている気配", "電子ドラッグのような陶酔感"
]
};

// ---------------------------------------------------------
// ■ 履歴管理機能 (Object保存版)
// ---------------------------------------------------------
const STORAGE_KEY = 'ai_image_full_history_v6';

window.onload = function() { loadHistory(); };

// 履歴には「指示(instruction)」と「詳細(details)」の両方を保存
function saveToHistory(inst, det) {
if (!inst && !det) return;

let history = JSON.parse(localStorage.getItem(STORAGE_KEY)) || [];

// 同じ組み合わせがあれば削除して先頭へ (重複回避)
const newItem = { instruction: inst, details: det };
const jsonItem = JSON.stringify(newItem);

// 既存の履歴から同一内容を探して削除(単純な文字比較)
history = history.filter(item => JSON.stringify(item) !== jsonItem);

// 先頭に追加
history.unshift(newItem);

// 最大20件まで
if (history.length > 20) history.pop();

localStorage.setItem(STORAGE_KEY, JSON.stringify(history));
loadHistory();
}

function loadHistory() {
const historySelect = document.getElementById('historySelect');
const history = JSON.parse(localStorage.getItem(STORAGE_KEY)) || [];

historySelect.innerHTML = '<option value="" disabled selected>履歴...</option>';

history.forEach((item, index) => {
const option = document.createElement('option');
// valueには配列のインデックスを入れる
option.value = index;

// 表示名は「指示 + 詳細」の一部を表示
let displayText = `[${item.instruction}] ${item.details.replace(/\n/g, ' ')}`;
if (displayText.length > 40) displayText = displayText.substring(0, 40) + "...";

option.text = displayText;
historySelect.appendChild(option);
});
}

function restoreHistory() {
const historySelect = document.getElementById('historySelect');
const index = historySelect.value;
const history = JSON.parse(localStorage.getItem(STORAGE_KEY)) || [];

if (history[index]) {
document.getElementById('instructionInput').value = history[index].instruction;
document.getElementById('detailArea').value = history[index].details;
}
}

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_sf_bg', data: promptData.sf_bg },
{ id: 'n_sf_obj', data: promptData.sf_obj },
{ id: 'n_fantasy_bg', data: promptData.fantasy_bg },
{ id: 'n_fantasy_obj',data: promptData.fantasy_obj },
{ id: 'n_nature_bg', data: promptData.nature_bg },
{ id: 'n_nature_obj', data: promptData.nature_obj },
{ id: 'n_time', data: promptData.time },
{ id: 'n_weather', data: promptData.weather },
{ id: 'n_atm_bright', data: promptData.atm_bright },
{ id: 'n_atm_dark', data: promptData.atm_dark }
];

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);
}


// ---------------------------------------------------------
// ■ アクション処理 (1行化 & 保存 & コピー/起動)
// ---------------------------------------------------------
function handleAction(isLaunch) {
const instruction = document.getElementById('instructionInput').value.trim();
const details = document.getElementById('detailArea').value.trim();

if (!instruction || !details) {
alert("指示と詳細の両方が必要です。");
return;
}

// 1. 履歴に保存 (元の改行ありの状態で保存)
saveToHistory(instruction, details);

// 2. 1行化処理 (改行をスペースに変換)
// 指示 + スペース + 詳細 (詳細内の改行もスペース化)
const oneLineDetails = details.replace(/[\r\n]+/g, ' ');
const finalPrompt = `${instruction} ${oneLineDetails}`;

// 3. コピー or 起動
if (navigator.clipboard) {
navigator.clipboard.writeText(finalPrompt).then(() => {
if (!isLaunch) {
alert("1行にしてコピーしました!\n履歴にも保存されました。");
} 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;
}

if (aiService === 'perplexity') {
window.open(url, '_blank');
} else {
let serviceName = document.getElementById('aiSelector').options[document.getElementById('aiSelector').selectedIndex].text;
let msg = "プロンプトを1行にしてコピーしました!\n\n" + serviceName + "を別タブで開きますか?";

if(confirm(msg)) {
window.open(url, '_blank');
}
}
}
</script>

</body>
</html>


使用変数

aiService
allParts
borderColor
charset
class
clearHistory -------( Function )
config
count
detailArea
details
displayText
encodedPrompt
err
finalPrompt
for
generateRandomPrompt -------( Function )
handleAction -------( Function )
history
historySelect
i
id
index
innerHTML
instruction
item
jsonItem
lang
launchService -------( Function )
length
loadHistory -------( Function )
min
msg
newItem
onchange
onclick
oneLineDetails
onload
option
pick
placeholder
promptData
q
restoreHistory -------( Function )
saveToHistory -------( Function )
serviceName
STORAGE_KEY
text
type
url
value