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
3Field order matches the tooltip top-to-bottom. Shape: {"name": string, "baseType": string|null, "category": "weapon"|"armor"|"shield"|"offhand"|"jewel"|"ring"|"amulet"|"charm"|"gem"|"rune"|"material"|"potion"|"consumable", "itemType": string|null, "quality": "crude"|"normal"|"superior", "rarity": "low"|"normal"|"magic"|"rare"|"set"|"unique"|"crafted", "runes": string|null, "damage": {"oneHand": {"min": integer, "max": integer}|null, "twoHand": {...}|null, "throw": {...}|null, "smite": {...}|null}|null, "defense": integer|null, "chanceToBlock": integer|null, "durability": {"current": integer, "max": integer}|null, "classRestriction": string|null, "requiredDexterity": integer|null, "requiredStrength": integer|null, "requiredLevel": integer|null, "attackSpeed": string|null, "mods": string[], "ethereal": boolean, "sockets": integer}
4
5Read EVERY digit — `+202%` is not `+2%`, `550` is not `55`. Never guess, complete, round, reorder, or fix spelling.
6
7Fields:
8- `name`: the item title (line 1). For a runeword, line 1 only — never append the base type.
9- `baseType`: the base-type line shown under the name (e.g. Ring, Great Helm, Phase Blade, Monarch). If the type is only baked into the name (no separate line), `baseType` = null.
10- `category`: the broad kind. weapon; shield (a blocking shield); offhand (a non-shield off-hand like a necromancer head / grimoire); armor (everything else worn); jewel/ring/amulet/charm; gem; rune (a loose rune); material (Essence/Shard/Statue/Token/Key/quest); potion; consumable (scroll/tome).
11- `itemType`: the finer slot / weapon class (e.g. Sword, Axe, Helm, Boots, Shield, Javelin, Bow, Orb). null for non-equipment.
12- `classRestriction`: the character class an item is limited to (Amazon/Sorceress/Necromancer/Paladin/Barbarian/Druid/Assassin/Warlock), shown as an "(X Only)" line — RED if the viewing character is a different class, WHITE if it matches; either way set the class name; else null.
13- `quality`: the base item tier, read from the NAME TEXT only — crude (name marked Cracked/Damaged/Low Quality/Crude), superior (name starts with "Superior"), else normal. Ignore the name COLOR here; default "normal" when no crude/superior word is present.
14- `rarity`: the NAME COLOR tier — low (gray, also ethereal/socketed-normal), normal (white), magic (blue), rare (yellow), set (green), unique (gold/tan), crafted (orange). Runewords show gold → unique. Materials/runes are usually orange → crafted. Read the actual name color carefully (gold vs yellow vs orange differ); always set it.
15- `ethereal`: true if the tooltip shows "Ethereal (Cannot Be Repaired)".
16- `sockets`: the N in "Socketed (N)", else 0.
17- `defense`: the number in "Defense: N", else null.
18- `chanceToBlock`: the number in "Chance to Block: N%", else null.
19- `durability`: from "Durability: X of Y" → {"current": X, "max": Y}, else null.
20- `damage`: from the white damage lines → set the matching key, others null. "Throw Damage: A to B" → throw; "One-Hand Damage" → oneHand; "Two-Hand Damage" → twoHand; "Smite Damage" → smite (paladin shields). An item may have more than one (a javelin has throw AND oneHand). null if no damage line.
21- `attackSpeed`: the verbatim "<Class> Class - <Speed> Attack Speed" line (e.g. "Javelin Class - Very Fast Attack Speed"), else null.
22- `runes`: for a runeword (a line in apostrophes like `'TalThul'`), the rune string without apostrophes; baseType = the base item line. Otherwise null.
23- `requiredLevel`/`requiredStrength`/`requiredDexterity`: from the "Required X: N" lines, else null.
24- `mods`: every REMAINING stat line, in order, verbatim (keep `+`, `-`, `%`, ranges like `15-45`, parentheses). These are the magical properties only (procs, auras, `+X to Skills`, resistances, `Adds A-B Fire Damage`, …). Do NOT put into mods anything already captured above (name, baseType, itemType, classRestriction line, quality, ethereal/socketed line, defense/chanceToBlock/durability/damage, attackSpeed line, the Required-* lines) or UI hints ("Keep in Inventory to Gain Bonus", "Ctrl + Left Click ...", "Right Click to Use").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": {"type": "string"},
5 "baseType": {"type": ["string", "null"]},
6 "category": {
7 "type": "string",
8 "enum": [
9 "weapon", "armor", "shield", "offhand", "jewel", "ring", "amulet",
10 "charm", "gem", "rune", "material", "potion", "consumable"
11 ]
12 },
13 "itemType": {"type": ["string", "null"]},
14 "quality": {
15 "type": "string",
16 "enum": ["crude", "normal", "superior"]
17 },
18 "rarity": {
19 "type": "string",
20 "enum": ["low", "normal", "magic", "rare", "set", "unique", "crafted"]
21 },
22 "runes": {"type": ["string", "null"]},
23 "damage": {
24 "type": ["object", "null"],
25 "properties": {
26 "oneHand": {"$ref": "#/$defs/range"},
27 "twoHand": {"$ref": "#/$defs/range"},
28 "throw": {"$ref": "#/$defs/range"},
29 "smite": {"$ref": "#/$defs/range"}
30 },
31 "required": ["oneHand", "twoHand", "throw", "smite"],
32 "additionalProperties": false
33 },
34 "defense": {"type": ["integer", "null"]},
35 "chanceToBlock": {"type": ["integer", "null"]},
36 "durability": {
37 "type": ["object", "null"],
38 "properties": {
39 "current": {"type": "integer"},
40 "max": {"type": "integer"}
41 },
42 "required": ["current", "max"],
43 "additionalProperties": false
44 },
45 "classRestriction": {"type": ["string", "null"]},
46 "requiredDexterity": {"type": ["integer", "null"]},
47 "requiredStrength": {"type": ["integer", "null"]},
48 "requiredLevel": {"type": ["integer", "null"]},
49 "attackSpeed": {"type": ["string", "null"]},
50 "mods": {"type": "array", "items": {"type": "string"}},
51 "ethereal": {"type": "boolean"},
52 "sockets": {"type": "integer"}
53 },
54 "required": [
55 "name", "baseType", "category", "itemType", "quality", "rarity", "runes",
56 "damage", "defense", "chanceToBlock", "durability", "classRestriction",
57 "requiredDexterity", "requiredStrength", "requiredLevel", "attackSpeed",
58 "mods", "ethereal", "sockets"
59 ],
60 "additionalProperties": false,
61 "$defs": {
62 "range": {
63 "type": ["object", "null"],
64 "properties": {
65 "min": {"type": "integer"},
66 "max": {"type": "integer"}
67 },
68 "required": ["min", "max"],
69 "additionalProperties": false
70 }
71 }
72}Note onrarity: rarity is essentially a function of the item-name color, which VLMs read unreliably (gold vs. yellow vs. orange are very close in hue). The model predicts it best-effort; for reliable results, treat it as a hint and prefer a pixel-based (HSV) color read of the name line.
1{
2 "name": "Raven Frost",
3 "baseType": "Ring",
4 "category": "ring",
5 "itemType": null,
6 "quality": "normal",
7 "rarity": "unique",
8 "runes": null,
9 "damage": null,
10 "defense": null,
11 "chanceToBlock": null,
12 "durability": null,
13 "classRestriction": null,
14 "requiredDexterity": null,
15 "requiredStrength": null,
16 "requiredLevel": 45,
17 "attackSpeed": null,
18 "mods": ["+221 to Attack Rating", "Adds 15-45 Cold Damage", "+18 to Dexterity", "+40 to Mana", "Cold Absorb 20%", "Cannot Be Frozen"],
19 "ethereal": false,
20 "sockets": 0
21}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": 18, "max": 40}, "throw": null, "smite": null},
10 "defense": null,
11 "chanceToBlock": null,
12 "durability": {"current": 65, "max": 65},
13 "classRestriction": null,
14 "requiredDexterity": null,
15 "requiredStrength": 87,
16 "requiredLevel": 27,
17 "attackSpeed": null,
18 "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"],
19 "ethereal": false,
20 "sockets": 4
21}1{
2 "name": "Harpoonist's Grand Charm of Sustenance",
3 "baseType": "Grand Charm",
4 "category": "charm",
5 "itemType": null,
6 "quality": "normal",
7 "rarity": "magic",
8 "runes": null,
9 "damage": null,
10 "defense": null,
11 "chanceToBlock": null,
12 "durability": null,
13 "classRestriction": null,
14 "requiredDexterity": null,
15 "requiredStrength": null,
16 "requiredLevel": 42,
17 "attackSpeed": null,
18 "mods": ["+2 to Javelin and Spear Skills (Amazon Only)", "+38 to Life"],
19 "ethereal": false,
20 "sockets": 0
21}SFTTrainer, LoRA on vision and language layers.temperature = 0,
constraining the response to the JSON schema.Qwen/Qwen3-VL-4B-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.