Views
No views yet
temperature = 0) and constrain the output to the JSON schema below.Extract the item from this tooltip.1Transcribe the single Diablo II: Resurrected item tooltip in the image into one JSON object. Read it line by line, top to bottom. Output only the JSON.
2
3A tooltip is a stack of lines, e.g.:
4
5```
6Viper Bite ← line 1: the item name (rare → a random made-up name)
7Colossus Blade ← line 2: the base type (present on rare/set/unique/crafted/runeword items)
8Two-Hand Damage: 70 to 198 ← base stats: damage / defense / chanceToBlock / durability / quantity
9Durability: 14 of 14
10Required Dexterity: 110 ← required* lines
11Required Strength: 189
12Required Level: 67
13Sword Class - Slow Attack Speed ← attackSpeed line (verbatim)
14+180% Enhanced Damage ← mods: every remaining magical stat line, in order
15+25 to Maximum Damage
16Adds 15-30 Fire Damage
178% Life Stolen Per Hit
18+20 to Strength
19+30 to Life
20Ethereal (Cannot Be Repaired) ← sets ethereal = true
21Socketed (2) ← sets sockets = 2
22```
23
24Read EVERY digit exactly — `+202%` is not `+2%`, `550` is not `55`. Never guess, complete, round, reorder, or fix spelling.
25
26`baseType` — where the item's base (e.g. Long Sword, Monarch, Ring) comes from depends on the rarity:
27- normal, superior, low (gray) and magic items have NO separate base line; the base is inside line 1 (the name). Strip any leading quality word (Superior / Cracked / Damaged / Low Quality / Crude); for magic the base sits between prefix and suffix: `<Prefix> <BaseType> <Suffix>`, e.g. "Cruel Long Sword of Maiming" → "Long Sword".
28- all other rarities (rare, set, unique, crafted, and runewords) give the item a unique made-up name on line 1; the base is the separate line 2 — that goes in `baseType`. For a runeword, also put the rune sequence shown in apostrophes (e.g. `'TalThul'`) into `runes`.
29
30`quality` and `rarity` are two different things:
31- `quality` = base tier, read from the NAME TEXT only: crude (name says Cracked/Damaged/Low Quality/Crude), superior (name starts with "Superior"), else normal. Ignore the color here.
32- `rarity` = the NAME COLOR: low (gray), normal (white), magic (blue), rare (yellow), set (green), unique (gold/tan), crafted (orange). Runewords are unique.
33
34`beltSize` = the integer N in a "Belt Size: +N Slots" line (belts only) — its own field, NOT a mod; null otherwise.
35
36`mods` = every REMAINING stat line, verbatim and in order (keep `+`, `-`, `%`, ranges like `15-45`, parentheses). Do NOT include anything already captured in another field (name, baseType, damage, defense, chanceToBlock, beltSize, durability, quantity, required* lines, attackSpeed, the ethereal/socketed line, the class-restriction line) or UI hints ("Ctrl + Left Click ...", "Right Click to Use", "Keep in Inventory to Gain Bonus").response_format → json_schema, strict: true). Field
order mirrors the in-game top-to-bottom reading order.1{
2 "type": "object",
3 "properties": {
4 "name": {
5 "type": "string"
6 },
7 "baseType": {
8 "type": [
9 "string",
10 "null"
11 ]
12 },
13 "category": {
14 "type": "string",
15 "enum": [
16 "weapon",
17 "armor",
18 "shield",
19 "offhand",
20 "jewel",
21 "ring",
22 "amulet",
23 "charm",
24 "gem",
25 "rune",
26 "material",
27 "potion",
28 "consumable"
29 ]
30 },
31 "itemType": {
32 "type": [
33 "string",
34 "null"
35 ]
36 },
37 "quality": {
38 "type": "string",
39 "enum": [
40 "crude",
41 "normal",
42 "superior"
43 ]
44 },
45 "rarity": {
46 "type": "string",
47 "enum": [
48 "low",
49 "normal",
50 "magic",
51 "rare",
52 "set",
53 "unique",
54 "crafted"
55 ]
56 },
57 "runes": {
58 "type": [
59 "string",
60 "null"
61 ]
62 },
63 "damage": {
64 "type": [
65 "object",
66 "null"
67 ],
68 "properties": {
69 "oneHand": {
70 "$ref": "#/$defs/range"
71 },
72 "twoHand": {
73 "$ref": "#/$defs/range"
74 },
75 "throw": {
76 "$ref": "#/$defs/range"
77 },
78 "smite": {
79 "$ref": "#/$defs/range"
80 }
81 },
82 "required": [
83 "oneHand",
84 "twoHand",
85 "throw",
86 "smite"
87 ],
88 "additionalProperties": false
89 },
90 "defense": {
91 "type": [
92 "integer",
93 "null"
94 ]
95 },
96 "chanceToBlock": {
97 "type": [
98 "integer",
99 "null"
100 ]
101 },
102 "beltSize": {
103 "type": [
104 "integer",
105 "null"
106 ]
107 },
108 "durability": {
109 "type": [
110 "object",
111 "null"
112 ],
113 "properties": {
114 "current": {
115 "type": "integer"
116 },
117 "max": {
118 "type": "integer"
119 }
120 },
121 "required": [
122 "current",
123 "max"
124 ],
125 "additionalProperties": false
126 },
127 "quantity": {
128 "type": [
129 "object",
130 "null"
131 ],
132 "properties": {
133 "current": {
134 "type": "integer"
135 },
136 "max": {
137 "type": "integer"
138 }
139 },
140 "required": [
141 "current",
142 "max"
143 ],
144 "additionalProperties": false
145 },
146 "classRestriction": {
147 "type": [
148 "string",
149 "null"
150 ]
151 },
152 "requiredDexterity": {
153 "type": [
154 "integer",
155 "null"
156 ]
157 },
158 "requiredStrength": {
159 "type": [
160 "integer",
161 "null"
162 ]
163 },
164 "requiredLevel": {
165 "type": [
166 "integer",
167 "null"
168 ]
169 },
170 "attackSpeed": {
171 "type": [
172 "string",
173 "null"
174 ]
175 },
176 "mods": {
177 "type": "array",
178 "items": {
179 "type": "string"
180 }
181 },
182 "ethereal": {
183 "type": "boolean"
184 },
185 "sockets": {
186 "type": "integer"
187 }
188 },
189 "required": [
190 "name",
191 "baseType",
192 "category",
193 "itemType",
194 "quality",
195 "rarity",
196 "runes",
197 "damage",
198 "defense",
199 "chanceToBlock",
200 "beltSize",
201 "durability",
202 "quantity",
203 "classRestriction",
204 "requiredDexterity",
205 "requiredStrength",
206 "requiredLevel",
207 "attackSpeed",
208 "mods",
209 "ethereal",
210 "sockets"
211 ],
212 "additionalProperties": false,
213 "$defs": {
214 "range": {
215 "type": [
216 "object",
217 "null"
218 ],
219 "properties": {
220 "min": {
221 "type": "integer"
222 },
223 "max": {
224 "type": "integer"
225 }
226 },
227 "required": [
228 "min",
229 "max"
230 ],
231 "additionalProperties": false
232 }
233 }
234}Note onrarity: rarity is a function of the item-name color (gold vs. yellow vs. orange are close in hue). The model is trained on it and predicts it directly — treat the model output as the primary source. A pixel-based (HSV) color read of the name line is a useful fallback when the model is uncertain.
1{
2 "name": "Raven Frost",
3 "baseType": "Ring",
4 "category": "ring",
5 "itemType": "Ring",
6 "quality": "normal",
7 "rarity": "unique",
8 "runes": null,
9 "damage": null,
10 "defense": null,
11 "chanceToBlock": null,
12 "beltSize": null,
13 "durability": null,
14 "quantity": null,
15 "classRestriction": null,
16 "requiredDexterity": null,
17 "requiredStrength": null,
18 "requiredLevel": 45,
19 "attackSpeed": null,
20 "mods": ["+221 to Attack Rating", "Adds 15-45 Cold Damage", "+18 to Dexterity", "+40 to Mana", "Cold Absorb 20%", "Cannot Be Frozen"],
21 "ethereal": false,
22 "sockets": 0
23}1{
2 "name": "Insight",
3 "baseType": "Scythe",
4 "category": "weapon",
5 "itemType": "Polearm",
6 "quality": "normal",
7 "rarity": "unique",
8 "runes": "RalTirTalSol",
9 "damage": {"oneHand": null, "twoHand": {"min": 71, "max": 138}, "throw": null, "smite": null},
10 "defense": null,
11 "chanceToBlock": null,
12 "beltSize": null,
13 "durability": {"current": 65, "max": 65},
14 "quantity": null,
15 "classRestriction": null,
16 "requiredDexterity": null,
17 "requiredStrength": 87,
18 "requiredLevel": 27,
19 "attackSpeed": null,
20 "mods": ["Level 15 Meditation Aura When Equipped", "+35% Faster Cast Rate", "+247% Enhanced Damage", "+9 to Minimum Damage", "213% Bonus to Attack Rating", "Adds 5-30 Fire Damage", "+75 Poison Damage Over 5 Seconds", "+5 to Critical Strike", "+5 to All Attributes", "+2 to Mana After Each Kill", "23% Better Chance of Getting Magic Items"],
21 "ethereal": false,
22 "sockets": 4
23}1{
2 "name": "Harpoonist's Grand Charm of Sustenance",
3 "baseType": "Grand Charm",
4 "category": "charm",
5 "itemType": "Charm",
6 "quality": "normal",
7 "rarity": "magic",
8 "runes": null,
9 "damage": null,
10 "defense": null,
11 "chanceToBlock": null,
12 "beltSize": null,
13 "durability": null,
14 "quantity": null,
15 "classRestriction": null,
16 "requiredDexterity": null,
17 "requiredStrength": null,
18 "requiredLevel": 42,
19 "attackSpeed": null,
20 "mods": ["+1 to Javelin and Spear Skills (Amazon Only)", "+38 to Life"],
21 "ethereal": false,
22 "sockets": 0
23}SFTTrainer, LoRA on vision and language layers.temperature = 0,
constraining the response to the JSON schema.unsloth/Qwen3-VL-2B-Instruct before
redistribution). Diablo II: Resurrected and all related assets/trademarks belong
to Blizzard Entertainment; this is an unofficial, fan-made model with no
affiliation or endorsement.d2data project for the game-data tables used to generate the
synthetic training data.