fanfictioner
Turn a story idea into a text-free illustrated book. A local Gemma model
(llama-server) plans the pages and writes the image prompts; sd-cli
(stable-diffusion.cpp) draws them. You pick among three candidates at every
image stage. Pages land in the book-reader library as NNN.png.
Requirements
- Python 3, stdlib only
- llama-server in router mode on
localhost:8181servingGemma4-12B-qat-mtp sd-cliwith Vulkan, models under/data/LLM-models/SD- ImageMagick 7 (
magick),$EDITOR,notify-send(libnotify), and kitty for inline previews (elsewhere candidates open withxdg-open); with--preview, a live view of the candidate being rendered opens inmagick display, floated under Hyprland ~/.config/book-reader.confwith aLIBRARY="..."line
Usage
A story file is free prose. An optional frontmatter at the top sets the names instead of letting Gemma invent them; every key is optional:
---
series: A new life
book: Life as Daniel
chapter: 1
title: Meet Daniel
style: shoujo manga, soft pastel cel shading
---
series and book name the library folders, title is the lettering on the
chapter's page 1, style is the art style of every page and reference sheet. With chapter, pages are saved as
01-001.png, 01-002.png, so every chapter of a book (one story file each)
reads as one continuous book in book-reader. These values always override what
Gemma writes in plan.md.
Editing the story after plan.md exists asks whether Gemma should revise the plan to match it, draft a new one (the old one is kept as plan.md.bak), or keep the plan as it is. Editing only the frontmatter is applied without Gemma.
fanfictioner story.md [--base zimage|krea2] [--preview]
fanfictioner --selftest
Work files go to a directory named after the story (stories/rooftop.md ->
stories/rooftop/): plan.md, plan.json, refs/, cand/ and run.log.
run.log records every generation, pick (with its seed), regeneration, prompt
edit, skip and plan decision with a timestamp. Each sd-cli call also leaves its
own log next to its candidates in cand/. Quit any time
with q or Ctrl-C; the next run resumes from what is on disk.
Plan review keys: c confirm, e edit in $EDITOR, g ask Gemma to revise,
q quit. Image review keys: 1-3 pick, r regenerate, p edit prompt,
s skip edit (edit stage only), q quit.
Page 1 is the cover: its Title: line in plan.md is drawn as title lettering,
the only text in the book. Remove the line for a cover without text. A page can
override the base model with a Model: krea2 line in plan.md. To
redo a page, delete NNN.png from the library and its cand/pNNN_* folder.
To redo a reference sheet, delete refs/<Name>.png; pages already done keep
the old look. A prompt edited with p applies until you pick and is not
written back to plan.json.
License
Copyright (C) 2026 Danilo M. danix@danix.xyz
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License version 2 as published by the Free
Software Foundation. See LICENSE.
Development Approach
This project is developed using AI-assisted tools. Code is generated with the help of AI based on human-provided specifications, design decisions, and iterative feedback.
All contributions are reviewed, tested, and curated by the maintainer before being included in the codebase. AI is used as a productivity and exploration tool, while human oversight remains central to all decisions.
The goal is to combine the flexibility of AI-assisted development with standard open-source practices such as transparency, review, and accountability.
