What it does
Given a picture-book theme, the model attempts to produce:
- A story title.
- A cover-page illustration description (without cover narrative text).
- Numbered pages, each with story text and an illustration description.
It generates text only for this use case. Illustration fields are prompts/descriptions, not generated image files.
Model and training details
Table with columns: Item, Detail| Item | Detail |
|---|
| Base checkpoint | unsloth/Qwen3.5-2B |
| Architecture | Qwen3.5; multimodal-capable base model, adapted here for text-only output |
| Training data | Aiwensile2/StorySeed |
| Training approach | Supervised fine-tuning (SFT) with LoRA, using Unsloth / TRL |
| Training run | 30 optimizer steps (smoke-test scale) |
| Micro-batch / gradient accumulation | 1 / 8 |
| Learning rate | 2e-4 |
| LoRA rank / alpha | 16 / 16 (notebook configuration) |
| Maximum training sequence length | 4,096 tokens (configured) |
| Optimizer / scheduler | adamw_8bit / linear |
| Precision of companion merged release | FP16 |
The training configuration follows the Qwen3.5-2B Unsloth notebook adapted to StorySeed. The precise dataset split, hardware, software versions, effective loss masking, and truncation rate were not independently verified for this release. These should be recorded before a larger training run.
Measured inference benchmark
Five picture-book prompts were evaluated with the fine-tuned 2B model in the original Colab/Unsloth inference environment. This benchmark measures the trained model with its adapter active; it does not independently benchmark the merged repository.
Table with columns: Metric, Observed value| Metric | Observed value |
|---|
| Prompts evaluated | 5 |
| Mean generated throughput | 12.51 tokens/s |
| Mean end-to-end generation time, all prompts | 111.59 s |
| Mean generation time, four naturally completed prompts | 59.22 s |
| Mean peak PyTorch CUDA allocated memory | 4.30 GiB |
| Typical peak allocated memory, four naturally completed prompts | ~4.28 GiB |
| Naturally terminated generations | 4/5 (80%) |
| Generations reaching 4,096-token cap |
Important: These are small-sample, environment-specific measurements, not hardware-independent performance claims. Total latency is strongly affected by response length. The memory figure is peak PyTorch allocated CUDA memory, not total device VRAM consumption. Hardware identity and repeated-run uncertainty were not recorded.
Per-prompt results
Table with columns: Prompt, Output tokens, Time (s), Tokens/s, Peak allocated CUDA memory (GiB), Natural stop| Prompt | Output tokens | Time (s) | Tokens/s | Peak allocated CUDA memory (GiB) | Natural stop |
|---|
| 1 | 709 | 58.44 | 12.13 | 4.284 | Yes |
| 2 | 737 | 60.35 | 12.21 | 4.284 | Yes |
| 3 | 4,096 |
Observed failure mode: repetitive page continuation
On the third benchmark prompt, the model continued beyond Page 14 and repeated nearly identical narrative and illustration descriptions on successive pages, incrementing page numbers until it hit the generation cap. This is a repetition/termination failure rather than successful long-form generation.
Prompt-constraint experiment
The initial five-prompt benchmark exposed a concrete failure mode: one unconstrained prompt entered a repetitive page-generation loop after the narrative should have ended. It kept incrementing page numbers while repeating substantially similar story and illustration content, eventually reaching the 4,096-token generation cap.
A second benchmark used the same five story themes but added an explicit output constraint: generate exactly 10 story pages and stop after Page 10. This is a prompt-engineering experiment, not a retraining result.
Table with columns: Metric, Original prompt, Constrained prompt| Metric | Original prompt | Constrained prompt |
|---|
| Prompts evaluated | 5 | 5 |
| Natural completion | 80% (4/5) | 100% (5/5) |
| Hit 4,096-token limit | 20% (1/5) | 0% (0/5) |
| Mean output tokens | 1409.2 | 710.8 |
| Mean end-to-end latency | 111.59 s | 56.08 s |
| Mean throughput |
In this five-prompt sample, explicit page-count and stopping constraints improved natural completion from 80% to 100% and eliminated the observed 4,096-token runaway. Mean output length fell from 1,409.2 to 710.8 tokens, while mean end-to-end latency fell from 111.59 s to 56.08 s. Throughput remained essentially unchanged (~12.5–12.7 tokens/s), indicating that the latency improvement came primarily from preventing unnecessary generation rather than making token generation itself faster.
The previously failing prompt is particularly illustrative. Without an explicit page limit, it continued beyond Page 14 and repeated near-identical content. With the constraint, it produced a 10-page story and terminated naturally after 659 generated tokens.
Interpretation: Explicit structural constraints materially improved stopping behavior in this small benchmark. With only five prompts, this should not be interpreted as evidence that prompt constraints eliminate repetition generally.
Recommended prompting pattern
Create exactly 10 story pages.The format should include:- A title- A cover page containing an illustration only- Pages 1 through 10, each containing both text and an illustration- End the story after Page 10
This experiment highlights a deployment lesson: model behavior is influenced not only by weights, but also by prompt design and decoding controls, especially for smaller models performing highly structured generation tasks.
Example prompt
Please help me create a picture book with the theme ofA lonely little robot discovers a forgotten garden and learns how to bring it back to life.The format should include a title, followed by a cover page with an illustration only,and the remaining pages should each have both text and illustrations.
For more reliable stopping behavior, specify a page count and explicitly request an ending after the last page. In the five-prompt follow-up experiment above, this changed natural completion from 4/5 to 5/5 and eliminated the observed token-cap failure.
Loading the adapter
Use a compatible Unsloth environment and load the base model with this adapter. For example:
from unsloth import FastVisionModel model, tokenizer = FastVisionModel.from_pretrained( model_name="shashnk/Qwen3.5-2B-StorySeed-LoRA", max_seq_length=4096, load_in_4bit=False,)FastVisionModel.for_inference(model) prompt = ( "Create a picture book about a little robot who restores a garden. " "Include a title, an illustration-only cover, and exactly 8 numbered story pages. " "Each story page needs text and an illustration description. End after Page 8.")messages = [{"role": "user", "content": prompt}]rendered = tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True)inputs = tokenizer(text=rendered, return_tensors="pt", add_special_tokens=False).to("cuda")output = model.generate( **inputs, max_new_tokens=2048, do_sample=True, temperature=0.8, min_p=0.1, use_cache=True,)print(tokenizer.decode(output[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))
The loader and generation APIs depend on installed Unsloth/Transformers versions and available GPU memory. If loading an adapter repo directly is unsupported in your version, load the base checkpoint and attach the adapter with PEFT.
Evaluation scope and limitations
- No held-out quality benchmark yet: coherence, character consistency, illustration-text alignment, and age suitability have not been systematically scored.
- Very small benchmark: five prompts do not establish a reliable completion rate.
- Repetition: the model can loop on similar page text rather than ending naturally.
- Length control: prompts without an explicit page count may overrun.
- Text-only task adaptation: no evaluation of actual image generation or image understanding is claimed.
- Training scale: 30 steps are insufficient to establish convergence or generalization.
Next experiments
A controlled comparison against Qwen3.5-0.8B is planned, using the same prompts, decoding configuration, hardware, and evaluation rubric. Proposed measurements include story structure accuracy, completion/repetition rates, narrative quality, tokens/s, TTFT, latency, peak memory, and training convergence. No 0.8B results are claimed here.
Data, attribution, and licensing
- Base model:
unsloth/Qwen3.5-2B. Consult its model card and license for the underlying model.
- Training dataset:
Aiwensile2/StorySeed. Check its current license and derivative-use restrictions before redistributing or commercializing adapted weights. In particular, a NoDerivatives dataset license can raise separate questions from the base model’s license; the base model’s license alone does not resolve those questions.
Author
Shashank Vats · Hugging Face · GitHub