Denis Lebedev commited on
Commit
87acbba
·
unverified ·
1 Parent(s): a8f84ca

Commit the app

Browse files
Files changed (10) hide show
  1. .gitignore +3 -0
  2. app.py +17 -0
  3. data/dsk_cards.json +0 -0
  4. data/dsk_lands.json +1849 -0
  5. models/model.pkl +3 -0
  6. src/__init__.py +0 -0
  7. src/interface.py +27 -0
  8. src/mtga.py +20 -0
  9. src/predictor.py +41 -0
  10. src/utils.py +14 -0
.gitignore ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ __pycache__/
2
+ *.pyc
3
+ .ipynb_checkpoints/
app.py ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from src.predictor import MTGPickPredictor
2
+ from src.interface import create_interface
3
+ from src.utils import top_k_accuracy
4
+
5
+ # TODO: find a cleaner way to define helper function required for the model
6
+ top_3_accuracy = lambda o, t: top_k_accuracy(o, t, k=3)
7
+
8
+ def main():
9
+ # Initialize predictor
10
+ predictor = MTGPickPredictor()
11
+
12
+ # Create and launch interface
13
+ demo = create_interface(predictor)
14
+ demo.launch(share=True)
15
+
16
+ if __name__ == "__main__":
17
+ main()
data/dsk_cards.json ADDED
The diff for this file is too large to render. See raw diff
 
