ars-fabula-vn-embed / README.md
ArsVie's picture
ZeroGPU variant README (sdk: gradio)
06cd987 verified
|
Raw
History Blame Contribute Delete
2.89 kB

A newer version of the Gradio SDK is available: 6.20.0

Upgrade
metadata
title: Ars Fabula VN
emoji: 🌸
colorFrom: pink
colorTo: indigo
sdk: gradio
sdk_version: 6.16.0
app_file: app.py
pinned: false
license: apache-2.0
short_description: An AI-driven visual novel β€” a small LLM writes every scene
models:
  - google/gemma-4-12b-it
  - Abiray/Anima-base-v1.0-GGUF
  - circlestone-labs/Anima
  - Bingsu/adetailer
tags:
  - build-small-hackathon

🌸 Ars Fabula VN

An AI-driven visual novel where every scene is written live by a small LLM. The model narrates, voices a three-character cast, swaps expressions and backgrounds, and offers branching choices β€” through a plain-text tool-call protocol ([TOOL: set_expression …]) that any small instruct model can speak. No fine-tune, no function-calling API.

Track: Thousand Token Wood Β· Hackathon: Build Small

How to play

  1. Press Begin on the title screen.
  2. Read at your own pace β€” click / Space / Enter advances each beat.
  3. Pick a choice button, or type any action you want in the free-text bar.
  4. Save/Load slots persist for your session.

What's running

Piece On this Space (ZeroGPU) At home
Scene writer google/gemma-4-12b-it (bf16) via transformers, @spaces.GPU Gemma 4 26B-A4B MoE Q4_K_M GGUF on stock llama.cpp with MTP speculative decoding, on an 8 GB GPU
Character sprites Live ComfyUI pipeline, embedded in-process under @spaces.GPU: face-gated base gen β†’ expression warping β†’ background removal Same pipeline, ComfyUI as a subprocess over HTTP
Backgrounds Preset library + live txt2img for novel keys (same embedded pipeline) Preset + live txt2img for novel scene keys

The engine is model-independent: the same code drives a mock model (for tests), a llama.cpp server, or an in-process transformers model β€” picked by ARS_FABULA_BACKEND. The casting/background pipeline is likewise transport-independent (ARS_FABULA_COMFY_MODE): at home it talks to a ComfyUI subprocess over HTTP; here on ZeroGPU β€” where a subprocess can't hold a GPU β€” it drives ComfyUI's executor in-process, one image per @spaces.GPU call (see comfy_embed.py). ComfyUI and its custom nodes are vendored as git submodules under third_party/; the diffusion weights are downloaded at startup. On an 8 GB card the LLM and the diffusion stack can't co-reside, so the home setup stops/relaunches servers around image bakes; on ZeroGPU none of that is needed β€” the GPU is granted per call. There's also a Docker variant (see Dockerfile on the repo) that runs the full 26B + live ComfyUI casting on a dedicated T4.

Run it locally

pip install -r requirements.txt gradio==6.16.0
bash tools/start_gemma_server_stock.sh &   # stock llama.cpp + MTP
python app.py
ARS_FABULA_BACKEND=mock python app.py      # no model needed