mirror of
https://github.com/screentinker/screentinker.git
synced 2026-06-15 10:43:36 -06:00
A prompt now produces a full sign: the LLM writes the design AND image prompts, the server generates the images and composites them with the crisp text layer. - lib/image-gen.js: text-to-image with 3 BYO/self-hostable backends, all behind the SSRF guard: 'sdcpp' (local stable-diffusion.cpp OpenAI-compatible server, exact small sizes that fit VRAM), 'openai' (cloud / OpenAI-compatible, snapped sizes), 'comfyui' (prompt/history/view API). - ai.js: prompt asks for a background_prompt (preferred — full-bleed atmosphere) and an optional foreground image element; after the design is normalized, the bg + fg images are generated best-effort (a failed image never fails the sign) and returned as data URLs. New image_* settings (provider/base_url/model), image_provider whitelist, schema column + migration. - designer.js: AI-images section in settings; generate applies the background image; publish bakes the background image into the HTML so it survives. - server.js: raise JSON body limit to 12mb for embedded image data URLs. Verified end-to-end on local Vulkan SDXL (RTX 5090): prompt -> bg+fg images on the canvas -> publish creates a widget with the images embedded. 63/63. Note: prod (not self-hosted) requires a PUBLIC image endpoint (e.g. OpenAI); the SSRF guard blocks localhost there. Follow-up: upload generated images to the content store and reference by URL to avoid multi-MB widget configs. |
||
|---|---|---|
| .. | ||
| activity.js | ||
| admin.js | ||
| ai.js | ||
| assignments.js | ||
| auth.js | ||
| contact.js | ||
| content.js | ||
| device-groups.js | ||
| devices.js | ||
| folders.js | ||
| kiosk.js | ||
| layouts.js | ||
| player-debug.js | ||
| playlists.js | ||
| provisioning.js | ||
| reports.js | ||
| schedules.js | ||
| status.js | ||
| stripe.js | ||
| subscription.js | ||
| teams.js | ||
| video-walls.js | ||
| white-label.js | ||
| widgets.js | ||
| workspaces.js | ||