commit 01515b5ed2ce9e59dc4a3fd9221a04b0206ca5fb
Author: Claude <noreply@anthropic.com>
Date:   Sat Nov 14 07:20:53 2026 +0900

    LOG506 のサムネイルを、ブラウザの窓の PC の画面とスマホの画面を並べる形に替えた（ブラウザ版だと分かるように）。sim_thumbs に browser_frames を足す
    
    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01LevEXU3Z3M9LXKJxzqN9Ew

diff --git a/tools/sim_thumbs/make.py b/tools/sim_thumbs/make.py
index 185890f..d99258c 100644
--- a/tools/sim_thumbs/make.py
+++ b/tools/sim_thumbs/make.py
@@ -182,9 +182,29 @@ def stills_cols(n, ss, bg=LIGHT):
     save(c, n)
 
 
+def browser_frames(n, pc, sp, bg=LIGHT):
+    """ブラウザ版（LOG506〜）：ブラウザの窓に PC の画面、手前にスマホの画面を重ね、ブラウザで触れる試作だと分かるようにする。文字は画面の中のものだけ"""
+    from PIL import ImageDraw
+    c = Image.new('RGB', (W, H), bg); d = ImageDraw.Draw(c)
+    a = Image.open(D + pc + '.jpg').convert('RGB')
+    ww = 1380; wh = int(ww * a.size[1] / a.size[0]); bar = 46; x0, y0 = 50, (H - wh - bar) // 2 - 20
+    d.rounded_rectangle((x0 - 2, y0 - 2, x0 + ww + 2, y0 + bar + wh + 2), 16, fill=(200, 203, 210))
+    d.rounded_rectangle((x0, y0, x0 + ww, y0 + bar + wh), 14, fill=(226, 228, 233))
+    for i, col in enumerate([(236, 106, 94), (244, 191, 79), (98, 197, 84)]):
+        d.ellipse((x0 + 22 + i * 26, y0 + 16, x0 + 36 + i * 26, y0 + 30), fill=col)
+    d.rounded_rectangle((x0 + 120, y0 + 10, x0 + ww - 120, y0 + 36), 8, fill=(248, 249, 251))
+    c.paste(a.resize((ww, wh), Image.LANCZOS), (x0, y0 + bar))
+    b = Image.open(D + sp + '.jpg').convert('RGB')
+    ph = 860; pw = int(ph * b.size[0] / b.size[1]); bz = 16; px = W - pw - 2 * bz - 40; py = (H - ph) // 2 + 30
+    d.rounded_rectangle((px, py - bz, px + pw + 2 * bz, py + ph + bz), 56, fill=INK)
+    m = Image.new('L', (pw, ph), 0); ImageDraw.Draw(m).rounded_rectangle((0, 0, pw - 1, ph - 1), 42, fill=255)
+    c.paste(b.resize((pw, ph), Image.LANCZOS), (px + bz, py), m)
+    save(np.array(c), n)
+
+
 # ---- 各回（素材名, 店の範囲の中の中心 x, y, 切り出し幅の割合）
 JOBS = {
-    506: lambda n: mosaic(n, ('browser506_store3_right', .44, .5, .62), ('browser506_store0_left', .52, .5, .62), ('browser506_store2_right', .49, .53, .55)),  # ブラウザ版の試作を作った回。three.js で描いたブラウザの画面（Unity の絵ではない）。左の大＝③ 効率重視・入口が角の混んでいる時（ロボット2台・右30°）、右上＝⓪の店（左30°）、右下＝②の店（右30°）
+    506: lambda n: browser_frames(n, 'browser506_pc', 'browser506_sp'),  # ブラウザ版の試作を作った回。three.js で描いたブラウザ版の画面（Unity の絵ではない）。ブラウザの窓に PC の画面（③ 効率重視・入口が角、ロボット2台・混んでいる）、右手前にスマホの画面
     503: lambda n: stills_cols(n, [('closeup503_glance', .5, .55, .36), ('closeup503_stumble', .47, .5, .42), ('closeup503_smile', .5, .5, .5)]),  # 廊下ですれ違う場面を作った回（依頼175）。左＝ちらっとハコブくんを見る看護師（顔の寄り）、中＝よろける看護師と手前で止まるハコブくん（本番のカメラ）、右＝画面がにっこりするハコブくん（画面の寄り）
     499: lambda n: stills_split(n, ('closeup499_card_side', .52, .40, .50), ('closeup499_take_side', .60, .45, .45), r=.5),  # 受け渡しの場面を直した回（依頼171）。左＝ハコブくんの画面にカードをかざす看護師（横から）、右＝開いた引き出しに上から手を入れて取る所（横から）
     496: lambda n: still(n, 'closeup496_drawer', .47, .5, .9),  # ハコブくんと看護師の3Dを作った回。Blender で描いた、引き出しの前でかがむ看護師（LOG496 の scene_render.py。Unity の絵ではない）