data/dsk_lands.json ADDED
@@ -0,0 +1,1849 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "object": "list",
4
+ "total_cards": 15,
5
+ "has_more": false,
6
+ "data": [
7
+ {
8
+ "object": "card",
9
+ "id": "e84c0880-728d-4ac2-b685-4f18f66c24db",
10
+ "oracle_id": "b34bb2dc-c1af-4d77-b0b3-a0fb342a5fc6",
11
+ "multiverse_ids": [672922],
12
+ "mtgo_id": 130691,
13
+ "arena_id": 92380,
14
+ "tcgplayer_id": 576516,
15
+ "name": "Forest",
16
+ "lang": "en",
17
+ "released_at": "2024-09-27",
18
+ "uri": "https://api.scryfall.com/cards/e84c0880-728d-4ac2-b685-4f18f66c24db",
19
+ "scryfall_uri": "https://scryfall.com/card/dsk/285/forest?utm_source=api",
20
+ "layout": "normal",
21
+ "highres_image": true,
22
+ "image_status": "highres_scan",
23
+ "image_uris": {
24
+ "small": "https://cards.scryfall.io/small/front/e/8/e84c0880-728d-4ac2-b685-4f18f66c24db.jpg?1726286938",
25
+ "normal": "https://cards.scryfall.io/normal/front/e/8/e84c0880-728d-4ac2-b685-4f18f66c24db.jpg?1726286938",
26
+ "large": "https://cards.scryfall.io/large/front/e/8/e84c0880-728d-4ac2-b685-4f18f66c24db.jpg?1726286938",
27
+ "png": "https://cards.scryfall.io/png/front/e/8/e84c0880-728d-4ac2-b685-4f18f66c24db.png?1726286938",
28
+ "art_crop": "https://cards.scryfall.io/art_crop/front/e/8/e84c0880-728d-4ac2-b685-4f18f66c24db.jpg?1726286938",
29
+ "border_crop": "https://cards.scryfall.io/border_crop/front/e/8/e84c0880-728d-4ac2-b685-4f18f66c24db.jpg?1726286938"
30
+ },
31
+ "mana_cost": "",
32
+ "cmc": 0,
33
+ "type_line": "Basic Land — Forest",
34
+ "oracle_text": "({T}: Add {G}.)",
35
+ "colors": [],
36
+ "color_identity": [
37
+ "G"
38
+ ],
39
+ "keywords": [],
40
+ "produced_mana": [
41
+ "G"
42
+ ],
43
+ "legalities": {
44
+ "standard": "legal",
45
+ "future": "legal",
46
+ "historic": "legal",
47
+ "timeless": "legal",
48
+ "gladiator": "legal",
49
+ "pioneer": "legal",
50
+ "explorer": "legal",
51
+ "modern": "legal",
52
+ "legacy": "legal",
53
+ "pauper": "legal",
54
+ "vintage": "legal",
55
+ "penny": "legal",
56
+ "commander": "legal",
57
+ "oathbreaker": "legal",
58
+ "standardbrawl": "legal",
59
+ "brawl": "legal",
60
+ "alchemy": "legal",
61
+ "paupercommander": "legal",
62
+ "duel": "legal",
63
+ "oldschool": "not_legal",
64
+ "premodern": "legal",
65
+ "predh": "legal"
66
+ },
67
+ "games": [
68
+ "paper",
69
+ "mtgo",
70
+ "arena"
71
+ ],
72
+ "reserved": false,
73
+ "foil": true,
74
+ "nonfoil": true,
75
+ "finishes": [
76
+ "nonfoil",
77
+ "foil"
78
+ ],
79
+ "oversized": false,
80
+ "promo": false,
81
+ "reprint": true,
82
+ "variation": false,
83
+ "set_id": "a111d8a9-b647-48ec-afab-2b78f92173f5",
84
+ "set": "dsk",
85
+ "set_name": "Duskmourn: House of Horror",
86
+ "set_type": "expansion",
87
+ "set_uri": "https://api.scryfall.com/sets/a111d8a9-b647-48ec-afab-2b78f92173f5",
88
+ "set_search_uri": "https://api.scryfall.com/cards/search?order=set&q=e%3Adsk&unique=prints",
89
+ "scryfall_set_uri": "https://scryfall.com/sets/dsk?utm_source=api",
90
+ "rulings_uri": "https://api.scryfall.com/cards/e84c0880-728d-4ac2-b685-4f18f66c24db/rulings",
91
+ "prints_search_uri": "https://api.scryfall.com/cards/search?order=released&q=oracleid%3Ab34bb2dc-c1af-4d77-b0b3-a0fb342a5fc6&unique=prints",
92
+ "collector_number": "285",
93
+ "digital": false,
94
+ "rarity": "common",
95
+ "card_back_id": "0aeebaf5-8c7d-4636-9e82-8c27447861f7",
96
+ "artist": "Martin de Diego Sádaba",
97
+ "artist_ids": [
98
+ "bc760b5e-6f98-4a17-9b12-5f4eccd12bb2"
99
+ ],
100
+ "illustration_id": "54598a62-041e-47c6-bea6-7385e845fdef",
101
+ "border_color": "black",
102
+ "frame": "2015",
103
+ "full_art": false,
104
+ "textless": false,
105
+ "booster": true,
106
+ "story_spotlight": false,
107
+ "preview": {
108
+ "source": "Wizards of the Coast",
109
+ "source_uri": "",
110
+ "previewed_at": "2024-09-06"
111
+ },
112
+ "prices": {
113
+ "usd": "0.07",
114
+ "usd_foil": "0.09",
115
+ "usd_etched": null,
116
+ "eur": null,
117
+ "eur_foil": null,
118
+ "tix": "0.01"
119
+ },
120
+ "related_uris": {
121
+ "gatherer": "https://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=672922&printed=false",
122
+ "tcgplayer_infinite_articles": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Darticle%26game%3Dmagic%26partner%3Dscryfall%26q%3DForest",
123
+ "tcgplayer_infinite_decks": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Ddeck%26game%3Dmagic%26partner%3Dscryfall%26q%3DForest",
124
+ "edhrec": "https://edhrec.com/route/?cc=Forest"
125
+ },
126
+ "purchase_uris": {
127
+ "tcgplayer": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&u=https%3A%2F%2Fwww.tcgplayer.com%2Fproduct%2F576516%3Fpage%3D1",
128
+ "cardmarket": "https://www.cardmarket.com/en/Magic/Products/Search?referrer=scryfall&searchString=Forest&utm_campaign=card_prices&utm_medium=text&utm_source=scryfall",
129
+ "cardhoarder": "https://www.cardhoarder.com/cards/130691?affiliate_id=scryfall&ref=card-profile&utm_campaign=affiliate&utm_medium=card&utm_source=scryfall"
130
+ }
131
+ },
132
+ {
133
+ "object": "card",
134
+ "id": "0da5fbc2-24ad-4520-a60a-436d3a485fec",
135
+ "oracle_id": "b34bb2dc-c1af-4d77-b0b3-a0fb342a5fc6",
136
+ "multiverse_ids": [672923],
137
+ "mtgo_id": 130693,
138
+ "arena_id": 92381,
139
+ "tcgplayer_id": 576517,
140
+ "name": "Forest",
141
+ "lang": "en",
142
+ "released_at": "2024-09-27",
143
+ "uri": "https://api.scryfall.com/cards/0da5fbc2-24ad-4520-a60a-436d3a485fec",
144
+ "scryfall_uri": "https://scryfall.com/card/dsk/286/forest?utm_source=api",
145
+ "layout": "normal",
146
+ "highres_image": true,
147
+ "image_status": "highres_scan",
148
+ "image_uris": {
149
+ "small": "https://cards.scryfall.io/small/front/0/d/0da5fbc2-24ad-4520-a60a-436d3a485fec.jpg?1726286943",
150
+ "normal": "https://cards.scryfall.io/normal/front/0/d/0da5fbc2-24ad-4520-a60a-436d3a485fec.jpg?1726286943",
151
+ "large": "https://cards.scryfall.io/large/front/0/d/0da5fbc2-24ad-4520-a60a-436d3a485fec.jpg?1726286943",
152
+ "png": "https://cards.scryfall.io/png/front/0/d/0da5fbc2-24ad-4520-a60a-436d3a485fec.png?1726286943",
153
+ "art_crop": "https://cards.scryfall.io/art_crop/front/0/d/0da5fbc2-24ad-4520-a60a-436d3a485fec.jpg?1726286943",
154
+ "border_crop": "https://cards.scryfall.io/border_crop/front/0/d/0da5fbc2-24ad-4520-a60a-436d3a485fec.jpg?1726286943"
155
+ },
156
+ "mana_cost": "",
157
+ "cmc": 0,
158
+ "type_line": "Basic Land — Forest",
159
+ "oracle_text": "({T}: Add {G}.)",
160
+ "colors": [],
161
+ "color_identity": [
162
+ "G"
163
+ ],
164
+ "keywords": [],
165
+ "produced_mana": [
166
+ "G"
167
+ ],
168
+ "legalities": {
169
+ "standard": "legal",
170
+ "future": "legal",
171
+ "historic": "legal",
172
+ "timeless": "legal",
173
+ "gladiator": "legal",
174
+ "pioneer": "legal",
175
+ "explorer": "legal",
176
+ "modern": "legal",
177
+ "legacy": "legal",
178
+ "pauper": "legal",
179
+ "vintage": "legal",
180
+ "penny": "legal",
181
+ "commander": "legal",
182
+ "oathbreaker": "legal",
183
+ "standardbrawl": "legal",
184
+ "brawl": "legal",
185
+ "alchemy": "legal",
186
+ "paupercommander": "legal",
187
+ "duel": "legal",
188
+ "oldschool": "not_legal",
189
+ "premodern": "legal",
190
+ "predh": "legal"
191
+ },
192
+ "games": [
193
+ "paper",
194
+ "mtgo",
195
+ "arena"
196
+ ],
197
+ "reserved": false,
198
+ "foil": true,
199
+ "nonfoil": true,
200
+ "finishes": [
201
+ "nonfoil",
202
+ "foil"
203
+ ],
204
+ "oversized": false,
205
+ "promo": false,
206
+ "reprint": true,
207
+ "variation": false,
208
+ "set_id": "a111d8a9-b647-48ec-afab-2b78f92173f5",
209
+ "set": "dsk",
210
+ "set_name": "Duskmourn: House of Horror",
211
+ "set_type": "expansion",
212
+ "set_uri": "https://api.scryfall.com/sets/a111d8a9-b647-48ec-afab-2b78f92173f5",
213
+ "set_search_uri": "https://api.scryfall.com/cards/search?order=set&q=e%3Adsk&unique=prints",
214
+ "scryfall_set_uri": "https://scryfall.com/sets/dsk?utm_source=api",
215
+ "rulings_uri": "https://api.scryfall.com/cards/0da5fbc2-24ad-4520-a60a-436d3a485fec/rulings",
216
+ "prints_search_uri": "https://api.scryfall.com/cards/search?order=released&q=oracleid%3Ab34bb2dc-c1af-4d77-b0b3-a0fb342a5fc6&unique=prints",
217
+ "collector_number": "286",
218
+ "digital": false,
219
+ "rarity": "common",
220
+ "card_back_id": "0aeebaf5-8c7d-4636-9e82-8c27447861f7",
221
+ "artist": "Josu Hernaiz",
222
+ "artist_ids": [
223
+ "74246024-92b4-43d0-a5af-a3f9f2a35d5f"
224
+ ],
225
+ "illustration_id": "b816b5fa-6745-46da-9e0a-289b9192e83d",
226
+ "border_color": "black",
227
+ "frame": "2015",
228
+ "full_art": false,
229
+ "textless": false,
230
+ "booster": true,
231
+ "story_spotlight": false,
232
+ "prices": {
233
+ "usd": "0.05",
234
+ "usd_foil": "0.12",
235
+ "usd_etched": null,
236
+ "eur": null,
237
+ "eur_foil": null,
238
+ "tix": "0.01"
239
+ },
240
+ "related_uris": {
241
+ "gatherer": "https://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=672923&printed=false",
242
+ "tcgplayer_infinite_articles": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Darticle%26game%3Dmagic%26partner%3Dscryfall%26q%3DForest",
243
+ "tcgplayer_infinite_decks": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Ddeck%26game%3Dmagic%26partner%3Dscryfall%26q%3DForest",
244
+ "edhrec": "https://edhrec.com/route/?cc=Forest"
245
+ },
246
+ "purchase_uris": {
247
+ "tcgplayer": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&u=https%3A%2F%2Fwww.tcgplayer.com%2Fproduct%2F576517%3Fpage%3D1",
248
+ "cardmarket": "https://www.cardmarket.com/en/Magic/Products/Search?referrer=scryfall&searchString=Forest&utm_campaign=card_prices&utm_medium=text&utm_source=scryfall",
249
+ "cardhoarder": "https://www.cardhoarder.com/cards/130693?affiliate_id=scryfall&ref=card-profile&utm_campaign=affiliate&utm_medium=card&utm_source=scryfall"
250
+ }
251
+ },
252
+ {
253
+ "object": "card",
254
+ "id": "ba2a4cbb-f325-4178-80db-7090f5672414",
255
+ "oracle_id": "b34bb2dc-c1af-4d77-b0b3-a0fb342a5fc6",
256
+ "multiverse_ids": [672888],
257
+ "mtgo_id": 130703,
258
+ "arena_id": 92386,
259
+ "tcgplayer_id": 557262,
260
+ "cardmarket_id": 786631,
261
+ "name": "Forest",
262
+ "lang": "en",
263
+ "released_at": "2024-09-27",
264
+ "uri": "https://api.scryfall.com/cards/ba2a4cbb-f325-4178-80db-7090f5672414",
265
+ "scryfall_uri": "https://scryfall.com/card/dsk/276/forest?utm_source=api",
266
+ "layout": "normal",
267
+ "highres_image": true,
268
+ "image_status": "highres_scan",
269
+ "image_uris": {
270
+ "small": "https://cards.scryfall.io/small/front/b/a/ba2a4cbb-f325-4178-80db-7090f5672414.jpg?1726286905",
271
+ "normal": "https://cards.scryfall.io/normal/front/b/a/ba2a4cbb-f325-4178-80db-7090f5672414.jpg?1726286905",
272
+ "large": "https://cards.scryfall.io/large/front/b/a/ba2a4cbb-f325-4178-80db-7090f5672414.jpg?1726286905",
273
+ "png": "https://cards.scryfall.io/png/front/b/a/ba2a4cbb-f325-4178-80db-7090f5672414.png?1726286905",
274
+ "art_crop": "https://cards.scryfall.io/art_crop/front/b/a/ba2a4cbb-f325-4178-80db-7090f5672414.jpg?1726286905",
275
+ "border_crop": "https://cards.scryfall.io/border_crop/front/b/a/ba2a4cbb-f325-4178-80db-7090f5672414.jpg?1726286905"
276
+ },
277
+ "mana_cost": "",
278
+ "cmc": 0,
279
+ "type_line": "Basic Land — Forest",
280
+ "oracle_text": "({T}: Add {G}.)",
281
+ "colors": [],
282
+ "color_identity": [
283
+ "G"
284
+ ],
285
+ "keywords": [],
286
+ "produced_mana": [
287
+ "G"
288
+ ],
289
+ "legalities": {
290
+ "standard": "legal",
291
+ "future": "legal",
292
+ "historic": "legal",
293
+ "timeless": "legal",
294
+ "gladiator": "legal",
295
+ "pioneer": "legal",
296
+ "explorer": "legal",
297
+ "modern": "legal",
298
+ "legacy": "legal",
299
+ "pauper": "legal",
300
+ "vintage": "legal",
301
+ "penny": "legal",
302
+ "commander": "legal",
303
+ "oathbreaker": "legal",
304
+ "standardbrawl": "legal",
305
+ "brawl": "legal",
306
+ "alchemy": "legal",
307
+ "paupercommander": "legal",
308
+ "duel": "legal",
309
+ "oldschool": "not_legal",
310
+ "premodern": "legal",
311
+ "predh": "legal"
312
+ },
313
+ "games": [
314
+ "paper",
315
+ "mtgo",
316
+ "arena"
317
+ ],
318
+ "reserved": false,
319
+ "foil": true,
320
+ "nonfoil": true,
321
+ "finishes": [
322
+ "nonfoil",
323
+ "foil"
324
+ ],
325
+ "oversized": false,
326
+ "promo": false,
327
+ "reprint": true,
328
+ "variation": false,
329
+ "set_id": "a111d8a9-b647-48ec-afab-2b78f92173f5",
330
+ "set": "dsk",
331
+ "set_name": "Duskmourn: House of Horror",
332
+ "set_type": "expansion",
333
+ "set_uri": "https://api.scryfall.com/sets/a111d8a9-b647-48ec-afab-2b78f92173f5",
334
+ "set_search_uri": "https://api.scryfall.com/cards/search?order=set&q=e%3Adsk&unique=prints",
335
+ "scryfall_set_uri": "https://scryfall.com/sets/dsk?utm_source=api",
336
+ "rulings_uri": "https://api.scryfall.com/cards/ba2a4cbb-f325-4178-80db-7090f5672414/rulings",
337
+ "prints_search_uri": "https://api.scryfall.com/cards/search?order=released&q=oracleid%3Ab34bb2dc-c1af-4d77-b0b3-a0fb342a5fc6&unique=prints",
338
+ "collector_number": "276",
339
+ "digital": false,
340
+ "rarity": "common",
341
+ "card_back_id": "0aeebaf5-8c7d-4636-9e82-8c27447861f7",
342
+ "artist": "Dan Mumford",
343
+ "artist_ids": [
344
+ "266fe58e-bcd6-4294-8e42-0a234ed9fb8d"
345
+ ],
346
+ "illustration_id": "0d04bc51-7ff8-46d3-a6f0-80f8bb9c8dbb",
347
+ "border_color": "black",
348
+ "frame": "2015",
349
+ "full_art": true,
350
+ "textless": false,
351
+ "booster": true,
352
+ "story_spotlight": false,
353
+ "prices": {
354
+ "usd": "0.34",
355
+ "usd_foil": "0.29",
356
+ "usd_etched": null,
357
+ "eur": "0.32",
358
+ "eur_foil": "0.25",
359
+ "tix": "0.01"
360
+ },
361
+ "related_uris": {
362
+ "gatherer": "https://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=672888&printed=false",
363
+ "tcgplayer_infinite_articles": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Darticle%26game%3Dmagic%26partner%3Dscryfall%26q%3DForest",
364
+ "tcgplayer_infinite_decks": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Ddeck%26game%3Dmagic%26partner%3Dscryfall%26q%3DForest",
365
+ "edhrec": "https://edhrec.com/route/?cc=Forest"
366
+ },
367
+ "purchase_uris": {
368
+ "tcgplayer": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&u=https%3A%2F%2Fwww.tcgplayer.com%2Fproduct%2F557262%3Fpage%3D1",
369
+ "cardmarket": "https://www.cardmarket.com/en/Magic/Products/Singles/Duskmourn-House-of-Horror/Forest?referrer=scryfall&utm_campaign=card_prices&utm_medium=text&utm_source=scryfall",
370
+ "cardhoarder": "https://www.cardhoarder.com/cards/130703?affiliate_id=scryfall&ref=card-profile&utm_campaign=affiliate&utm_medium=card&utm_source=scryfall"
371
+ }
372
+ },
373
+ {
374
+ "object": "card",
375
+ "id": "947702ca-d065-4368-9f26-f859d4642cb6",
376
+ "oracle_id": "b2c6aa39-2d2a-459c-a555-fb48ba993373",
377
+ "multiverse_ids": [672916],
378
+ "mtgo_id": 130679,
379
+ "arena_id": 92374,
380
+ "tcgplayer_id": 576522,
381
+ "name": "Island",
382
+ "lang": "en",
383
+ "released_at": "2024-09-27",
384
+ "uri": "https://api.scryfall.com/cards/947702ca-d065-4368-9f26-f859d4642cb6",
385
+ "scryfall_uri": "https://scryfall.com/card/dsk/279/island?utm_source=api",
386
+ "layout": "normal",
387
+ "highres_image": true,
388
+ "image_status": "highres_scan",
389
+ "image_uris": {
390
+ "small": "https://cards.scryfall.io/small/front/9/4/947702ca-d065-4368-9f26-f859d4642cb6.jpg?1726286915",
391
+ "normal": "https://cards.scryfall.io/normal/front/9/4/947702ca-d065-4368-9f26-f859d4642cb6.jpg?1726286915",
392
+ "large": "https://cards.scryfall.io/large/front/9/4/947702ca-d065-4368-9f26-f859d4642cb6.jpg?1726286915",
393
+ "png": "https://cards.scryfall.io/png/front/9/4/947702ca-d065-4368-9f26-f859d4642cb6.png?1726286915",
394
+ "art_crop": "https://cards.scryfall.io/art_crop/front/9/4/947702ca-d065-4368-9f26-f859d4642cb6.jpg?1726286915",
395
+ "border_crop": "https://cards.scryfall.io/border_crop/front/9/4/947702ca-d065-4368-9f26-f859d4642cb6.jpg?1726286915"
396
+ },
397
+ "mana_cost": "",
398
+ "cmc": 0,
399
+ "type_line": "Basic Land — Island",
400
+ "oracle_text": "({T}: Add {U}.)",
401
+ "colors": [],
402
+ "color_identity": [
403
+ "U"
404
+ ],
405
+ "keywords": [],
406
+ "produced_mana": [
407
+ "U"
408
+ ],
409
+ "legalities": {
410
+ "standard": "legal",
411
+ "future": "legal",
412
+ "historic": "legal",
413
+ "timeless": "legal",
414
+ "gladiator": "legal",
415
+ "pioneer": "legal",
416
+ "explorer": "legal",
417
+ "modern": "legal",
418
+ "legacy": "legal",
419
+ "pauper": "legal",
420
+ "vintage": "legal",
421
+ "penny": "legal",
422
+ "commander": "legal",
423
+ "oathbreaker": "legal",
424
+ "standardbrawl": "legal",
425
+ "brawl": "legal",
426
+ "alchemy": "legal",
427
+ "paupercommander": "legal",
428
+ "duel": "legal",
429
+ "oldschool": "not_legal",
430
+ "premodern": "legal",
431
+ "predh": "legal"
432
+ },
433
+ "games": [
434
+ "paper",
435
+ "mtgo",
436
+ "arena"
437
+ ],
438
+ "reserved": false,
439
+ "foil": true,
440
+ "nonfoil": true,
441
+ "finishes": [
442
+ "nonfoil",
443
+ "foil"
444
+ ],
445
+ "oversized": false,
446
+ "promo": false,
447
+ "reprint": true,
448
+ "variation": false,
449
+ "set_id": "a111d8a9-b647-48ec-afab-2b78f92173f5",
450
+ "set": "dsk",
451
+ "set_name": "Duskmourn: House of Horror",
452
+ "set_type": "expansion",
453
+ "set_uri": "https://api.scryfall.com/sets/a111d8a9-b647-48ec-afab-2b78f92173f5",
454
+ "set_search_uri": "https://api.scryfall.com/cards/search?order=set&q=e%3Adsk&unique=prints",
455
+ "scryfall_set_uri": "https://scryfall.com/sets/dsk?utm_source=api",
456
+ "rulings_uri": "https://api.scryfall.com/cards/947702ca-d065-4368-9f26-f859d4642cb6/rulings",
457
+ "prints_search_uri": "https://api.scryfall.com/cards/search?order=released&q=oracleid%3Ab2c6aa39-2d2a-459c-a555-fb48ba993373&unique=prints",
458
+ "collector_number": "279",
459
+ "digital": false,
460
+ "rarity": "common",
461
+ "card_back_id": "0aeebaf5-8c7d-4636-9e82-8c27447861f7",
462
+ "artist": "Raymond Bonilla",
463
+ "artist_ids": [
464
+ "39fcaaac-bf5d-4c43-ae20-4cf4921a44fa"
465
+ ],
466
+ "illustration_id": "75fa53a9-6b64-4c5c-a3b7-c1a1df542a04",
467
+ "border_color": "black",
468
+ "frame": "2015",
469
+ "full_art": false,
470
+ "textless": false,
471
+ "booster": true,
472
+ "story_spotlight": false,
473
+ "prices": {
474
+ "usd": "0.06",
475
+ "usd_foil": "0.10",
476
+ "usd_etched": null,
477
+ "eur": null,
478
+ "eur_foil": null,
479
+ "tix": "0.02"
480
+ },
481
+ "related_uris": {
482
+ "gatherer": "https://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=672916&printed=false",
483
+ "tcgplayer_infinite_articles": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Darticle%26game%3Dmagic%26partner%3Dscryfall%26q%3DIsland",
484
+ "tcgplayer_infinite_decks": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Ddeck%26game%3Dmagic%26partner%3Dscryfall%26q%3DIsland",
485
+ "edhrec": "https://edhrec.com/route/?cc=Island"
486
+ },
487
+ "purchase_uris": {
488
+ "tcgplayer": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&u=https%3A%2F%2Fwww.tcgplayer.com%2Fproduct%2F576522%3Fpage%3D1",
489
+ "cardmarket": "https://www.cardmarket.com/en/Magic/Products/Search?referrer=scryfall&searchString=Island&utm_campaign=card_prices&utm_medium=text&utm_source=scryfall",
490
+ "cardhoarder": "https://www.cardhoarder.com/cards/130679?affiliate_id=scryfall&ref=card-profile&utm_campaign=affiliate&utm_medium=card&utm_source=scryfall"
491
+ }
492
+ },
493
+ {
494
+ "object": "card",
495
+ "id": "e1d10d9c-8771-4870-aebf-e767d0fada32",
496
+ "oracle_id": "b2c6aa39-2d2a-459c-a555-fb48ba993373",
497
+ "multiverse_ids": [672917],
498
+ "mtgo_id": 130681,
499
+ "arena_id": 92375,
500
+ "tcgplayer_id": 576523,
501
+ "name": "Island",
502
+ "lang": "en",
503
+ "released_at": "2024-09-27",
504
+ "uri": "https://api.scryfall.com/cards/e1d10d9c-8771-4870-aebf-e767d0fada32",
505
+ "scryfall_uri": "https://scryfall.com/card/dsk/280/island?utm_source=api",
506
+ "layout": "normal",
507
+ "highres_image": true,
508
+ "image_status": "highres_scan",
509
+ "image_uris": {
510
+ "small": "https://cards.scryfall.io/small/front/e/1/e1d10d9c-8771-4870-aebf-e767d0fada32.jpg?1726286920",
511
+ "normal": "https://cards.scryfall.io/normal/front/e/1/e1d10d9c-8771-4870-aebf-e767d0fada32.jpg?1726286920",
512
+ "large": "https://cards.scryfall.io/large/front/e/1/e1d10d9c-8771-4870-aebf-e767d0fada32.jpg?1726286920",
513
+ "png": "https://cards.scryfall.io/png/front/e/1/e1d10d9c-8771-4870-aebf-e767d0fada32.png?1726286920",
514
+ "art_crop": "https://cards.scryfall.io/art_crop/front/e/1/e1d10d9c-8771-4870-aebf-e767d0fada32.jpg?1726286920",
515
+ "border_crop": "https://cards.scryfall.io/border_crop/front/e/1/e1d10d9c-8771-4870-aebf-e767d0fada32.jpg?1726286920"
516
+ },
517
+ "mana_cost": "",
518
+ "cmc": 0,
519
+ "type_line": "Basic Land — Island",
520
+ "oracle_text": "({T}: Add {U}.)",
521
+ "colors": [],
522
+ "color_identity": [
523
+ "U"
524
+ ],
525
+ "keywords": [],
526
+ "produced_mana": [
527
+ "U"
528
+ ],
529
+ "legalities": {
530
+ "standard": "legal",
531
+ "future": "legal",
532
+ "historic": "legal",
533
+ "timeless": "legal",
534
+ "gladiator": "legal",
535
+ "pioneer": "legal",
536
+ "explorer": "legal",
537
+ "modern": "legal",
538
+ "legacy": "legal",
539
+ "pauper": "legal",
540
+ "vintage": "legal",
541
+ "penny": "legal",
542
+ "commander": "legal",
543
+ "oathbreaker": "legal",
544
+ "standardbrawl": "legal",
545
+ "brawl": "legal",
546
+ "alchemy": "legal",
547
+ "paupercommander": "legal",
548
+ "duel": "legal",
549
+ "oldschool": "not_legal",
550
+ "premodern": "legal",
551
+ "predh": "legal"
552
+ },
553
+ "games": [
554
+ "paper",
555
+ "mtgo",
556
+ "arena"
557
+ ],
558
+ "reserved": false,
559
+ "foil": true,
560
+ "nonfoil": true,
561
+ "finishes": [
562
+ "nonfoil",
563
+ "foil"
564
+ ],
565
+ "oversized": false,
566
+ "promo": false,
567
+ "reprint": true,
568
+ "variation": false,
569
+ "set_id": "a111d8a9-b647-48ec-afab-2b78f92173f5",
570
+ "set": "dsk",
571
+ "set_name": "Duskmourn: House of Horror",
572
+ "set_type": "expansion",
573
+ "set_uri": "https://api.scryfall.com/sets/a111d8a9-b647-48ec-afab-2b78f92173f5",
574
+ "set_search_uri": "https://api.scryfall.com/cards/search?order=set&q=e%3Adsk&unique=prints",
575
+ "scryfall_set_uri": "https://scryfall.com/sets/dsk?utm_source=api",
576
+ "rulings_uri": "https://api.scryfall.com/cards/e1d10d9c-8771-4870-aebf-e767d0fada32/rulings",
577
+ "prints_search_uri": "https://api.scryfall.com/cards/search?order=released&q=oracleid%3Ab2c6aa39-2d2a-459c-a555-fb48ba993373&unique=prints",
578
+ "collector_number": "280",
579
+ "digital": false,
580
+ "rarity": "common",
581
+ "card_back_id": "0aeebaf5-8c7d-4636-9e82-8c27447861f7",
582
+ "artist": "Leonardo Borazio",
583
+ "artist_ids": [
584
+ "608e3b85-cdd3-4d1a-8a3a-7f1ed8856f6b"
585
+ ],
586
+ "illustration_id": "8cac531e-f5fc-48ee-86e7-1deacd656981",
587
+ "border_color": "black",
588
+ "frame": "2015",
589
+ "full_art": false,
590
+ "textless": false,
591
+ "booster": true,
592
+ "story_spotlight": false,
593
+ "preview": {
594
+ "source": "Wizards of the Coast",
595
+ "source_uri": "",
596
+ "previewed_at": "2024-09-06"
597
+ },
598
+ "prices": {
599
+ "usd": "0.06",
600
+ "usd_foil": "0.10",
601
+ "usd_etched": null,
602
+ "eur": null,
603
+ "eur_foil": null,
604
+ "tix": "0.01"
605
+ },
606
+ "related_uris": {
607
+ "gatherer": "https://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=672917&printed=false",
608
+ "tcgplayer_infinite_articles": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Darticle%26game%3Dmagic%26partner%3Dscryfall%26q%3DIsland",
609
+ "tcgplayer_infinite_decks": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Ddeck%26game%3Dmagic%26partner%3Dscryfall%26q%3DIsland",
610
+ "edhrec": "https://edhrec.com/route/?cc=Island"
611
+ },
612
+ "purchase_uris": {
613
+ "tcgplayer": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&u=https%3A%2F%2Fwww.tcgplayer.com%2Fproduct%2F576523%3Fpage%3D1",
614
+ "cardmarket": "https://www.cardmarket.com/en/Magic/Products/Search?referrer=scryfall&searchString=Island&utm_campaign=card_prices&utm_medium=text&utm_source=scryfall",
615
+ "cardhoarder": "https://www.cardhoarder.com/cards/130681?affiliate_id=scryfall&ref=card-profile&utm_campaign=affiliate&utm_medium=card&utm_source=scryfall"
616
+ }
617
+ },
618
+ {
619
+ "object": "card",
620
+ "id": "40e3bf00-84cc-498c-b214-1052b4904d92",
621
+ "oracle_id": "b2c6aa39-2d2a-459c-a555-fb48ba993373",
622
+ "multiverse_ids": [672885],
623
+ "mtgo_id": 130697,
624
+ "arena_id": 92383,
625
+ "tcgplayer_id": 557259,
626
+ "cardmarket_id": 786628,
627
+ "name": "Island",
628
+ "lang": "en",
629
+ "released_at": "2024-09-27",
630
+ "uri": "https://api.scryfall.com/cards/40e3bf00-84cc-498c-b214-1052b4904d92",
631
+ "scryfall_uri": "https://scryfall.com/card/dsk/273/island?utm_source=api",
632
+ "layout": "normal",
633
+ "highres_image": true,
634
+ "image_status": "highres_scan",
635
+ "image_uris": {
636
+ "small": "https://cards.scryfall.io/small/front/4/0/40e3bf00-84cc-498c-b214-1052b4904d92.jpg?1726286894",
637
+ "normal": "https://cards.scryfall.io/normal/front/4/0/40e3bf00-84cc-498c-b214-1052b4904d92.jpg?1726286894",
638
+ "large": "https://cards.scryfall.io/large/front/4/0/40e3bf00-84cc-498c-b214-1052b4904d92.jpg?1726286894",
639
+ "png": "https://cards.scryfall.io/png/front/4/0/40e3bf00-84cc-498c-b214-1052b4904d92.png?1726286894",
640
+ "art_crop": "https://cards.scryfall.io/art_crop/front/4/0/40e3bf00-84cc-498c-b214-1052b4904d92.jpg?1726286894",
641
+ "border_crop": "https://cards.scryfall.io/border_crop/front/4/0/40e3bf00-84cc-498c-b214-1052b4904d92.jpg?1726286894"
642
+ },
643
+ "mana_cost": "",
644
+ "cmc": 0,
645
+ "type_line": "Basic Land — Island",
646
+ "oracle_text": "({T}: Add {U}.)",
647
+ "colors": [],
648
+ "color_identity": [
649
+ "U"
650
+ ],
651
+ "keywords": [],
652
+ "produced_mana": [
653
+ "U"
654
+ ],
655
+ "legalities": {
656
+ "standard": "legal",
657
+ "future": "legal",
658
+ "historic": "legal",
659
+ "timeless": "legal",
660
+ "gladiator": "legal",
661
+ "pioneer": "legal",
662
+ "explorer": "legal",
663
+ "modern": "legal",
664
+ "legacy": "legal",
665
+ "pauper": "legal",
666
+ "vintage": "legal",
667
+ "penny": "legal",
668
+ "commander": "legal",
669
+ "oathbreaker": "legal",
670
+ "standardbrawl": "legal",
671
+ "brawl": "legal",
672
+ "alchemy": "legal",
673
+ "paupercommander": "legal",
674
+ "duel": "legal",
675
+ "oldschool": "not_legal",
676
+ "premodern": "legal",
677
+ "predh": "legal"
678
+ },
679
+ "games": [
680
+ "paper",
681
+ "mtgo",
682
+ "arena"
683
+ ],
684
+ "reserved": false,
685
+ "foil": true,
686
+ "nonfoil": true,
687
+ "finishes": [
688
+ "nonfoil",
689
+ "foil"
690
+ ],
691
+ "oversized": false,
692
+ "promo": false,
693
+ "reprint": true,
694
+ "variation": false,
695
+ "set_id": "a111d8a9-b647-48ec-afab-2b78f92173f5",
696
+ "set": "dsk",
697
+ "set_name": "Duskmourn: House of Horror",
698
+ "set_type": "expansion",
699
+ "set_uri": "https://api.scryfall.com/sets/a111d8a9-b647-48ec-afab-2b78f92173f5",
700
+ "set_search_uri": "https://api.scryfall.com/cards/search?order=set&q=e%3Adsk&unique=prints",
701
+ "scryfall_set_uri": "https://scryfall.com/sets/dsk?utm_source=api",
702
+ "rulings_uri": "https://api.scryfall.com/cards/40e3bf00-84cc-498c-b214-1052b4904d92/rulings",
703
+ "prints_search_uri": "https://api.scryfall.com/cards/search?order=released&q=oracleid%3Ab2c6aa39-2d2a-459c-a555-fb48ba993373&unique=prints",
704
+ "collector_number": "273",
705
+ "digital": false,
706
+ "rarity": "common",
707
+ "card_back_id": "0aeebaf5-8c7d-4636-9e82-8c27447861f7",
708
+ "artist": "Dan Mumford",
709
+ "artist_ids": [
710
+ "266fe58e-bcd6-4294-8e42-0a234ed9fb8d"
711
+ ],
712
+ "illustration_id": "20a27f44-5c4f-4f71-9ab2-0c83b13decee",
713
+ "border_color": "black",
714
+ "frame": "2015",
715
+ "full_art": true,
716
+ "textless": false,
717
+ "booster": true,
718
+ "story_spotlight": false,
719
+ "prices": {
720
+ "usd": "0.44",
721
+ "usd_foil": "0.26",
722
+ "usd_etched": null,
723
+ "eur": "0.27",
724
+ "eur_foil": "0.29",
725
+ "tix": "0.01"
726
+ },
727
+ "related_uris": {
728
+ "gatherer": "https://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=672885&printed=false",
729
+ "tcgplayer_infinite_articles": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Darticle%26game%3Dmagic%26partner%3Dscryfall%26q%3DIsland",
730
+ "tcgplayer_infinite_decks": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Ddeck%26game%3Dmagic%26partner%3Dscryfall%26q%3DIsland",
731
+ "edhrec": "https://edhrec.com/route/?cc=Island"
732
+ },
733
+ "purchase_uris": {
734
+ "tcgplayer": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&u=https%3A%2F%2Fwww.tcgplayer.com%2Fproduct%2F557259%3Fpage%3D1",
735
+ "cardmarket": "https://www.cardmarket.com/en/Magic/Products/Singles/Duskmourn-House-of-Horror/Island?referrer=scryfall&utm_campaign=card_prices&utm_medium=text&utm_source=scryfall",
736
+ "cardhoarder": "https://www.cardhoarder.com/cards/130697?affiliate_id=scryfall&ref=card-profile&utm_campaign=affiliate&utm_medium=card&utm_source=scryfall"
737
+ }
738
+ },
739
+ {
740
+ "object": "card",
741
+ "id": "accb56f0-3903-4894-86f0-3965162064d4",
742
+ "oracle_id": "a3fb7228-e76b-4e96-a40e-20b5fed75685",
743
+ "multiverse_ids": [672920],
744
+ "mtgo_id": 130687,
745
+ "arena_id": 92378,
746
+ "tcgplayer_id": 576524,
747
+ "name": "Mountain",
748
+ "lang": "en",
749
+ "released_at": "2024-09-27",
750
+ "uri": "https://api.scryfall.com/cards/accb56f0-3903-4894-86f0-3965162064d4",
751
+ "scryfall_uri": "https://scryfall.com/card/dsk/283/mountain?utm_source=api",
752
+ "layout": "normal",
753
+ "highres_image": true,
754
+ "image_status": "highres_scan",
755
+ "image_uris": {
756
+ "small": "https://cards.scryfall.io/small/front/a/c/accb56f0-3903-4894-86f0-3965162064d4.jpg?1726286930",
757
+ "normal": "https://cards.scryfall.io/normal/front/a/c/accb56f0-3903-4894-86f0-3965162064d4.jpg?1726286930",
758
+ "large": "https://cards.scryfall.io/large/front/a/c/accb56f0-3903-4894-86f0-3965162064d4.jpg?1726286930",
759
+ "png": "https://cards.scryfall.io/png/front/a/c/accb56f0-3903-4894-86f0-3965162064d4.png?1726286930",
760
+ "art_crop": "https://cards.scryfall.io/art_crop/front/a/c/accb56f0-3903-4894-86f0-3965162064d4.jpg?1726286930",
761
+ "border_crop": "https://cards.scryfall.io/border_crop/front/a/c/accb56f0-3903-4894-86f0-3965162064d4.jpg?1726286930"
762
+ },
763
+ "mana_cost": "",
764
+ "cmc": 0,
765
+ "type_line": "Basic Land — Mountain",
766
+ "oracle_text": "({T}: Add {R}.)",
767
+ "colors": [],
768
+ "color_identity": [
769
+ "R"
770
+ ],
771
+ "keywords": [],
772
+ "produced_mana": [
773
+ "R"
774
+ ],
775
+ "legalities": {
776
+ "standard": "legal",
777
+ "future": "legal",
778
+ "historic": "legal",
779
+ "timeless": "legal",
780
+ "gladiator": "legal",
781
+ "pioneer": "legal",
782
+ "explorer": "legal",
783
+ "modern": "legal",
784
+ "legacy": "legal",
785
+ "pauper": "legal",
786
+ "vintage": "legal",
787
+ "penny": "legal",
788
+ "commander": "legal",
789
+ "oathbreaker": "legal",
790
+ "standardbrawl": "legal",
791
+ "brawl": "legal",
792
+ "alchemy": "legal",
793
+ "paupercommander": "legal",
794
+ "duel": "legal",
795
+ "oldschool": "not_legal",
796
+ "premodern": "legal",
797
+ "predh": "legal"
798
+ },
799
+ "games": [
800
+ "paper",
801
+ "mtgo",
802
+ "arena"
803
+ ],
804
+ "reserved": false,
805
+ "foil": true,
806
+ "nonfoil": true,
807
+ "finishes": [
808
+ "nonfoil",
809
+ "foil"
810
+ ],
811
+ "oversized": false,
812
+ "promo": false,
813
+ "reprint": true,
814
+ "variation": false,
815
+ "set_id": "a111d8a9-b647-48ec-afab-2b78f92173f5",
816
+ "set": "dsk",
817
+ "set_name": "Duskmourn: House of Horror",
818
+ "set_type": "expansion",
819
+ "set_uri": "https://api.scryfall.com/sets/a111d8a9-b647-48ec-afab-2b78f92173f5",
820
+ "set_search_uri": "https://api.scryfall.com/cards/search?order=set&q=e%3Adsk&unique=prints",
821
+ "scryfall_set_uri": "https://scryfall.com/sets/dsk?utm_source=api",
822
+ "rulings_uri": "https://api.scryfall.com/cards/accb56f0-3903-4894-86f0-3965162064d4/rulings",
823
+ "prints_search_uri": "https://api.scryfall.com/cards/search?order=released&q=oracleid%3Aa3fb7228-e76b-4e96-a40e-20b5fed75685&unique=prints",
824
+ "collector_number": "283",
825
+ "digital": false,
826
+ "rarity": "common",
827
+ "card_back_id": "0aeebaf5-8c7d-4636-9e82-8c27447861f7",
828
+ "artist": "Ralph Horsley",
829
+ "artist_ids": [
830
+ "a51444a8-eb4b-4615-a663-d1d418591ccb"
831
+ ],
832
+ "illustration_id": "e66f514c-dca6-445b-b709-cae076d0cf77",
833
+ "border_color": "black",
834
+ "frame": "2015",
835
+ "full_art": false,
836
+ "textless": false,
837
+ "booster": true,
838
+ "story_spotlight": false,
839
+ "prices": {
840
+ "usd": "0.05",
841
+ "usd_foil": "0.11",
842
+ "usd_etched": null,
843
+ "eur": null,
844
+ "eur_foil": null,
845
+ "tix": "0.02"
846
+ },
847
+ "related_uris": {
848
+ "gatherer": "https://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=672920&printed=false",
849
+ "tcgplayer_infinite_articles": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Darticle%26game%3Dmagic%26partner%3Dscryfall%26q%3DMountain",
850
+ "tcgplayer_infinite_decks": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Ddeck%26game%3Dmagic%26partner%3Dscryfall%26q%3DMountain",
851
+ "edhrec": "https://edhrec.com/route/?cc=Mountain"
852
+ },
853
+ "purchase_uris": {
854
+ "tcgplayer": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&u=https%3A%2F%2Fwww.tcgplayer.com%2Fproduct%2F576524%3Fpage%3D1",
855
+ "cardmarket": "https://www.cardmarket.com/en/Magic/Products/Search?referrer=scryfall&searchString=Mountain&utm_campaign=card_prices&utm_medium=text&utm_source=scryfall",
856
+ "cardhoarder": "https://www.cardhoarder.com/cards/130687?affiliate_id=scryfall&ref=card-profile&utm_campaign=affiliate&utm_medium=card&utm_source=scryfall"
857
+ }
858
+ },
859
+ {
860
+ "object": "card",
861
+ "id": "1a44d8a4-21de-497d-9eed-702d7b592728",
862
+ "oracle_id": "a3fb7228-e76b-4e96-a40e-20b5fed75685",
863
+ "multiverse_ids": [672921],
864
+ "mtgo_id": 130689,
865
+ "arena_id": 92379,
866
+ "tcgplayer_id": 576525,
867
+ "name": "Mountain",
868
+ "lang": "en",
869
+ "released_at": "2024-09-27",
870
+ "uri": "https://api.scryfall.com/cards/1a44d8a4-21de-497d-9eed-702d7b592728",
871
+ "scryfall_uri": "https://scryfall.com/card/dsk/284/mountain?utm_source=api",
872
+ "layout": "normal",
873
+ "highres_image": true,
874
+ "image_status": "highres_scan",
875
+ "image_uris": {
876
+ "small": "https://cards.scryfall.io/small/front/1/a/1a44d8a4-21de-497d-9eed-702d7b592728.jpg?1726286935",
877
+ "normal": "https://cards.scryfall.io/normal/front/1/a/1a44d8a4-21de-497d-9eed-702d7b592728.jpg?1726286935",
878
+ "large": "https://cards.scryfall.io/large/front/1/a/1a44d8a4-21de-497d-9eed-702d7b592728.jpg?1726286935",
879
+ "png": "https://cards.scryfall.io/png/front/1/a/1a44d8a4-21de-497d-9eed-702d7b592728.png?1726286935",
880
+ "art_crop": "https://cards.scryfall.io/art_crop/front/1/a/1a44d8a4-21de-497d-9eed-702d7b592728.jpg?1726286935",
881
+ "border_crop": "https://cards.scryfall.io/border_crop/front/1/a/1a44d8a4-21de-497d-9eed-702d7b592728.jpg?1726286935"
882
+ },
883
+ "mana_cost": "",
884
+ "cmc": 0,
885
+ "type_line": "Basic Land — Mountain",
886
+ "oracle_text": "({T}: Add {R}.)",
887
+ "colors": [],
888
+ "color_identity": [
889
+ "R"
890
+ ],
891
+ "keywords": [],
892
+ "produced_mana": [
893
+ "R"
894
+ ],
895
+ "legalities": {
896
+ "standard": "legal",
897
+ "future": "legal",
898
+ "historic": "legal",
899
+ "timeless": "legal",
900
+ "gladiator": "legal",
901
+ "pioneer": "legal",
902
+ "explorer": "legal",
903
+ "modern": "legal",
904
+ "legacy": "legal",
905
+ "pauper": "legal",
906
+ "vintage": "legal",
907
+ "penny": "legal",
908
+ "commander": "legal",
909
+ "oathbreaker": "legal",
910
+ "standardbrawl": "legal",
911
+ "brawl": "legal",
912
+ "alchemy": "legal",
913
+ "paupercommander": "legal",
914
+ "duel": "legal",
915
+ "oldschool": "not_legal",
916
+ "premodern": "legal",
917
+ "predh": "legal"
918
+ },
919
+ "games": [
920
+ "paper",
921
+ "mtgo",
922
+ "arena"
923
+ ],
924
+ "reserved": false,
925
+ "foil": true,
926
+ "nonfoil": true,
927
+ "finishes": [
928
+ "nonfoil",
929
+ "foil"
930
+ ],
931
+ "oversized": false,
932
+ "promo": false,
933
+ "reprint": true,
934
+ "variation": false,
935
+ "set_id": "a111d8a9-b647-48ec-afab-2b78f92173f5",
936
+ "set": "dsk",
937
+ "set_name": "Duskmourn: House of Horror",
938
+ "set_type": "expansion",
939
+ "set_uri": "https://api.scryfall.com/sets/a111d8a9-b647-48ec-afab-2b78f92173f5",
940
+ "set_search_uri": "https://api.scryfall.com/cards/search?order=set&q=e%3Adsk&unique=prints",
941
+ "scryfall_set_uri": "https://scryfall.com/sets/dsk?utm_source=api",
942
+ "rulings_uri": "https://api.scryfall.com/cards/1a44d8a4-21de-497d-9eed-702d7b592728/rulings",
943
+ "prints_search_uri": "https://api.scryfall.com/cards/search?order=released&q=oracleid%3Aa3fb7228-e76b-4e96-a40e-20b5fed75685&unique=prints",
944
+ "collector_number": "284",
945
+ "digital": false,
946
+ "rarity": "common",
947
+ "card_back_id": "0aeebaf5-8c7d-4636-9e82-8c27447861f7",
948
+ "artist": "Néstor Ossandón Leal",
949
+ "artist_ids": [
950
+ "7a6f1667-a8ac-47f5-a302-f71cb54b2adf"
951
+ ],
952
+ "illustration_id": "baa646e2-41a4-4e26-b2c8-ac6acbe7b061",
953
+ "border_color": "black",
954
+ "frame": "2015",
955
+ "full_art": false,
956
+ "textless": false,
957
+ "booster": true,
958
+ "story_spotlight": false,
959
+ "preview": {
960
+ "source": "Wizards of the Coast",
961
+ "source_uri": "",
962
+ "previewed_at": "2024-09-06"
963
+ },
964
+ "prices": {
965
+ "usd": "0.09",
966
+ "usd_foil": "0.12",
967
+ "usd_etched": null,
968
+ "eur": null,
969
+ "eur_foil": null,
970
+ "tix": "0.01"
971
+ },
972
+ "related_uris": {
973
+ "gatherer": "https://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=672921&printed=false",
974
+ "tcgplayer_infinite_articles": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Darticle%26game%3Dmagic%26partner%3Dscryfall%26q%3DMountain",
975
+ "tcgplayer_infinite_decks": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Ddeck%26game%3Dmagic%26partner%3Dscryfall%26q%3DMountain",
976
+ "edhrec": "https://edhrec.com/route/?cc=Mountain"
977
+ },
978
+ "purchase_uris": {
979
+ "tcgplayer": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&u=https%3A%2F%2Fwww.tcgplayer.com%2Fproduct%2F576525%3Fpage%3D1",
980
+ "cardmarket": "https://www.cardmarket.com/en/Magic/Products/Search?referrer=scryfall&searchString=Mountain&utm_campaign=card_prices&utm_medium=text&utm_source=scryfall",
981
+ "cardhoarder": "https://www.cardhoarder.com/cards/130689?affiliate_id=scryfall&ref=card-profile&utm_campaign=affiliate&utm_medium=card&utm_source=scryfall"
982
+ }
983
+ },
984
+ {
985
+ "object": "card",
986
+ "id": "8c8841b2-9b4e-4f65-8e30-1e9423cb8fbc",
987
+ "oracle_id": "a3fb7228-e76b-4e96-a40e-20b5fed75685",
988
+ "multiverse_ids": [672887],
989
+ "mtgo_id": 130701,
990
+ "arena_id": 92385,
991
+ "tcgplayer_id": 557261,
992
+ "cardmarket_id": 786630,
993
+ "name": "Mountain",
994
+ "lang": "en",
995
+ "released_at": "2024-09-27",
996
+ "uri": "https://api.scryfall.com/cards/8c8841b2-9b4e-4f65-8e30-1e9423cb8fbc",
997
+ "scryfall_uri": "https://scryfall.com/card/dsk/275/mountain?utm_source=api",
998
+ "layout": "normal",
999
+ "highres_image": true,
1000
+ "image_status": "highres_scan",
1001
+ "image_uris": {
1002
+ "small": "https://cards.scryfall.io/small/front/8/c/8c8841b2-9b4e-4f65-8e30-1e9423cb8fbc.jpg?1726286901",
1003
+ "normal": "https://cards.scryfall.io/normal/front/8/c/8c8841b2-9b4e-4f65-8e30-1e9423cb8fbc.jpg?1726286901",
1004
+ "large": "https://cards.scryfall.io/large/front/8/c/8c8841b2-9b4e-4f65-8e30-1e9423cb8fbc.jpg?1726286901",
1005
+ "png": "https://cards.scryfall.io/png/front/8/c/8c8841b2-9b4e-4f65-8e30-1e9423cb8fbc.png?1726286901",
1006
+ "art_crop": "https://cards.scryfall.io/art_crop/front/8/c/8c8841b2-9b4e-4f65-8e30-1e9423cb8fbc.jpg?1726286901",
1007
+ "border_crop": "https://cards.scryfall.io/border_crop/front/8/c/8c8841b2-9b4e-4f65-8e30-1e9423cb8fbc.jpg?1726286901"
1008
+ },
1009
+ "mana_cost": "",
1010
+ "cmc": 0,
1011
+ "type_line": "Basic Land — Mountain",
1012
+ "oracle_text": "({T}: Add {R}.)",
1013
+ "colors": [],
1014
+ "color_identity": [
1015
+ "R"
1016
+ ],
1017
+ "keywords": [],
1018
+ "produced_mana": [
1019
+ "R"
1020
+ ],
1021
+ "legalities": {
1022
+ "standard": "legal",
1023
+ "future": "legal",
1024
+ "historic": "legal",
1025
+ "timeless": "legal",
1026
+ "gladiator": "legal",
1027
+ "pioneer": "legal",
1028
+ "explorer": "legal",
1029
+ "modern": "legal",
1030
+ "legacy": "legal",
1031
+ "pauper": "legal",
1032
+ "vintage": "legal",
1033
+ "penny": "legal",
1034
+ "commander": "legal",
1035
+ "oathbreaker": "legal",
1036
+ "standardbrawl": "legal",
1037
+ "brawl": "legal",
1038
+ "alchemy": "legal",
1039
+ "paupercommander": "legal",
1040
+ "duel": "legal",
1041
+ "oldschool": "not_legal",
1042
+ "premodern": "legal",
1043
+ "predh": "legal"
1044
+ },
1045
+ "games": [
1046
+ "paper",
1047
+ "mtgo",
1048
+ "arena"
1049
+ ],
1050
+ "reserved": false,
1051
+ "foil": true,
1052
+ "nonfoil": true,
1053
+ "finishes": [
1054
+ "nonfoil",
1055
+ "foil"
1056
+ ],
1057
+ "oversized": false,
1058
+ "promo": false,
1059
+ "reprint": true,
1060
+ "variation": false,
1061
+ "set_id": "a111d8a9-b647-48ec-afab-2b78f92173f5",
1062
+ "set": "dsk",
1063
+ "set_name": "Duskmourn: House of Horror",
1064
+ "set_type": "expansion",
1065
+ "set_uri": "https://api.scryfall.com/sets/a111d8a9-b647-48ec-afab-2b78f92173f5",
1066
+ "set_search_uri": "https://api.scryfall.com/cards/search?order=set&q=e%3Adsk&unique=prints",
1067
+ "scryfall_set_uri": "https://scryfall.com/sets/dsk?utm_source=api",
1068
+ "rulings_uri": "https://api.scryfall.com/cards/8c8841b2-9b4e-4f65-8e30-1e9423cb8fbc/rulings",
1069
+ "prints_search_uri": "https://api.scryfall.com/cards/search?order=released&q=oracleid%3Aa3fb7228-e76b-4e96-a40e-20b5fed75685&unique=prints",
1070
+ "collector_number": "275",
1071
+ "digital": false,
1072
+ "rarity": "common",
1073
+ "card_back_id": "0aeebaf5-8c7d-4636-9e82-8c27447861f7",
1074
+ "artist": "Dan Mumford",
1075
+ "artist_ids": [
1076
+ "266fe58e-bcd6-4294-8e42-0a234ed9fb8d"
1077
+ ],
1078
+ "illustration_id": "78c62331-ac1a-4b86-b1f7-9d05abfb8958",
1079
+ "border_color": "black",
1080
+ "frame": "2015",
1081
+ "full_art": true,
1082
+ "textless": false,
1083
+ "booster": true,
1084
+ "story_spotlight": false,
1085
+ "prices": {
1086
+ "usd": "0.45",
1087
+ "usd_foil": "0.29",
1088
+ "usd_etched": null,
1089
+ "eur": "0.28",
1090
+ "eur_foil": "0.28",
1091
+ "tix": "0.01"
1092
+ },
1093
+ "related_uris": {
1094
+ "gatherer": "https://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=672887&printed=false",
1095
+ "tcgplayer_infinite_articles": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Darticle%26game%3Dmagic%26partner%3Dscryfall%26q%3DMountain",
1096
+ "tcgplayer_infinite_decks": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Ddeck%26game%3Dmagic%26partner%3Dscryfall%26q%3DMountain",
1097
+ "edhrec": "https://edhrec.com/route/?cc=Mountain"
1098
+ },
1099
+ "purchase_uris": {
1100
+ "tcgplayer": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&u=https%3A%2F%2Fwww.tcgplayer.com%2Fproduct%2F557261%3Fpage%3D1",
1101
+ "cardmarket": "https://www.cardmarket.com/en/Magic/Products/Singles/Duskmourn-House-of-Horror/Mountain?referrer=scryfall&utm_campaign=card_prices&utm_medium=text&utm_source=scryfall",
1102
+ "cardhoarder": "https://www.cardhoarder.com/cards/130701?affiliate_id=scryfall&ref=card-profile&utm_campaign=affiliate&utm_medium=card&utm_source=scryfall"
1103
+ }
1104
+ },
1105
+ {
1106
+ "object": "card",
1107
+ "id": "1b499b37-efaf-4484-95e8-a70a9778c804",
1108
+ "oracle_id": "bc71ebf6-2056-41f7-be35-b2e5c34afa99",
1109
+ "multiverse_ids": [672914],
1110
+ "mtgo_id": 130675,
1111
+ "arena_id": 92372,
1112
+ "tcgplayer_id": 576526,
1113
+ "name": "Plains",
1114
+ "lang": "en",
1115
+ "released_at": "2024-09-27",
1116
+ "uri": "https://api.scryfall.com/cards/1b499b37-efaf-4484-95e8-a70a9778c804",
1117
+ "scryfall_uri": "https://scryfall.com/card/dsk/277/plains?utm_source=api",
1118
+ "layout": "normal",
1119
+ "highres_image": true,
1120
+ "image_status": "highres_scan",
1121
+ "image_uris": {
1122
+ "small": "https://cards.scryfall.io/small/front/1/b/1b499b37-efaf-4484-95e8-a70a9778c804.jpg?1726286908",
1123
+ "normal": "https://cards.scryfall.io/normal/front/1/b/1b499b37-efaf-4484-95e8-a70a9778c804.jpg?1726286908",
1124
+ "large": "https://cards.scryfall.io/large/front/1/b/1b499b37-efaf-4484-95e8-a70a9778c804.jpg?1726286908",
1125
+ "png": "https://cards.scryfall.io/png/front/1/b/1b499b37-efaf-4484-95e8-a70a9778c804.png?1726286908",
1126
+ "art_crop": "https://cards.scryfall.io/art_crop/front/1/b/1b499b37-efaf-4484-95e8-a70a9778c804.jpg?1726286908",
1127
+ "border_crop": "https://cards.scryfall.io/border_crop/front/1/b/1b499b37-efaf-4484-95e8-a70a9778c804.jpg?1726286908"
1128
+ },
1129
+ "mana_cost": "",
1130
+ "cmc": 0,
1131
+ "type_line": "Basic Land — Plains",
1132
+ "oracle_text": "({T}: Add {W}.)",
1133
+ "colors": [],
1134
+ "color_identity": [
1135
+ "W"
1136
+ ],
1137
+ "keywords": [],
1138
+ "produced_mana": [
1139
+ "W"
1140
+ ],
1141
+ "legalities": {
1142
+ "standard": "legal",
1143
+ "future": "legal",
1144
+ "historic": "legal",
1145
+ "timeless": "legal",
1146
+ "gladiator": "legal",
1147
+ "pioneer": "legal",
1148
+ "explorer": "legal",
1149
+ "modern": "legal",
1150
+ "legacy": "legal",
1151
+ "pauper": "legal",
1152
+ "vintage": "legal",
1153
+ "penny": "legal",
1154
+ "commander": "legal",
1155
+ "oathbreaker": "legal",
1156
+ "standardbrawl": "legal",
1157
+ "brawl": "legal",
1158
+ "alchemy": "legal",
1159
+ "paupercommander": "legal",
1160
+ "duel": "legal",
1161
+ "oldschool": "not_legal",
1162
+ "premodern": "legal",
1163
+ "predh": "legal"
1164
+ },
1165
+ "games": [
1166
+ "paper",
1167
+ "mtgo",
1168
+ "arena"
1169
+ ],
1170
+ "reserved": false,
1171
+ "foil": true,
1172
+ "nonfoil": true,
1173
+ "finishes": [
1174
+ "nonfoil",
1175
+ "foil"
1176
+ ],
1177
+ "oversized": false,
1178
+ "promo": false,
1179
+ "reprint": true,
1180
+ "variation": false,
1181
+ "set_id": "a111d8a9-b647-48ec-afab-2b78f92173f5",
1182
+ "set": "dsk",
1183
+ "set_name": "Duskmourn: House of Horror",
1184
+ "set_type": "expansion",
1185
+ "set_uri": "https://api.scryfall.com/sets/a111d8a9-b647-48ec-afab-2b78f92173f5",
1186
+ "set_search_uri": "https://api.scryfall.com/cards/search?order=set&q=e%3Adsk&unique=prints",
1187
+ "scryfall_set_uri": "https://scryfall.com/sets/dsk?utm_source=api",
1188
+ "rulings_uri": "https://api.scryfall.com/cards/1b499b37-efaf-4484-95e8-a70a9778c804/rulings",
1189
+ "prints_search_uri": "https://api.scryfall.com/cards/search?order=released&q=oracleid%3Abc71ebf6-2056-41f7-be35-b2e5c34afa99&unique=prints",
1190
+ "collector_number": "277",
1191
+ "digital": false,
1192
+ "rarity": "common",
1193
+ "card_back_id": "0aeebaf5-8c7d-4636-9e82-8c27447861f7",
1194
+ "artist": "Marco Gorlei",
1195
+ "artist_ids": [
1196
+ "b6476cc7-1576-47e8-9f6a-68d05b45cf62"
1197
+ ],
1198
+ "illustration_id": "1ca7a75d-4ad0-470c-844c-079339879989",
1199
+ "border_color": "black",
1200
+ "frame": "2015",
1201
+ "full_art": false,
1202
+ "textless": false,
1203
+ "booster": true,
1204
+ "story_spotlight": false,
1205
+ "preview": {
1206
+ "source": "Wizards of the Coast",
1207
+ "source_uri": "",
1208
+ "previewed_at": "2024-09-06"
1209
+ },
1210
+ "prices": {
1211
+ "usd": "0.06",
1212
+ "usd_foil": "0.11",
1213
+ "usd_etched": null,
1214
+ "eur": null,
1215
+ "eur_foil": null,
1216
+ "tix": "0.01"
1217
+ },
1218
+ "related_uris": {
1219
+ "gatherer": "https://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=672914&printed=false",
1220
+ "tcgplayer_infinite_articles": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Darticle%26game%3Dmagic%26partner%3Dscryfall%26q%3DPlains",
1221
+ "tcgplayer_infinite_decks": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Ddeck%26game%3Dmagic%26partner%3Dscryfall%26q%3DPlains",
1222
+ "edhrec": "https://edhrec.com/route/?cc=Plains"
1223
+ },
1224
+ "purchase_uris": {
1225
+ "tcgplayer": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&u=https%3A%2F%2Fwww.tcgplayer.com%2Fproduct%2F576526%3Fpage%3D1",
1226
+ "cardmarket": "https://www.cardmarket.com/en/Magic/Products/Search?referrer=scryfall&searchString=Plains&utm_campaign=card_prices&utm_medium=text&utm_source=scryfall",
1227
+ "cardhoarder": "https://www.cardhoarder.com/cards/130675?affiliate_id=scryfall&ref=card-profile&utm_campaign=affiliate&utm_medium=card&utm_source=scryfall"
1228
+ }
1229
+ },
1230
+ {
1231
+ "object": "card",
1232
+ "id": "756abff9-9810-4e2d-b1d7-ec4e2d6d5187",
1233
+ "oracle_id": "bc71ebf6-2056-41f7-be35-b2e5c34afa99",
1234
+ "multiverse_ids": [672915],
1235
+ "mtgo_id": 130677,
1236
+ "arena_id": 92373,
1237
+ "tcgplayer_id": 576527,
1238
+ "name": "Plains",
1239
+ "lang": "en",
1240
+ "released_at": "2024-09-27",
1241
+ "uri": "https://api.scryfall.com/cards/756abff9-9810-4e2d-b1d7-ec4e2d6d5187",
1242
+ "scryfall_uri": "https://scryfall.com/card/dsk/278/plains?utm_source=api",
1243
+ "layout": "normal",
1244
+ "highres_image": true,
1245
+ "image_status": "highres_scan",
1246
+ "image_uris": {
1247
+ "small": "https://cards.scryfall.io/small/front/7/5/756abff9-9810-4e2d-b1d7-ec4e2d6d5187.jpg?1726286912",
1248
+ "normal": "https://cards.scryfall.io/normal/front/7/5/756abff9-9810-4e2d-b1d7-ec4e2d6d5187.jpg?1726286912",
1249
+ "large": "https://cards.scryfall.io/large/front/7/5/756abff9-9810-4e2d-b1d7-ec4e2d6d5187.jpg?1726286912",
1250
+ "png": "https://cards.scryfall.io/png/front/7/5/756abff9-9810-4e2d-b1d7-ec4e2d6d5187.png?1726286912",
1251
+ "art_crop": "https://cards.scryfall.io/art_crop/front/7/5/756abff9-9810-4e2d-b1d7-ec4e2d6d5187.jpg?1726286912",
1252
+ "border_crop": "https://cards.scryfall.io/border_crop/front/7/5/756abff9-9810-4e2d-b1d7-ec4e2d6d5187.jpg?1726286912"
1253
+ },
1254
+ "mana_cost": "",
1255
+ "cmc": 0,
1256
+ "type_line": "Basic Land — Plains",
1257
+ "oracle_text": "({T}: Add {W}.)",
1258
+ "colors": [],
1259
+ "color_identity": [
1260
+ "W"
1261
+ ],
1262
+ "keywords": [],
1263
+ "produced_mana": [
1264
+ "W"
1265
+ ],
1266
+ "legalities": {
1267
+ "standard": "legal",
1268
+ "future": "legal",
1269
+ "historic": "legal",
1270
+ "timeless": "legal",
1271
+ "gladiator": "legal",
1272
+ "pioneer": "legal",
1273
+ "explorer": "legal",
1274
+ "modern": "legal",
1275
+ "legacy": "legal",
1276
+ "pauper": "legal",
1277
+ "vintage": "legal",
1278
+ "penny": "legal",
1279
+ "commander": "legal",
1280
+ "oathbreaker": "legal",
1281
+ "standardbrawl": "legal",
1282
+ "brawl": "legal",
1283
+ "alchemy": "legal",
1284
+ "paupercommander": "legal",
1285
+ "duel": "legal",
1286
+ "oldschool": "not_legal",
1287
+ "premodern": "legal",
1288
+ "predh": "legal"
1289
+ },
1290
+ "games": [
1291
+ "paper",
1292
+ "mtgo",
1293
+ "arena"
1294
+ ],
1295
+ "reserved": false,
1296
+ "foil": true,
1297
+ "nonfoil": true,
1298
+ "finishes": [
1299
+ "nonfoil",
1300
+ "foil"
1301
+ ],
1302
+ "oversized": false,
1303
+ "promo": false,
1304
+ "reprint": true,
1305
+ "variation": false,
1306
+ "set_id": "a111d8a9-b647-48ec-afab-2b78f92173f5",
1307
+ "set": "dsk",
1308
+ "set_name": "Duskmourn: House of Horror",
1309
+ "set_type": "expansion",
1310
+ "set_uri": "https://api.scryfall.com/sets/a111d8a9-b647-48ec-afab-2b78f92173f5",
1311
+ "set_search_uri": "https://api.scryfall.com/cards/search?order=set&q=e%3Adsk&unique=prints",
1312
+ "scryfall_set_uri": "https://scryfall.com/sets/dsk?utm_source=api",
1313
+ "rulings_uri": "https://api.scryfall.com/cards/756abff9-9810-4e2d-b1d7-ec4e2d6d5187/rulings",
1314
+ "prints_search_uri": "https://api.scryfall.com/cards/search?order=released&q=oracleid%3Abc71ebf6-2056-41f7-be35-b2e5c34afa99&unique=prints",
1315
+ "collector_number": "278",
1316
+ "digital": false,
1317
+ "rarity": "common",
1318
+ "card_back_id": "0aeebaf5-8c7d-4636-9e82-8c27447861f7",
1319
+ "artist": "Josu Hernaiz",
1320
+ "artist_ids": [
1321
+ "74246024-92b4-43d0-a5af-a3f9f2a35d5f"
1322
+ ],
1323
+ "illustration_id": "c12aec3e-809e-4c80-aca1-fb5a97c4263c",
1324
+ "border_color": "black",
1325
+ "frame": "2015",
1326
+ "full_art": false,
1327
+ "textless": false,
1328
+ "booster": true,
1329
+ "story_spotlight": false,
1330
+ "preview": {
1331
+ "source": "Wizards of the Coast",
1332
+ "source_uri": "",
1333
+ "previewed_at": "2024-09-06"
1334
+ },
1335
+ "prices": {
1336
+ "usd": "0.06",
1337
+ "usd_foil": "0.10",
1338
+ "usd_etched": null,
1339
+ "eur": null,
1340
+ "eur_foil": null,
1341
+ "tix": "0.02"
1342
+ },
1343
+ "related_uris": {
1344
+ "gatherer": "https://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=672915&printed=false",
1345
+ "tcgplayer_infinite_articles": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Darticle%26game%3Dmagic%26partner%3Dscryfall%26q%3DPlains",
1346
+ "tcgplayer_infinite_decks": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Ddeck%26game%3Dmagic%26partner%3Dscryfall%26q%3DPlains",
1347
+ "edhrec": "https://edhrec.com/route/?cc=Plains"
1348
+ },
1349
+ "purchase_uris": {
1350
+ "tcgplayer": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&u=https%3A%2F%2Fwww.tcgplayer.com%2Fproduct%2F576527%3Fpage%3D1",
1351
+ "cardmarket": "https://www.cardmarket.com/en/Magic/Products/Search?referrer=scryfall&searchString=Plains&utm_campaign=card_prices&utm_medium=text&utm_source=scryfall",
1352
+ "cardhoarder": "https://www.cardhoarder.com/cards/130677?affiliate_id=scryfall&ref=card-profile&utm_campaign=affiliate&utm_medium=card&utm_source=scryfall"
1353
+ }
1354
+ },
1355
+ {
1356
+ "object": "card",
1357
+ "id": "e67ce864-bf29-42f1-81ca-a98022892eec",
1358
+ "oracle_id": "bc71ebf6-2056-41f7-be35-b2e5c34afa99",
1359
+ "multiverse_ids": [672884],
1360
+ "mtgo_id": 130695,
1361
+ "arena_id": 92382,
1362
+ "tcgplayer_id": 557258,
1363
+ "cardmarket_id": 786627,
1364
+ "name": "Plains",
1365
+ "lang": "en",
1366
+ "released_at": "2024-09-27",
1367
+ "uri": "https://api.scryfall.com/cards/e67ce864-bf29-42f1-81ca-a98022892eec",
1368
+ "scryfall_uri": "https://scryfall.com/card/dsk/272/plains?utm_source=api",
1369
+ "layout": "normal",
1370
+ "highres_image": true,
1371
+ "image_status": "highres_scan",
1372
+ "image_uris": {
1373
+ "small": "https://cards.scryfall.io/small/front/e/6/e67ce864-bf29-42f1-81ca-a98022892eec.jpg?1726286890",
1374
+ "normal": "https://cards.scryfall.io/normal/front/e/6/e67ce864-bf29-42f1-81ca-a98022892eec.jpg?1726286890",
1375
+ "large": "https://cards.scryfall.io/large/front/e/6/e67ce864-bf29-42f1-81ca-a98022892eec.jpg?1726286890",
1376
+ "png": "https://cards.scryfall.io/png/front/e/6/e67ce864-bf29-42f1-81ca-a98022892eec.png?1726286890",
1377
+ "art_crop": "https://cards.scryfall.io/art_crop/front/e/6/e67ce864-bf29-42f1-81ca-a98022892eec.jpg?1726286890",
1378
+ "border_crop": "https://cards.scryfall.io/border_crop/front/e/6/e67ce864-bf29-42f1-81ca-a98022892eec.jpg?1726286890"
1379
+ },
1380
+ "mana_cost": "",
1381
+ "cmc": 0,
1382
+ "type_line": "Basic Land — Plains",
1383
+ "oracle_text": "({T}: Add {W}.)",
1384
+ "colors": [],
1385
+ "color_identity": [
1386
+ "W"
1387
+ ],
1388
+ "keywords": [],
1389
+ "produced_mana": [
1390
+ "W"
1391
+ ],
1392
+ "legalities": {
1393
+ "standard": "legal",
1394
+ "future": "legal",
1395
+ "historic": "legal",
1396
+ "timeless": "legal",
1397
+ "gladiator": "legal",
1398
+ "pioneer": "legal",
1399
+ "explorer": "legal",
1400
+ "modern": "legal",
1401
+ "legacy": "legal",
1402
+ "pauper": "legal",
1403
+ "vintage": "legal",
1404
+ "penny": "legal",
1405
+ "commander": "legal",
1406
+ "oathbreaker": "legal",
1407
+ "standardbrawl": "legal",
1408
+ "brawl": "legal",
1409
+ "alchemy": "legal",
1410
+ "paupercommander": "legal",
1411
+ "duel": "legal",
1412
+ "oldschool": "not_legal",
1413
+ "premodern": "legal",
1414
+ "predh": "legal"
1415
+ },
1416
+ "games": [
1417
+ "paper",
1418
+ "mtgo",
1419
+ "arena"
1420
+ ],
1421
+ "reserved": false,
1422
+ "foil": true,
1423
+ "nonfoil": true,
1424
+ "finishes": [
1425
+ "nonfoil",
1426
+ "foil"
1427
+ ],
1428
+ "oversized": false,
1429
+ "promo": false,
1430
+ "reprint": true,
1431
+ "variation": false,
1432
+ "set_id": "a111d8a9-b647-48ec-afab-2b78f92173f5",
1433
+ "set": "dsk",
1434
+ "set_name": "Duskmourn: House of Horror",
1435
+ "set_type": "expansion",
1436
+ "set_uri": "https://api.scryfall.com/sets/a111d8a9-b647-48ec-afab-2b78f92173f5",
1437
+ "set_search_uri": "https://api.scryfall.com/cards/search?order=set&q=e%3Adsk&unique=prints",
1438
+ "scryfall_set_uri": "https://scryfall.com/sets/dsk?utm_source=api",
1439
+ "rulings_uri": "https://api.scryfall.com/cards/e67ce864-bf29-42f1-81ca-a98022892eec/rulings",
1440
+ "prints_search_uri": "https://api.scryfall.com/cards/search?order=released&q=oracleid%3Abc71ebf6-2056-41f7-be35-b2e5c34afa99&unique=prints",
1441
+ "collector_number": "272",
1442
+ "digital": false,
1443
+ "rarity": "common",
1444
+ "card_back_id": "0aeebaf5-8c7d-4636-9e82-8c27447861f7",
1445
+ "artist": "Dan Mumford",
1446
+ "artist_ids": [
1447
+ "266fe58e-bcd6-4294-8e42-0a234ed9fb8d"
1448
+ ],
1449
+ "illustration_id": "c59c9df4-b99c-4721-8e3a-dcc8297af51f",
1450
+ "border_color": "black",
1451
+ "frame": "2015",
1452
+ "full_art": true,
1453
+ "textless": false,
1454
+ "booster": true,
1455
+ "story_spotlight": false,
1456
+ "prices": {
1457
+ "usd": "0.37",
1458
+ "usd_foil": "0.22",
1459
+ "usd_etched": null,
1460
+ "eur": "0.23",
1461
+ "eur_foil": "0.25",
1462
+ "tix": "0.01"
1463
+ },
1464
+ "related_uris": {
1465
+ "gatherer": "https://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=672884&printed=false",
1466
+ "tcgplayer_infinite_articles": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Darticle%26game%3Dmagic%26partner%3Dscryfall%26q%3DPlains",
1467
+ "tcgplayer_infinite_decks": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Ddeck%26game%3Dmagic%26partner%3Dscryfall%26q%3DPlains",
1468
+ "edhrec": "https://edhrec.com/route/?cc=Plains"
1469
+ },
1470
+ "purchase_uris": {
1471
+ "tcgplayer": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&u=https%3A%2F%2Fwww.tcgplayer.com%2Fproduct%2F557258%3Fpage%3D1",
1472
+ "cardmarket": "https://www.cardmarket.com/en/Magic/Products/Singles/Duskmourn-House-of-Horror/Plains?referrer=scryfall&utm_campaign=card_prices&utm_medium=text&utm_source=scryfall",
1473
+ "cardhoarder": "https://www.cardhoarder.com/cards/130695?affiliate_id=scryfall&ref=card-profile&utm_campaign=affiliate&utm_medium=card&utm_source=scryfall"
1474
+ }
1475
+ },
1476
+ {
1477
+ "object": "card",
1478
+ "id": "3c51de66-a3ed-4ca9-befb-9813e96c4ade",
1479
+ "oracle_id": "56719f6a-1a6c-4c0a-8d21-18f7d7350b68",
1480
+ "multiverse_ids": [672918],
1481
+ "mtgo_id": 130683,
1482
+ "arena_id": 92376,
1483
+ "tcgplayer_id": 576528,
1484
+ "name": "Swamp",
1485
+ "lang": "en",
1486
+ "released_at": "2024-09-27",
1487
+ "uri": "https://api.scryfall.com/cards/3c51de66-a3ed-4ca9-befb-9813e96c4ade",
1488
+ "scryfall_uri": "https://scryfall.com/card/dsk/281/swamp?utm_source=api",
1489
+ "layout": "normal",
1490
+ "highres_image": true,
1491
+ "image_status": "highres_scan",
1492
+ "image_uris": {
1493
+ "small": "https://cards.scryfall.io/small/front/3/c/3c51de66-a3ed-4ca9-befb-9813e96c4ade.jpg?1726286923",
1494
+ "normal": "https://cards.scryfall.io/normal/front/3/c/3c51de66-a3ed-4ca9-befb-9813e96c4ade.jpg?1726286923",
1495
+ "large": "https://cards.scryfall.io/large/front/3/c/3c51de66-a3ed-4ca9-befb-9813e96c4ade.jpg?1726286923",
1496
+ "png": "https://cards.scryfall.io/png/front/3/c/3c51de66-a3ed-4ca9-befb-9813e96c4ade.png?1726286923",
1497
+ "art_crop": "https://cards.scryfall.io/art_crop/front/3/c/3c51de66-a3ed-4ca9-befb-9813e96c4ade.jpg?1726286923",
1498
+ "border_crop": "https://cards.scryfall.io/border_crop/front/3/c/3c51de66-a3ed-4ca9-befb-9813e96c4ade.jpg?1726286923"
1499
+ },
1500
+ "mana_cost": "",
1501
+ "cmc": 0,
1502
+ "type_line": "Basic Land — Swamp",
1503
+ "oracle_text": "({T}: Add {B}.)",
1504
+ "colors": [],
1505
+ "color_identity": [
1506
+ "B"
1507
+ ],
1508
+ "keywords": [],
1509
+ "produced_mana": [
1510
+ "B"
1511
+ ],
1512
+ "legalities": {
1513
+ "standard": "legal",
1514
+ "future": "legal",
1515
+ "historic": "legal",
1516
+ "timeless": "legal",
1517
+ "gladiator": "legal",
1518
+ "pioneer": "legal",
1519
+ "explorer": "legal",
1520
+ "modern": "legal",
1521
+ "legacy": "legal",
1522
+ "pauper": "legal",
1523
+ "vintage": "legal",
1524
+ "penny": "legal",
1525
+ "commander": "legal",
1526
+ "oathbreaker": "legal",
1527
+ "standardbrawl": "legal",
1528
+ "brawl": "legal",
1529
+ "alchemy": "legal",
1530
+ "paupercommander": "legal",
1531
+ "duel": "legal",
1532
+ "oldschool": "not_legal",
1533
+ "premodern": "legal",
1534
+ "predh": "legal"
1535
+ },
1536
+ "games": [
1537
+ "paper",
1538
+ "mtgo",
1539
+ "arena"
1540
+ ],
1541
+ "reserved": false,
1542
+ "foil": true,
1543
+ "nonfoil": true,
1544
+ "finishes": [
1545
+ "nonfoil",
1546
+ "foil"
1547
+ ],
1548
+ "oversized": false,
1549
+ "promo": false,
1550
+ "reprint": true,
1551
+ "variation": false,
1552
+ "set_id": "a111d8a9-b647-48ec-afab-2b78f92173f5",
1553
+ "set": "dsk",
1554
+ "set_name": "Duskmourn: House of Horror",
1555
+ "set_type": "expansion",
1556
+ "set_uri": "https://api.scryfall.com/sets/a111d8a9-b647-48ec-afab-2b78f92173f5",
1557
+ "set_search_uri": "https://api.scryfall.com/cards/search?order=set&q=e%3Adsk&unique=prints",
1558
+ "scryfall_set_uri": "https://scryfall.com/sets/dsk?utm_source=api",
1559
+ "rulings_uri": "https://api.scryfall.com/cards/3c51de66-a3ed-4ca9-befb-9813e96c4ade/rulings",
1560
+ "prints_search_uri": "https://api.scryfall.com/cards/search?order=released&q=oracleid%3A56719f6a-1a6c-4c0a-8d21-18f7d7350b68&unique=prints",
1561
+ "collector_number": "281",
1562
+ "digital": false,
1563
+ "rarity": "common",
1564
+ "card_back_id": "0aeebaf5-8c7d-4636-9e82-8c27447861f7",
1565
+ "artist": "Martin de Diego Sádaba",
1566
+ "artist_ids": [
1567
+ "bc760b5e-6f98-4a17-9b12-5f4eccd12bb2"
1568
+ ],
1569
+ "illustration_id": "c10e4dd9-3224-4dfc-b43e-a08859983440",
1570
+ "border_color": "black",
1571
+ "frame": "2015",
1572
+ "full_art": false,
1573
+ "textless": false,
1574
+ "booster": true,
1575
+ "story_spotlight": false,
1576
+ "preview": {
1577
+ "source": "Wizards of the Coast",
1578
+ "source_uri": "",
1579
+ "previewed_at": "2024-09-06"
1580
+ },
1581
+ "prices": {
1582
+ "usd": "0.06",
1583
+ "usd_foil": "0.09",
1584
+ "usd_etched": null,
1585
+ "eur": null,
1586
+ "eur_foil": null,
1587
+ "tix": "0.01"
1588
+ },
1589
+ "related_uris": {
1590
+ "gatherer": "https://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=672918&printed=false",
1591
+ "tcgplayer_infinite_articles": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Darticle%26game%3Dmagic%26partner%3Dscryfall%26q%3DSwamp",
1592
+ "tcgplayer_infinite_decks": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Ddeck%26game%3Dmagic%26partner%3Dscryfall%26q%3DSwamp",
1593
+ "edhrec": "https://edhrec.com/route/?cc=Swamp"
1594
+ },
1595
+ "purchase_uris": {
1596
+ "tcgplayer": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&u=https%3A%2F%2Fwww.tcgplayer.com%2Fproduct%2F576528%3Fpage%3D1",
1597
+ "cardmarket": "https://www.cardmarket.com/en/Magic/Products/Search?referrer=scryfall&searchString=Swamp&utm_campaign=card_prices&utm_medium=text&utm_source=scryfall",
1598
+ "cardhoarder": "https://www.cardhoarder.com/cards/130683?affiliate_id=scryfall&ref=card-profile&utm_campaign=affiliate&utm_medium=card&utm_source=scryfall"
1599
+ }
1600
+ },
1601
+ {
1602
+ "object": "card",
1603
+ "id": "cbd95de0-702a-4b88-a1cc-981cf1d9673e",
1604
+ "oracle_id": "56719f6a-1a6c-4c0a-8d21-18f7d7350b68",
1605
+ "multiverse_ids": [672919],
1606
+ "mtgo_id": 130685,
1607
+ "arena_id": 92377,
1608
+ "tcgplayer_id": 576529,
1609
+ "name": "Swamp",
1610
+ "lang": "en",
1611
+ "released_at": "2024-09-27",
1612
+ "uri": "https://api.scryfall.com/cards/cbd95de0-702a-4b88-a1cc-981cf1d9673e",
1613
+ "scryfall_uri": "https://scryfall.com/card/dsk/282/swamp?utm_source=api",
1614
+ "layout": "normal",
1615
+ "highres_image": true,
1616
+ "image_status": "highres_scan",
1617
+ "image_uris": {
1618
+ "small": "https://cards.scryfall.io/small/front/c/b/cbd95de0-702a-4b88-a1cc-981cf1d9673e.jpg?1726286927",
1619
+ "normal": "https://cards.scryfall.io/normal/front/c/b/cbd95de0-702a-4b88-a1cc-981cf1d9673e.jpg?1726286927",
1620
+ "large": "https://cards.scryfall.io/large/front/c/b/cbd95de0-702a-4b88-a1cc-981cf1d9673e.jpg?1726286927",
1621
+ "png": "https://cards.scryfall.io/png/front/c/b/cbd95de0-702a-4b88-a1cc-981cf1d9673e.png?1726286927",
1622
+ "art_crop": "https://cards.scryfall.io/art_crop/front/c/b/cbd95de0-702a-4b88-a1cc-981cf1d9673e.jpg?1726286927",
1623
+ "border_crop": "https://cards.scryfall.io/border_crop/front/c/b/cbd95de0-702a-4b88-a1cc-981cf1d9673e.jpg?1726286927"
1624
+ },
1625
+ "mana_cost": "",
1626
+ "cmc": 0,
1627
+ "type_line": "Basic Land — Swamp",
1628
+ "oracle_text": "({T}: Add {B}.)",
1629
+ "colors": [],
1630
+ "color_identity": [
1631
+ "B"
1632
+ ],
1633
+ "keywords": [],
1634
+ "produced_mana": [
1635
+ "B"
1636
+ ],
1637
+ "legalities": {
1638
+ "standard": "legal",
1639
+ "future": "legal",
1640
+ "historic": "legal",
1641
+ "timeless": "legal",
1642
+ "gladiator": "legal",
1643
+ "pioneer": "legal",
1644
+ "explorer": "legal",
1645
+ "modern": "legal",
1646
+ "legacy": "legal",
1647
+ "pauper": "legal",
1648
+ "vintage": "legal",
1649
+ "penny": "legal",
1650
+ "commander": "legal",
1651
+ "oathbreaker": "legal",
1652
+ "standardbrawl": "legal",
1653
+ "brawl": "legal",
1654
+ "alchemy": "legal",
1655
+ "paupercommander": "legal",
1656
+ "duel": "legal",
1657
+ "oldschool": "not_legal",
1658
+ "premodern": "legal",
1659
+ "predh": "legal"
1660
+ },
1661
+ "games": [
1662
+ "paper",
1663
+ "mtgo",
1664
+ "arena"
1665
+ ],
1666
+ "reserved": false,
1667
+ "foil": true,
1668
+ "nonfoil": true,
1669
+ "finishes": [
1670
+ "nonfoil",
1671
+ "foil"
1672
+ ],
1673
+ "oversized": false,
1674
+ "promo": false,
1675
+ "reprint": true,
1676
+ "variation": false,
1677
+ "set_id": "a111d8a9-b647-48ec-afab-2b78f92173f5",
1678
+ "set": "dsk",
1679
+ "set_name": "Duskmourn: House of Horror",
1680
+ "set_type": "expansion",
1681
+ "set_uri": "https://api.scryfall.com/sets/a111d8a9-b647-48ec-afab-2b78f92173f5",
1682
+ "set_search_uri": "https://api.scryfall.com/cards/search?order=set&q=e%3Adsk&unique=prints",
1683
+ "scryfall_set_uri": "https://scryfall.com/sets/dsk?utm_source=api",
1684
+ "rulings_uri": "https://api.scryfall.com/cards/cbd95de0-702a-4b88-a1cc-981cf1d9673e/rulings",
1685
+ "prints_search_uri": "https://api.scryfall.com/cards/search?order=released&q=oracleid%3A56719f6a-1a6c-4c0a-8d21-18f7d7350b68&unique=prints",
1686
+ "collector_number": "282",
1687
+ "digital": false,
1688
+ "rarity": "common",
1689
+ "card_back_id": "0aeebaf5-8c7d-4636-9e82-8c27447861f7",
1690
+ "artist": "Néstor Ossandón Leal",
1691
+ "artist_ids": [
1692
+ "7a6f1667-a8ac-47f5-a302-f71cb54b2adf"
1693
+ ],
1694
+ "illustration_id": "6ee212d6-cabf-416c-8551-4b64b8caa668",
1695
+ "border_color": "black",
1696
+ "frame": "2015",
1697
+ "full_art": false,
1698
+ "textless": false,
1699
+ "booster": true,
1700
+ "story_spotlight": false,
1701
+ "preview": {
1702
+ "source": "Wizards of the Coast",
1703
+ "source_uri": "",
1704
+ "previewed_at": "2024-09-06"
1705
+ },
1706
+ "prices": {
1707
+ "usd": "0.06",
1708
+ "usd_foil": "0.17",
1709
+ "usd_etched": null,
1710
+ "eur": null,
1711
+ "eur_foil": null,
1712
+ "tix": "0.02"
1713
+ },
1714
+ "related_uris": {
1715
+ "gatherer": "https://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=672919&printed=false",
1716
+ "tcgplayer_infinite_articles": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Darticle%26game%3Dmagic%26partner%3Dscryfall%26q%3DSwamp",
1717
+ "tcgplayer_infinite_decks": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Ddeck%26game%3Dmagic%26partner%3Dscryfall%26q%3DSwamp",
1718
+ "edhrec": "https://edhrec.com/route/?cc=Swamp"
1719
+ },
1720
+ "purchase_uris": {
1721
+ "tcgplayer": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&u=https%3A%2F%2Fwww.tcgplayer.com%2Fproduct%2F576529%3Fpage%3D1",
1722
+ "cardmarket": "https://www.cardmarket.com/en/Magic/Products/Search?referrer=scryfall&searchString=Swamp&utm_campaign=card_prices&utm_medium=text&utm_source=scryfall",
1723
+ "cardhoarder": "https://www.cardhoarder.com/cards/130685?affiliate_id=scryfall&ref=card-profile&utm_campaign=affiliate&utm_medium=card&utm_source=scryfall"
1724
+ }
1725
+ },
1726
+ {
1727
+ "object": "card",
1728
+ "id": "7442c1c7-1c10-4387-92e6-4bdea263064f",
1729
+ "oracle_id": "56719f6a-1a6c-4c0a-8d21-18f7d7350b68",
1730
+ "multiverse_ids": [672886],
1731
+ "mtgo_id": 130699,
1732
+ "arena_id": 92384,
1733
+ "tcgplayer_id": 557260,
1734
+ "cardmarket_id": 786629,
1735
+ "name": "Swamp",
1736
+ "lang": "en",
1737
+ "released_at": "2024-09-27",
1738
+ "uri": "https://api.scryfall.com/cards/7442c1c7-1c10-4387-92e6-4bdea263064f",
1739
+ "scryfall_uri": "https://scryfall.com/card/dsk/274/swamp?utm_source=api",
1740
+ "layout": "normal",
1741
+ "highres_image": true,
1742
+ "image_status": "highres_scan",
1743
+ "image_uris": {
1744
+ "small": "https://cards.scryfall.io/small/front/7/4/7442c1c7-1c10-4387-92e6-4bdea263064f.jpg?1726286897",
1745
+ "normal": "https://cards.scryfall.io/normal/front/7/4/7442c1c7-1c10-4387-92e6-4bdea263064f.jpg?1726286897",
1746
+ "large": "https://cards.scryfall.io/large/front/7/4/7442c1c7-1c10-4387-92e6-4bdea263064f.jpg?1726286897",
1747
+ "png": "https://cards.scryfall.io/png/front/7/4/7442c1c7-1c10-4387-92e6-4bdea263064f.png?1726286897",
1748
+ "art_crop": "https://cards.scryfall.io/art_crop/front/7/4/7442c1c7-1c10-4387-92e6-4bdea263064f.jpg?1726286897",
1749
+ "border_crop": "https://cards.scryfall.io/border_crop/front/7/4/7442c1c7-1c10-4387-92e6-4bdea263064f.jpg?1726286897"
1750
+ },
1751
+ "mana_cost": "",
1752
+ "cmc": 0,
1753
+ "type_line": "Basic Land — Swamp",
1754
+ "oracle_text": "({T}: Add {B}.)",
1755
+ "colors": [],
1756
+ "color_identity": [
1757
+ "B"
1758
+ ],
1759
+ "keywords": [],
1760
+ "produced_mana": [
1761
+ "B"
1762
+ ],
1763
+ "legalities": {
1764
+ "standard": "legal",
1765
+ "future": "legal",
1766
+ "historic": "legal",
1767
+ "timeless": "legal",
1768
+ "gladiator": "legal",
1769
+ "pioneer": "legal",
1770
+ "explorer": "legal",
1771
+ "modern": "legal",
1772
+ "legacy": "legal",
1773
+ "pauper": "legal",
1774
+ "vintage": "legal",
1775
+ "penny": "legal",
1776
+ "commander": "legal",
1777
+ "oathbreaker": "legal",
1778
+ "standardbrawl": "legal",
1779
+ "brawl": "legal",
1780
+ "alchemy": "legal",
1781
+ "paupercommander": "legal",
1782
+ "duel": "legal",
1783
+ "oldschool": "not_legal",
1784
+ "premodern": "legal",
1785
+ "predh": "legal"
1786
+ },
1787
+ "games": [
1788
+ "paper",
1789
+ "mtgo",
1790
+ "arena"
1791
+ ],
1792
+ "reserved": false,
1793
+ "foil": true,
1794
+ "nonfoil": true,
1795
+ "finishes": [
1796
+ "nonfoil",
1797
+ "foil"
1798
+ ],
1799
+ "oversized": false,
1800
+ "promo": false,
1801
+ "reprint": true,
1802
+ "variation": false,
1803
+ "set_id": "a111d8a9-b647-48ec-afab-2b78f92173f5",
1804
+ "set": "dsk",
1805
+ "set_name": "Duskmourn: House of Horror",
1806
+ "set_type": "expansion",
1807
+ "set_uri": "https://api.scryfall.com/sets/a111d8a9-b647-48ec-afab-2b78f92173f5",
1808
+ "set_search_uri": "https://api.scryfall.com/cards/search?order=set&q=e%3Adsk&unique=prints",
1809
+ "scryfall_set_uri": "https://scryfall.com/sets/dsk?utm_source=api",
1810
+ "rulings_uri": "https://api.scryfall.com/cards/7442c1c7-1c10-4387-92e6-4bdea263064f/rulings",
1811
+ "prints_search_uri": "https://api.scryfall.com/cards/search?order=released&q=oracleid%3A56719f6a-1a6c-4c0a-8d21-18f7d7350b68&unique=prints",
1812
+ "collector_number": "274",
1813
+ "digital": false,
1814
+ "rarity": "common",
1815
+ "card_back_id": "0aeebaf5-8c7d-4636-9e82-8c27447861f7",
1816
+ "artist": "Dan Mumford",
1817
+ "artist_ids": [
1818
+ "266fe58e-bcd6-4294-8e42-0a234ed9fb8d"
1819
+ ],
1820
+ "illustration_id": "ee6412d7-6e8e-488f-8f37-98a496eb33dc",
1821
+ "border_color": "black",
1822
+ "frame": "2015",
1823
+ "full_art": true,
1824
+ "textless": false,
1825
+ "booster": true,
1826
+ "story_spotlight": false,
1827
+ "prices": {
1828
+ "usd": "0.91",
1829
+ "usd_foil": "0.52",
1830
+ "usd_etched": null,
1831
+ "eur": "0.42",
1832
+ "eur_foil": "0.35",
1833
+ "tix": "0.01"
1834
+ },
1835
+ "related_uris": {
1836
+ "gatherer": "https://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=672886&printed=false",
1837
+ "tcgplayer_infinite_articles": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Darticle%26game%3Dmagic%26partner%3Dscryfall%26q%3DSwamp",
1838
+ "tcgplayer_infinite_decks": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&trafcat=infinite&u=https%3A%2F%2Finfinite.tcgplayer.com%2Fsearch%3FcontentMode%3Ddeck%26game%3Dmagic%26partner%3Dscryfall%26q%3DSwamp",
1839
+ "edhrec": "https://edhrec.com/route/?cc=Swamp"
1840
+ },
1841
+ "purchase_uris": {
1842
+ "tcgplayer": "https://tcgplayer.pxf.io/c/4931599/1830156/21018?subId1=api&u=https%3A%2F%2Fwww.tcgplayer.com%2Fproduct%2F557260%3Fpage%3D1",
1843
+ "cardmarket": "https://www.cardmarket.com/en/Magic/Products/Singles/Duskmourn-House-of-Horror/Swamp?referrer=scryfall&utm_campaign=card_prices&utm_medium=text&utm_source=scryfall",
1844
+ "cardhoarder": "https://www.cardhoarder.com/cards/130699?affiliate_id=scryfall&ref=card-profile&utm_campaign=affiliate&utm_medium=card&utm_source=scryfall"
1845
+ }
1846
+ }
1847
+ ]
1848
+ }
1849
+ ]
models/model.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1649f638a9cc0c9fd9d82f87918a291d769dfc23c776161521d828122cdf206a
3
+ size 823417
src/__init__.py ADDED
File without changes
src/interface.py ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import json
3
+ from .predictor import MTGPickPredictor
4
+
5
+ def create_interface(predictor):
6
+ def predict_fn(input):
7
+ state = json.loads(input.replace("'", "\""))
8
+ return predictor.predict(state)
9
+
10
+ example = {
11
+ "pack": [92163, 92375, 92091, 92173, 92257, 92112, 92212],
12
+ "pool": [92218, 92127, 92148, 92152, 92242, 92113, 92140]
13
+ }
14
+
15
+ return gr.Interface(
16
+ fn=predict_fn,
17
+ inputs=[
18
+ gr.Text(
19
+ value=json.dumps(example, indent=2),
20
+ label="Pack/Pool:"
21
+ )
22
+ ],
23
+ outputs=gr.Text(),
24
+ title="MTG Draft Pick Predictor",
25
+ description="Predict the next best card for your draft deck.",
26
+ allow_flagging="never"
27
+ )
src/mtga.py ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+
3
+ with open('../data/dsk_cards.json', 'r') as file:
4
+ dsk_cards = json.load(file)
5
+
6
+ with open('../data/dsk_lands.json', 'r') as file:
7
+ dsk_lands = json.load(file)[0]['data']
8
+
9
+ cards_by_mtga_id = {}
10
+
11
+ for card in dsk_cards:
12
+ cards_by_mtga_id[card['arena_id']] = card
13
+
14
+ for card in dsk_lands:
15
+ cards_by_mtga_id[card['arena_id']] = card
16
+
17
+ assert cards_by_mtga_id[92372]['name'] == 'Plains'
18
+
19
+ def mtga_id_to_card_name(id):
20
+ return cards_by_mtga_id[id]['name']
src/predictor.py ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ from fastai.tabular.all import *
3
+ from .mtga import mtga_id_to_card_name
4
+
5
+ class MTGPickPredictor:
6
+ def __init__(self, model_path='models/model.pkl'):
7
+ self.learn = load_learner(model_path)
8
+ # TODO: make more robust
9
+ self.card_names = [col.replace('pack_card_', '') for col in self.learn.dls.train_ds.cont_names if col.startswith(('pack_card_'))]
10
+
11
+ def predict(self, input_data):
12
+ df = self._json_to_df(input_data)
13
+ _, pred_idx, pred_probs = self.learn.predict(df.iloc[0])
14
+
15
+ #print(f"Predicted: {self.card_names[pred_idx.item()]}")
16
+ topk_values, topk_indices = pred_probs.topk(3)
17
+
18
+ result = ""
19
+ for i, (prob, idx) in enumerate(zip(topk_values, topk_indices)):
20
+ result = result + (f"{self.card_names[idx]}: {prob*100:.0f}%\n")
21
+
22
+ #return dict(zip(top_cards, top_probas))
23
+ return result
24
+
25
+ def _json_to_df(self, json_data):
26
+ # Initialize all card columns with 0
27
+ #all_cols = {f"pack_card_{card}": 0 for card in card_names} | {f"pool_{card}": 0 for card in card_names}
28
+ # TODO: this is shortcut for testing
29
+ all_cols = {col_name: 0 for col_name in self.learn.dls.train_ds.cont_names }
30
+
31
+ # Fill in pack cards
32
+ for card_id in json_data['pack']:
33
+ col_name = f"pack_card_{mtga_id_to_card_name(card_id)}"
34
+ all_cols[col_name] += 1
35
+
36
+ # Fill in pool cards
37
+ for card_id in json_data['pool']:
38
+ col_name = f"pool_{mtga_id_to_card_name(card_id)}"
39
+ all_cols[col_name] +=1
40
+
41
+ return pd.DataFrame([all_cols]).astype(float)
src/utils.py ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ def top_k_accuracy(inp, targ, k=3):
2
+ # inp is logits of shape (batch_size, n_classes)
3
+ # targ is class indices of shape (batch_size,)
4
+
5
+ # Get top 3 predictions
6
+ _, pred = inp.topk(k=k, dim=1) # pred shape: (batch_size, k)
7
+
8
+ # Expand targ to compare with predictions
9
+ targ = targ.view(-1, 1).expand_as(pred) # shape: (batch_size, k)
10
+
11
+ # Check if correct class is in top 3 predictions
12
+ correct = (pred == targ).any(dim=1)
13
+
14
+ return correct.float().mean()