๐ŸŽจ JVision Bridge

์‚ฌ๋‚ด๋ง JVision Invoke AI (FLUX.2 Klein 4B) ๋ž˜ํผ โ€” ์บ๋ฆญํ„ฐ ์‹œํŠธ ์ฐธ์กฐ + ๋น„์œจ ํ”„๋ฆฌ์…‹ + seed ์ถ”์ 
v1.0.0
10.8.x.x VPN only
FLUX.2 Klein 4B
โš ๏ธ ์ด ํŽ˜์ด์ง€๋Š” 10.8.x.x ๋Œ€์—ญ๊ณผ 127.x์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ (FastAPI middleware ACL).

๐Ÿ“Œ ํ•ต์‹ฌ ์‚ฌ์šฉ ์˜ˆ

curl -X POST http://10.8.0.17:8089/generate \
  -H "Content-Type: application/json" \
  -d '{"prompt": "haru and luna at sunset cafe", "aspect": "16:9", "characters": ["haru", "luna"]}' \
  -o output.png

# ์‘๋‹ต ํ—ค๋”: X-Seed / X-Image-Name / X-Batch-Id / X-Refs / X-Size

๐Ÿ”ง ์—”๋“œํฌ์ธํŠธ

POST/generate
์›์ƒท ์ด๋ฏธ์ง€ ์ƒ์„ฑ. PNG bytes ์ง์ ‘ ๋ฐ˜ํ™˜.

Request body

ํ•„๋“œํƒ€์ž…์„ค๋ช…
promptstr (req)์˜์–ด ๋ฌ˜์‚ฌ ๊ถŒ์žฅ, ์ตœ๋Œ€ 2000์ž
aspectstr?๋น„์œจ ํ”„๋ฆฌ์…‹ (1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9) โ€” width/height๋ณด๋‹ค ์šฐ์„ 
width / heightint?aspect ์—†์„ ๋•Œ ์‚ฌ์šฉ (64~2048)
seedint?์žฌ์ƒ์‚ฐ์šฉ. ์Œ์ˆ˜ ๋˜๋Š” ๋ฏธ์ง€์ • ์‹œ ๋žœ๋ค
stepsint?๊ธฐ๋ณธ 4 (FLUX.2 Klein ๊ถŒ์žฅ)
characterslist?['haru','luna','mori'] ์ค‘ ์ผ๋ถ€ โ€” ํ•ด๋‹น ์บ๋ฆญํ„ฐ ์‹œํŠธ ref ์ž๋™ ์ฒจ๋ถ€ (Invoke AI flux_kontext ์ฃผ์ž…)
workflowstr?๊ธฐ๋ณธ 'flux2_klein_t2i'

Response headers

ํ—ค๋”์„ค๋ช…
X-Seed์‹ค์ œ ์‚ฌ์šฉ๋œ seed (์žฌ์ƒ์‚ฐ์šฉ)
X-Image-NameJVision ๊ฐค๋Ÿฌ๋ฆฌ image_name (UUID)
X-Batch-Idํ ๋ฐฐ์น˜ ID
X-Refs์ฒจ๋ถ€๋œ ref image_name (์ฝค๋งˆ ๊ตฌ๋ถ„)
X-Size์‘๋‹ต PNG ๋ฐ”์ดํŠธ ์ˆ˜
POST/generate_async
๋น„๋™๊ธฐ โ€” enqueue๋งŒ ํ•˜๊ณ  batch_id ์ฆ‰์‹œ ๋ฐ˜ํ™˜. ๊ฒฐ๊ณผ๋Š” /result/{batch_id} ํด๋ง.
GET/result/{batch_id}
๋ฐฐ์น˜ ์ƒํƒœ ์กฐํšŒ. ์™„๋ฃŒ ์‹œ ์ฒซ ์ด๋ฏธ์ง€ PNG bytes ๋ฐ˜ํ™˜, ๋ฏธ์™„๋ฃŒ ์‹œ status JSON.
GET/aspects
์ง€์›ํ•˜๋Š” ๋น„์œจ ํ”„๋ฆฌ์…‹ โ†’ width/height ๋งคํ•‘.
{"presets":{"1:1":{"width":1024,"height":1024},"16:9":{"width":1344,"height":768},...}}
GET/refs
์บ๋ฆญํ„ฐ ์‹œํŠธ ref ์บ์‹ฑ ์ƒํƒœ. ์ž๋™ ์—…๋กœ๋“œ๋œ image_name ๋ชฉ๋ก.
{"cached":{"haru":"3393565d-...png","luna":"a0f732a5-...png"},"supported":["haru","luna","mori"]}
POST/refs/upload/{character}
๊ฐ•์ œ ์žฌ์—…๋กœ๋“œ. character_refs/{char}.png ๊ต์ฒด ํ›„ ํ˜ธ์ถœ. ์บ์‹œ ๋ฌดํšจํ™” + ์žฌ์—…๋กœ๋“œ.
GET/models
JVision์— install๋œ ๋ชจ๋ธ ์ „์ฒด ๋ชฉ๋ก (๋ฉ”์ธ / VAE / Text Encoder / LoRA).
GET/workflows
JVision์˜ ์›Œํฌํ”Œ๋กœ์šฐ ๋ชฉ๋ก (default + user).
GET/healthz
ํ—ฌ์Šค ์ฒดํฌ โ€” JWT ๋งŒ๋ฃŒ ์‹œ๊ฐ„, primary failure count ํฌํ•จ.
POST/auth/refresh
JWT ์ฆ‰์‹œ ์žฌ๋ฐœ๊ธ‰ (๊ด€๋ฆฌ์šฉ).

๐ŸŽญ ์บ๋ฆญํ„ฐ ์‹œํŠธ ref

ํ”„๋กฌํ”„ํŠธ์— ์บ๋ฆญํ„ฐ ํ‚ค์›Œ๋“œ ํฌํ•จ ์‹œ jv_bridge๊ฐ€ ์ž๋™์œผ๋กœ ์‹œํŠธ ์ด๋ฏธ์ง€๋ฅผ reference๋กœ ์ฒจ๋ถ€ โ†’ ์™ธํ˜• ์ผ๊ด€์„ฑ ํ™•๋ณด.

์บ๋ฆญํ„ฐํ‚ค์›Œ๋“œ
haru โ˜€๏ธharu, ํ•˜๋ฃจ, blonde twintails, yellow hoodie, sun mark/emblem
luna ๐ŸŒ™luna, ๋ฃจ๋‚˜, navy hair/wavy/long, crescent moon necklace, blue knit
mori ๐Ÿƒmori, ๋ชจ๋ฆฌ, mint-green, heterochromia, violet and gold, card pattern hoodie

์ž๋™ ์นด์šดํŠธ๋Š” discordbot/image_gen.py:_detect_characters()๊ฐ€ ์ฒ˜๋ฆฌ. ์ˆ˜๋™ ํ˜ธ์ถœ ์‹œ characters: ["haru","luna"] ๋ช…์‹œ.

๐Ÿ“‚ ํŒŒ์ผ ๋ณด๊ด€

๐Ÿ” ACL

ํ™˜๊ฒฝ๋ณ€์ˆ˜ BRIDGE_ALLOWED_PREFIXES="10.8.,127." โ€” ์ฝค๋งˆ ๊ตฌ๋ถ„, prefix ๋งค์นญ. ๊ทธ ์™ธ ๋ชจ๋“  IP๋Š” 403.

JVision Bridge ยท ์‚ฌ๋‚ด๋ง ์ „์šฉ ยท Swagger UI ยท /healthz