ledger: stackchain magazine photo catalog extract
This commit is contained in:
1 parent
2613a39256
commit
311aae865f
3 files changed
+138
No files matched your search
@@ -0,0 +1,63 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Extract the Stackchain Magazine photo catalog into a normalized table (CSV + JSON).
|
||||
|
||||
Source: /root/stackchain_catalog.md (the 'vee-supply-2026-09-21' magazine transcription)
|
||||
Read the whole file here; the result is evidence, not a claim.
|
||||
"""
|
||||
import csv
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
|
||||
SRC = "/root/stackchain_catalog.md"
|
||||
OUT_DIR = "/root/.hermes/wizard-outputs/ledger"
|
||||
OS = os.path.join(OUT_DIR, "stackchain_catalog.csv")
|
||||
JS = os.path.join(OUT_DIR, "stackchain_catalog.json")
|
||||
|
||||
with open(SRC,encoding="utf-8") as f:
|
||||
raw = f.read()
|
||||
|
||||
# Split into entry blocks on '## N. <filename> — <section>' headers.
|
||||
entry_re = re.compile(r"^## (\d+)\. (\S+\.\S+) — (.+)$", re.M)
|
||||
parts = entry_re.split(raw)
|
||||
# parts: [head, num, fname, title, body, num, fname, title, body, ...]
|
||||
entries = []
|
||||
for i in range(1, len(parts), 4):
|
||||
num = parts[i]
|
||||
fname = parts[i+1]
|
||||
title = parts[i+2]
|
||||
body = parts[i+3]
|
||||
# Type
|
||||
m = re.search(r"^\s*-\s*\*\*Type:\*\*\s*(.*)$", body, re.M)
|
||||
typ = m.group(1).strip() if m else ""
|
||||
# Text: capture the first fenced code block (the exact transcription)
|
||||
tm = re.search(r"```(.*?)```", body, re.S)
|
||||
text_block = tm.group(1) if tm else ""
|
||||
text_lines = [ln.strip() for ln in text_block.splitlines() if ln.strip()]
|
||||
text_preview = (text_lines[0][:160] + ("…" if len(text_lines[0]) > 160 else "")) if text_lines else ""
|
||||
# Identifiers (remainder of the Identifiers line)
|
||||
im = re.search(r"^\s*-\s*\*\*Identifiers:\*\*\s*(.*)$", body, re.M)
|
||||
ident = im.group(1).strip() if im else ""
|
||||
entries.append({
|
||||
"id": int(num),
|
||||
"filename": fname,
|
||||
"section": title.strip(),
|
||||
"type": typ,
|
||||
"text_preview": text_preview,
|
||||
"identifiers": ident,
|
||||
})
|
||||
|
||||
os.makedirs(OUT_DIR, exist_ok=True)
|
||||
|
||||
with open(OS, "w", newline="", encoding="utf-8") as f:
|
||||
w = csv.DictWriter(f, fieldnames=["id","filename","section","type","text_preview","identifiers"])
|
||||
w.writeheader()
|
||||
for e in entries:
|
||||
w.writerow(e)
|
||||
|
||||
with open(JS, "w", encoding="utf-8") as f:
|
||||
json.dump(entries, f, indent=2, ensure_ascii=False)
|
||||
|
||||
print("entries:", len(entries))
|
||||
for e in entries:
|
||||
print(f"{e['id']:>2} | {e['filename']:<24} | {e['section']:<28} | {e['type']:<28} | {e['text_preview'][:60]!r}")
|
||||
@@ -0,0 +1,9 @@
|
||||
id,filename,section,type,text_preview,identifiers
|
||||
1,img_67eedaf526e7.jpg,COVER,COVER,STACKCHAIN,"Mascot logo (cartoon monkey/chimp, orange bandana, cursive ""stackchain"" wordmark). ""18+"" age badge. Mirrored/reversed text elements on cover (""SELF-CUSTODY//BITCOIN ONLY"", graffiti ""MAGAZINE""). Bylines/author names: MADEX, ISRELI/ISBELL, DENIZ, SKYLER (no @handles). No block-height notation or sat amounts readable."
|
||||
2,img_fcb2e6a8f066.jpg,PHOTO OF PERSON HOLDING MAGAZINE,PHOTO_OF_PERSON_HOLDING_MAGAZINE,B/H872.372,"Spine call-number label ""B/H872.372"". Cover logo ""MACHINA"". No @handles, avatars, or sats amounts readable."
|
||||
3,img_72f52468393f.jpg,"PAGE (""58K MEMES"")",PAGE,STACKCHAIN MAGAZINE,"""STACKCHAIN MAGAZINE"" logo; ""@chain""; hashtags #GoPio, #DSB; ""D&B GANG""; ""LBDC STABLECOIN""; ""Lokepetyfork"". Amounts: 58K, 58k, 59k, 100K, 100k, $417.00, $580.00. No block heights visible."
|
||||
4,img_d5ada9cee4e9.jpg,"PAGE (""GO PIOS"")",PAGE,DS #GOPIOS,"None (no @handles, watermarks, or sats amounts readable)."
|
||||
5,img_7333a3df0aac.jpg,"PAGE (""MEME MUSEUM"")",PAGE,LOKOPETTYFORK,"""@Lokopettyfork""; ""LokoPettyFork""/""Lokopettyfork""; ""verizon"" logo; ""MSTR"" ticker; Bitcoin logo; ""₿SB"" reference. Amounts: $70,206.87, $10.00, 3,052.52, 3.01%, 58K, 100K, $100, 100, $100.00. **Number ""8722100"" appears (likely a block height, unconfirmed).**"
|
||||
6,img_05d51da1fd9d.jpg,COVER (Captain's Log 4),COVER,STACKCHAIN,"No @handles or amounts readable. Bitcoin (₿) symbols on gold coin + octopus head. Lower-left logo: cartoon monkey with red bandana + ""MAGAZINE"" beneath. No block-height notation readable."
|
||||
7,img_125532ea2e01.jpg,COVER,COVER,"B/H: 850,683","**Block height printed on orange band: ""B/H: 850,683""** — historical record. Brand ""STACKCHAIN"" in cover text. No @handles or sat amounts readable; the only numeric identifier is block height 850,683."
|
||||
8,img_1325775751e6.jpg,"PAGE (""MEME MUSEUM"")",PAGE,[unreadable]CLASSIC,"No @handles visible. **QR code printed on left page edge.** ""Stackchainers"" branding in party meme. Amounts: 1888 (stacked, per caption), 70K, 85.11 (small partially-legible label). No block heights readable."
|
||||
|
@@ -0,0 +1,66 @@
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"filename": "img_67eedaf526e7.jpg",
|
||||
"section": "COVER",
|
||||
"type": "COVER",
|
||||
"text_preview": "STACKCHAIN",
|
||||
"identifiers": "Mascot logo (cartoon monkey/chimp, orange bandana, cursive \"stackchain\" wordmark). \"18+\" age badge. Mirrored/reversed text elements on cover (\"SELF-CUSTODY//BITCOIN ONLY\", graffiti \"MAGAZINE\"). Bylines/author names: MADEX, ISRELI/ISBELL, DENIZ, SKYLER (no @handles). No block-height notation or sat amounts readable."
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"filename": "img_fcb2e6a8f066.jpg",
|
||||
"section": "PHOTO OF PERSON HOLDING MAGAZINE",
|
||||
"type": "PHOTO_OF_PERSON_HOLDING_MAGAZINE",
|
||||
"text_preview": "B/H872.372",
|
||||
"identifiers": "Spine call-number label \"B/H872.372\". Cover logo \"MACHINA\". No @handles, avatars, or sats amounts readable."
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"filename": "img_72f52468393f.jpg",
|
||||
"section": "PAGE (\"58K MEMES\")",
|
||||
"type": "PAGE",
|
||||
"text_preview": "STACKCHAIN MAGAZINE",
|
||||
"identifiers": "\"STACKCHAIN MAGAZINE\" logo; \"@chain\"; hashtags #GoPio, #DSB; \"D&B GANG\"; \"LBDC STABLECOIN\"; \"Lokepetyfork\". Amounts: 58K, 58k, 59k, 100K, 100k, $417.00, $580.00. No block heights visible."
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"filename": "img_d5ada9cee4e9.jpg",
|
||||
"section": "PAGE (\"GO PIOS\")",
|
||||
"type": "PAGE",
|
||||
"text_preview": "DS #GOPIOS",
|
||||
"identifiers": "None (no @handles, watermarks, or sats amounts readable)."
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"filename": "img_7333a3df0aac.jpg",
|
||||
"section": "PAGE (\"MEME MUSEUM\")",
|
||||
"type": "PAGE",
|
||||
"text_preview": "LOKOPETTYFORK",
|
||||
"identifiers": "\"@Lokopettyfork\"; \"LokoPettyFork\"/\"Lokopettyfork\"; \"verizon\" logo; \"MSTR\" ticker; Bitcoin logo; \"₿SB\" reference. Amounts: $70,206.87, $10.00, 3,052.52, 3.01%, 58K, 100K, $100, 100, $100.00. **Number \"8722100\" appears (likely a block height, unconfirmed).**"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"filename": "img_05d51da1fd9d.jpg",
|
||||
"section": "COVER (Captain's Log 4)",
|
||||
"type": "COVER",
|
||||
"text_preview": "STACKCHAIN",
|
||||
"identifiers": "No @handles or amounts readable. Bitcoin (₿) symbols on gold coin + octopus head. Lower-left logo: cartoon monkey with red bandana + \"MAGAZINE\" beneath. No block-height notation readable."
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"filename": "img_125532ea2e01.jpg",
|
||||
"section": "COVER",
|
||||
"type": "COVER",
|
||||
"text_preview": "B/H: 850,683",
|
||||
"identifiers": "**Block height printed on orange band: \"B/H: 850,683\"** — historical record. Brand \"STACKCHAIN\" in cover text. No @handles or sat amounts readable; the only numeric identifier is block height 850,683."
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"filename": "img_1325775751e6.jpg",
|
||||
"section": "PAGE (\"MEME MUSEUM\")",
|
||||
"type": "PAGE",
|
||||
"text_preview": "[unreadable]CLASSIC",
|
||||
"identifiers": "No @handles visible. **QR code printed on left page edge.** \"Stackchainers\" branding in party meme. Amounts: 1888 (stacked, per caption), 70K, 85.11 (small partially-legible label). No block heights readable."
|
||||
}
|
||||
]
|
||||
Reference in new issue
Block a user