Unofficial hobby project — NOT made by Godot. Godoter is a personal, non-commercial fine-tune made by an independent hobbyist for fun and learning. It is not made, created, maintained, affiliated with, sponsored by, or endorsed by the Godot Foundation or the Godot Engine team. "Godot" is a trademark of the Godot Foundation, used here only to describe what the model is for. Training data includes the official Godot documentation (CC-BY 4.0); the base model is Qwen3.6-27B (Apache 2.0).
The point of Godoter is reliability in one domain. A general model knows a bit of Godot, but under pressure it drifts to the wrong engine or mixes up the deprecated Godot 3 API with Godot 4. Godoter stays anchored: it answers in Godot 4 GDScript, every time, and it doesn't confuse versions.
@export/@onready, await, typed code).move_and_slide(), instantiate(), CharacterBody2D/3D, source_color, FileAccess, signal .connect()/.emit(), @rpc, …).| Test | Base Qwen3.6-27B | Godoter |
|---|---|---|
| Easy tasks (Godot 4 migration traps) | 80% | 100% |
| Hard tasks (advanced Godot 4) | 68% | 96% |

unsloth/Qwen3.6-27Br = 16, alpha = 16, adamw_8bit, 4-bit base — adapter then merged to 16-bit.qwen3_5 / Qwen3.6 architecture model — it needs transformers 5.x.1from transformers import AutoModelForCausalLM, AutoTokenizer
2import torch
3
4tok = AutoTokenizer.from_pretrained("Ruler97/Godoter-27B")
5model = AutoModelForCausalLM.from_pretrained(
6 "Ruler97/Godoter-27B", torch_dtype=torch.bfloat16, device_map="auto")
7
8msgs = [{"role": "user", "content": "In Godot 4, make a CharacterBody2D move with the arrow keys."}]
9ids = tok.apply_chat_template(msgs, add_generation_prompt=True, return_tensors="pt").to(model.device)
10out = model.generate(ids, max_new_tokens=512)
11print(tok.decode(out[0][ids.shape[1]:], skip_special_tokens=True))