From e7aa272ffca18863631920b8345e301a89012d96 Mon Sep 17 00:00:00 2001 From: Majjo Duran Date: Mon, 13 Apr 2026 18:04:10 +0200 Subject: [PATCH] feat: expand iGPU fields (Exec Units, Video RAM, DirectX, Burst Freq fix) --- main.py | 6 ++++++ scrapers/scraper_cpu.py | 22 +++++++++++++++++++--- scrapers/shared.py | 14 ++++++++++++++ seed.db | Bin 327680 -> 319488 bytes static/index.html | 8 ++++++-- 5 files changed, 45 insertions(+), 5 deletions(-) diff --git a/main.py b/main.py index 32d2893..1fe08bc 100644 --- a/main.py +++ b/main.py @@ -359,6 +359,9 @@ def api_laptops(): cs.ram_types AS cs_ram_types, cs.igpu_name AS cs_igpu_name, cs.igpu_boost_mhz AS cs_igpu_boost_mhz, + cs.igpu_exec_units AS cs_igpu_exec_units, + cs.igpu_max_vram_gb AS cs_igpu_max_vram_gb, + cs.igpu_directx AS cs_igpu_directx, cs.source_url AS cs_source_url, cs.lookup_status AS cs_lookup_status FROM laptops l @@ -414,6 +417,9 @@ def api_laptop_detail(laptop_id): cs.igpu_name AS cs_igpu_name, cs.igpu_base_mhz AS cs_igpu_base_mhz, cs.igpu_boost_mhz AS cs_igpu_boost_mhz, + cs.igpu_exec_units AS cs_igpu_exec_units, + cs.igpu_max_vram_gb AS cs_igpu_max_vram_gb, + cs.igpu_directx AS cs_igpu_directx, cs.source_url AS cs_source_url, cs.lookup_status AS cs_lookup_status FROM laptops l diff --git a/scrapers/scraper_cpu.py b/scrapers/scraper_cpu.py index 0b8ca54..6bbef20 100644 --- a/scrapers/scraper_cpu.py +++ b/scrapers/scraper_cpu.py @@ -63,6 +63,7 @@ _CPU_COLS = [ "pcie_version", "pcie_lanes", "max_ram_gb", "ram_types", "ram_speeds_mhz", "ecc_support", "igpu_name", "igpu_base_mhz", "igpu_boost_mhz", + "igpu_exec_units", "igpu_max_vram_gb", "igpu_directx", "source_url", "lookup_status", "scraped_at", ] @@ -77,6 +78,7 @@ INSERT OR REPLACE INTO cpu_specs ( pcie_version, pcie_lanes, max_ram_gb, ram_types, ram_speeds_mhz, ecc_support, igpu_name, igpu_base_mhz, igpu_boost_mhz, + igpu_exec_units, igpu_max_vram_gb, igpu_directx, source_url, lookup_status, scraped_at ) VALUES ( :cpu_key, :cpu_model_raw, :vendor, :full_name, :brand_name, @@ -88,6 +90,7 @@ INSERT OR REPLACE INTO cpu_specs ( :pcie_version, :pcie_lanes, :max_ram_gb, :ram_types, :ram_speeds_mhz, :ecc_support, :igpu_name, :igpu_base_mhz, :igpu_boost_mhz, + :igpu_exec_units, :igpu_max_vram_gb, :igpu_directx, :source_url, :lookup_status, :scraped_at ) """ @@ -326,7 +329,7 @@ def _intel_parse_specs(html: str, url: str) -> dict: "Processor Number", "Product Collection", "Code Name", "Lithography", "Launch Date", "Vertical Segment", "Marketing Status", "Total Cores", "Total Threads", "Performance-cores", "Efficient-cores", - "Processor Base Frequency", "Max Turbo Frequency", + "Processor Base Frequency", "Max Turbo Frequency", "Burst Frequency", "Intel Thermal Velocity Boost Frequency", "Cache", "TDP", "Configurable TDP-down", "Max Turbo Power", "Bus Speed", @@ -399,7 +402,7 @@ def _ark_map(specs: dict, data: dict) -> None: base = s(r'processor\s+base\s+freq|base\s+freq|base\s+clock') if base: data["base_freq_ghz"] = _parse_freq_ghz(base) - turbo = s(r'max\s*turbo\s*freq|max\s*boost|turbo\s*freq') + turbo = s(r'max\s*turbo\s*freq|max\s*boost|turbo\s*freq|^burst\s*freq') if turbo: data["max_turbo_ghz"] = _parse_freq_ghz(turbo) @@ -467,7 +470,7 @@ def _ark_map(specs: dict, data: dict) -> None: m = re.search(r'(\d+)\s*MHz', igpu_base, re.I) if m: data["igpu_base_mhz"] = int(m.group(1)) - igpu_boost = s(r'graphics.*dynamic.*freq|graphics.*max.*freq|gpu.*max.*freq') + igpu_boost = s(r'graphics.*dynamic.*freq|graphics.*max.*freq|gpu.*max.*freq|graphics.*burst.*freq') if igpu_boost: m = re.search(r'(\d+[.,]\d*)\s*GHz', igpu_boost, re.I) if m: @@ -476,6 +479,19 @@ def _ark_map(specs: dict, data: dict) -> None: m2 = re.search(r'(\d+)\s*MHz', igpu_boost, re.I) if m2: data["igpu_boost_mhz"] = int(m2.group(1)) + exec_units = s(r'execution\s*units?') + if exec_units: + m = re.search(r'(\d+)', exec_units) + if m: + data["igpu_exec_units"] = int(m.group(1)) + vram = s(r'graphics.*video.*mem|gpu.*video.*mem|graphics.*max.*mem') + if vram: + m = re.search(r'(\d+)\s*GB', vram, re.I) + if m: + data["igpu_max_vram_gb"] = int(m.group(1)) + directx = s(r'directx') + if directx: + data["igpu_directx"] = directx.strip() def _is_captcha_page(page) -> bool: diff --git a/scrapers/shared.py b/scrapers/shared.py index e4a80a6..673b402 100644 --- a/scrapers/shared.py +++ b/scrapers/shared.py @@ -215,6 +215,9 @@ CREATE TABLE IF NOT EXISTS cpu_specs ( igpu_name TEXT, igpu_base_mhz INTEGER, igpu_boost_mhz INTEGER, + igpu_exec_units INTEGER, + igpu_max_vram_gb INTEGER, + igpu_directx TEXT, source_url TEXT, lookup_status TEXT DEFAULT 'pending', scraped_at TEXT @@ -232,6 +235,17 @@ def init_db(path: str, reset: bool = False) -> sqlite3.Connection: log.info("Database reset.") conn.executescript(SCHEMA) conn.commit() + # Migrate: add new iGPU columns if they don't exist yet + for _col, _typedef in [ + ("igpu_exec_units", "INTEGER"), + ("igpu_max_vram_gb", "INTEGER"), + ("igpu_directx", "TEXT"), + ]: + try: + conn.execute(f"ALTER TABLE cpu_specs ADD COLUMN {_col} {_typedef}") + conn.commit() + except sqlite3.OperationalError: + pass # column already exists return conn diff --git a/seed.db b/seed.db index 91174f2261d245f2e180a19130ebec44810b04e0..340a9e90fb35a59f419ce820fc15e0701b6fd784 100644 GIT binary patch delta 8819 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 diff --git a/static/index.html b/static/index.html index a15725f..5108d52 100644 --- a/static/index.html +++ b/static/index.html @@ -724,7 +724,7 @@ async function loadDetail(id) { ${l.cs_l2_cache ? specItem('L2 Cache', l.cs_l2_cache) : ''} ${(l.cs_l3_cache || l.cpu_cache) ? specItem('L3 Cache', l.cs_l3_cache || l.cpu_cache) : ''} ${specItem('TDP', l.cs_tdp_w ? l.cs_tdp_w + ' W' : null)} - ${specItem('Max Turbo Power', l.cs_max_tdp_w ? l.cs_max_tdp_w + ' W' : null)} + ${l.cs_max_tdp_w ? specItem('Max Turbo Power', l.cs_max_tdp_w + ' W') : ''} ${specItem('PCIe', l.cs_pcie_version ? 'PCIe ' + l.cs_pcie_version : null)} ${hasCpuSpecs && l.cs_source_url ? `Intel spec page ↗` : ''} @@ -755,7 +755,11 @@ async function loadDetail(id) {
${l.has_dedicated_gpu ? specItem('GPU', l.gpu) : ''} ${specItem('iGPU', l.cs_igpu_name || (!l.has_dedicated_gpu ? l.gpu : null))} - ${specItem('iGPU Boost', l.cs_igpu_boost_mhz ? (l.cs_igpu_boost_mhz / 1000).toFixed(2) + ' GHz' : null)} + ${l.cs_igpu_base_mhz ? specItem('iGPU Base', l.cs_igpu_base_mhz + ' MHz') : ''} + ${l.cs_igpu_boost_mhz ? specItem('iGPU Boost', (l.cs_igpu_boost_mhz / 1000).toFixed(2) + ' GHz') : ''} + ${l.cs_igpu_exec_units ? specItem('Exec Units', l.cs_igpu_exec_units) : ''} + ${l.cs_igpu_max_vram_gb ? specItem('Video RAM', l.cs_igpu_max_vram_gb + ' GB') : ''} + ${l.cs_igpu_directx ? specItem('DirectX', l.cs_igpu_directx) : ''}