Deploy / build (push) Successful in 2m50s
Generated through post_art.py on the local RTX 3060. Metaphor: four identical steel pipes drawing from one dark reservoir, plus a single short pipe that bypasses all four into a lit chamber (four redundant reads vs the bypass path). - banner 1600x900 from the planned crop (band 755,119-1281,675, x1.43, subject at 47.0% of the banner width) instead of the on-the-fly fallback - EN + ZH OG cards, 800/400 list thumbs, banner webp - evidence line: 4 reads/file - 960 per page - 0.3 us cache hit State mirrored into the repo so git alone reproduces the frame: the caption, plus this slug in metaphors.json and prompts_catalog.json. banner-plan.json also picks up the 22 frames that were in art-meta but had no plan entry. Verified: check-assets 190/190 with the post temporarily published, both pages point at their own og card and banner, then reverted to draft true and rebuilt -- no page left in dist. ComfyUI terminated after the render.
338 lines
13 KiB
JSON
338 lines
13 KiB
JSON
{
|
|
"_about": "Inputs for scripts/og-gen/render_from_art.mjs ('one art, four targets'). One entry per post: `art` = the zero-text base frame (default <art-dir>/<slug>.png), `evidence` = the short factual line shown in the card's evidence bar (REQUIRED, written by hand — never derived), optional `ogTitle_en` / `ogTitle_zh` = shortened display titles for the card only (consultant question 1, option C: the article keeps its real title), optional `tags` = override the three badge tags. Cards render from the post's own frontmatter (title/description/category) unless an ogTitle override is present.",
|
|
"_status": "73 of 73 posts have a hand-written evidence line; base art is generated from C:/AI/ideogram4/captions/<slug>.json",
|
|
"running-ai-video-locally-on-a-12gb-gpu": {
|
|
"evidence": "1280x736 -> 1080p - 32 min / 5 s - $0",
|
|
"ogTitle_en": "AI Video on a 12 GB GPU",
|
|
"ogTitle_zh": "12GB 显卡跑 1080p 视频"
|
|
},
|
|
"adding-a-domain-to-someone-elses-mail-server": {
|
|
"evidence": "4 DNS records · 554 antispam reject"
|
|
},
|
|
"adding-english-mode-to-a-chinese-only-web-app": {
|
|
"evidence": "no browser API · sub_filter EN mode"
|
|
},
|
|
"ai-furniture-compositing-with-flux-kontext": {
|
|
"evidence": "kontext multi-image · tainted canvas fix"
|
|
},
|
|
"authentik-css-greater-than-bug": {
|
|
"evidence": "1 escaped '>' · CSS silently dropped"
|
|
},
|
|
"authentik-forward-auth-gate-wasnt-live": {
|
|
"evidence": "host 302 · public 200 · 2 ingress layers"
|
|
},
|
|
"authentik-major-upgrade-gotchas": {
|
|
"evidence": "2025.8 → 2026.8 · auth_flow mixup"
|
|
},
|
|
"automating-cyberpanel-without-the-ui": {
|
|
"evidence": "v2 JSON API gone · session + CSRF"
|
|
},
|
|
"best-ai-video-generators-2026": {
|
|
"evidence": "free vs paid · local LTX-2.3 test"
|
|
},
|
|
"calibrating-intel-quick-sync-hevc-quality": {
|
|
"evidence": "ICQ 28-30 cliff · fast == medium"
|
|
},
|
|
"chainlink-vrf-v2-lottery-contract": {
|
|
"evidence": "VRF v2.5 · mock-funding bug"
|
|
},
|
|
"docker-reported-exit-0-the-oom-killer-disagreed": {
|
|
"evidence": "exit 0 · dmesg: 6x cgroup OOM kills"
|
|
},
|
|
"does-hevc-actually-shrink-your-files": {
|
|
"evidence": "NVENC cq27 bigger · x265 -10-22%"
|
|
},
|
|
"embedding-fonts-so-a-pdf-looks-the-same-everywhere": {
|
|
"evidence": "4 families · 8 faces · 2 renderers"
|
|
},
|
|
"every-player-stuttered-the-file-was-fine": {
|
|
"evidence": "5818/5818 intervals · 0 duplicate PTS"
|
|
},
|
|
"five-step-ai-roadmap-what-i-actually-run": {
|
|
"evidence": "whisper + mem0 in production · step 4 skipped"
|
|
},
|
|
"fully-on-chain-svg-nfts": {
|
|
"evidence": "base64 SVG in tokenURI() · mood flip on-chain"
|
|
},
|
|
"hardening-a-tor-onion-service": {
|
|
"evidence": "bind 0.0.0.0:80 denied · onion v3"
|
|
},
|
|
"hello-world": {
|
|
"evidence": "~140-container homelab · self-hosted"
|
|
},
|
|
"how-i-built-the-digikedai-telegram-bot": {
|
|
"evidence": "Telegram + WhatsApp · LiteLLM gateway"
|
|
},
|
|
"how-i-host-this-blog": {
|
|
"evidence": "git push · act_runner · nginx"
|
|
},
|
|
"how-i-made-my-own-songs-with-suno-ai": {
|
|
"evidence": "7 songs · lyrics + prompts"
|
|
},
|
|
"how-i-vetted-20-vps-providers-with-parallel-subagents": {
|
|
"evidence": "20 providers · 3 hours · subagents"
|
|
},
|
|
"how-to-verify-a-hosting-provider-before-you-buy": {
|
|
"evidence": "rdap.org domain age · AUP read"
|
|
},
|
|
"i-let-an-agent-manage-my-shopee-vouchers": {
|
|
"evidence": "mode=propose gate · RM140 voucher unapproved"
|
|
},
|
|
"it-reported-success-nothing-had-changed": {
|
|
"evidence": "12.5 MB of 403 MB · rename never landed"
|
|
},
|
|
"jpa-version-field-lost-update": {
|
|
"evidence": "@Version · stale PUT → 409"
|
|
},
|
|
"loop-engineering-without-a-coding-agent": {
|
|
"evidence": "11 cron jobs · 8 zero-AI loops"
|
|
},
|
|
"migrating-codeigniter-iis-to-openlitespeed": {
|
|
"evidence": "17,000-line CI4 · env() fatal"
|
|
},
|
|
"my-backup-was-using-someone-elses-api-quota": {
|
|
"evidence": "1 TB restic seed · shared rclone quota"
|
|
},
|
|
"n8n-v1-to-v2-upgrade-gotchas": {
|
|
"evidence": "1.x → 2.40.1 · 7 silent breaks"
|
|
},
|
|
"nocodb-sso-is-a-licensed-feature": {
|
|
"evidence": "OIDC env accepted · first login crashes"
|
|
},
|
|
"one-hostname-public-tracker-sso-dashboard": {
|
|
"evidence": "1 host · tracker public, dashboard SSO"
|
|
},
|
|
"one-prometheus-for-unraid-synology-and-a-vps": {
|
|
"evidence": "3 hosts · 1 prometheus · 0 false panels"
|
|
},
|
|
"passbolt-hang-three-failure-modes": {
|
|
"evidence": "null fingerprint · 3 failure modes"
|
|
},
|
|
"patching-workbench-26-for-mariadb": {
|
|
"evidence": "26.7.0 TypeError · 3 patches"
|
|
},
|
|
"putting-a-front-door-on-an-app-you-cant-modify": {
|
|
"evidence": "5879-byte SPA · 3 injected lines"
|
|
},
|
|
"read-only-nocodb-dashboard-for-a-remote-database": {
|
|
"evidence": "SNAT source IP · 0 rows copied"
|
|
},
|
|
"reading-a-containers-own-api-docs": {
|
|
"evidence": "4 docker commands · image is the spec"
|
|
},
|
|
"replacing-rdpguard-with-ipban": {
|
|
"evidence": "RDPGuard 7.8.7 → IPBan 4.1.0 · 12 IPs"
|
|
},
|
|
"running-production-infrastructure-solo": {
|
|
"evidence": "162 containers · 3 hosts · 78 compose stacks"
|
|
},
|
|
"running-tts-as-a-service-with-token-sidecars": {
|
|
"evidence": "tokens expire 10 min / 1 h · sidecars"
|
|
},
|
|
"scraping-bot-walled-marketplace-warm-browser-session": {
|
|
"evidence": "warm CDP session · split waits"
|
|
},
|
|
"self-healing-digital-goods-entitlements": {
|
|
"evidence": "5 workflows · NocoDB + n8n + AList"
|
|
},
|
|
"self-hosted-speech-to-text-api": {
|
|
"evidence": "whisper.cpp large-v3 · ~5x typing"
|
|
},
|
|
"self-hosting-mem0-memory-stack": {
|
|
"evidence": "mem0 + LiteLLM + pgvector · :20015"
|
|
},
|
|
"shipping-an-ai-photo-editor-as-a-wordpress-plugin": {
|
|
"evidence": "22 versions · fal.ai async queue"
|
|
},
|
|
"smartctl-exit-code-32-skips-the-disks-that-matter": {
|
|
"evidence": "rc=32 is not failure · skips bad disks"
|
|
},
|
|
"space-reclamation-wasnt-stuck-it-was-waiting": {
|
|
"evidence": "121 GiB returned · scheduled 09:29"
|
|
},
|
|
"stop-writing-agent-prompts-for-deterministic-work": {
|
|
"evidence": "29 straight failures · 1 string compare"
|
|
},
|
|
"syncing-a-self-improving-ai-agent-across-machines": {
|
|
"evidence": "git-backed profile · manual sync"
|
|
},
|
|
"synology-api-401-with-the-correct-password": {
|
|
"evidence": "401 twice · 2 causes · 3 commands"
|
|
},
|
|
"synology-spreadsheet-api-is-a-container": {
|
|
"evidence": "1515 APIs · 4 traps"
|
|
},
|
|
"that-dying-ssd-was-just-a-bad-sata-cable": {
|
|
"evidence": "WRITE FPDMA timeout · 1 SATA cable"
|
|
},
|
|
"the-cause-was-trim-not-the-ssds": {
|
|
"evidence": "corruption_errs 27 / 31 · queued TRIM"
|
|
},
|
|
"the-nocodb-attachment-that-wouldnt-update": {
|
|
"evidence": "300 rows · 1 lookahead regex miss"
|
|
},
|
|
"the-upstream-was-deleted-then-came-back-rewritten": {
|
|
"evidence": "repo 404 · 233 commits rewrite"
|
|
},
|
|
"two-ways-a-javascript-file-stops-working-and-looks-fine": {
|
|
"evidence": "shadowed name · let below call"
|
|
},
|
|
"unraid-stop-array-hangs-on-swapfile": {
|
|
"evidence": "8 GB swapfile pins /mnt/cache"
|
|
},
|
|
"upgrading-codeigniter-46-to-47": {
|
|
"evidence": "4.6 → 4.7 · 2 unlisted fatals"
|
|
},
|
|
"using-chinese-llm-apis-from-malaysia": {
|
|
"evidence": "GLM-5.3 · DeepSeek V4 · RMB top-up"
|
|
},
|
|
"verifying-a-pdf-report-page-by-page": {
|
|
"evidence": "19 pages · every deviation < 2 pt"
|
|
},
|
|
"vetting-an-open-source-dependency-before-you-bet-on-it": {
|
|
"evidence": "6 checks · grep beats the README"
|
|
},
|
|
"when-smart-says-healthy-but-your-raid-is-corrupting-data": {
|
|
"evidence": "SMART healthy · checksum 0x8941f998"
|
|
},
|
|
"why-500000-lines-of-commit-churn-only-left-230000-in-production": {
|
|
"evidence": "518,000 added · 235,000 kept · 5 repos"
|
|
},
|
|
"why-chrome-forgets-its-tabs-in-a-container": {
|
|
"evidence": "RestoreOnStartup=1 · 70-line keeper"
|
|
},
|
|
"why-i-still-bought-a-local-gpu": {
|
|
"evidence": "stronger frontier · local for retries + batch"
|
|
},
|
|
"why-my-on-chain-nft-art-changed-on-windows": {
|
|
"evidence": "autocrlf CRLF · base64 differs"
|
|
},
|
|
"why-telegram-bot-notifications-die": {
|
|
"evidence": "400 on sendPhoto · getMe fine · IPv6-only DNS"
|
|
},
|
|
"why-your-cdp-clicks-silently-fail": {
|
|
"evidence": "scroll-behavior:smooth · rect expired"
|
|
},
|
|
"why-your-grafana-dashboard-shows-no-data": {
|
|
"evidence": "41 panels No data · variable filtered itself"
|
|
},
|
|
"why-your-headless-browser-cant-scrape-everything": {
|
|
"evidence": "Goofish blocks · Carousell serves"
|
|
},
|
|
"your-disk-full-alert-is-lying": {
|
|
"evidence": "3% free = 500 GB · alert fires wrong way"
|
|
},
|
|
"yue2-on-a-12gb-gpu-songs-that-lost-their-endings": {
|
|
"evidence": "12 takes - all 240.000 s - cap now 300 s"
|
|
},
|
|
"generating-subtitles-for-songs-without-timestamps": {
|
|
"evidence": "18 songs - 342 lines - 0.96 anchor coverage"
|
|
},
|
|
"why-i-built-a-video-knowledge-base": {
|
|
"evidence": "263 pages · 20ms search · 0 cloud STT fees"
|
|
},
|
|
"how-i-built-an-automated-music-video-pipeline": {
|
|
"evidence": "LRC + Remotion 1080p · CDP upload · 8-lang subs published",
|
|
"ogTitle_en": "Automated MV Pipeline with Remotion & CDP",
|
|
"ogTitle_zh": "Remotion 与 Docker CDP 自动生成发布 MV"
|
|
},
|
|
"uploading-large-videos-to-youtube-via-cdp": {
|
|
"evidence": "130MB video via Portainer archive PUT · 0 RAM spikes",
|
|
"ogTitle_en": "Upload 100MB+ Videos to YouTube via CDP",
|
|
"ogTitle_zh": "CDP 上传百兆视频:Docker 归档法"
|
|
},
|
|
"debugging-remotion-video-jitter": {
|
|
"evidence": "bassScale 30fps tremor killed · 2-layer opacity crossfade",
|
|
"ogTitle_en": "Debugging Remotion Video Jitter",
|
|
"ogTitle_zh": "排查 Remotion 视频抽搐与透明度叠化"
|
|
},
|
|
"self-hosted-tts-cosyvoice2-n8n-gpu": {
|
|
"evidence": "3.2GB VRAM · 300ms first-packet · 0 cloud API fees",
|
|
"ogTitle_en": "Self-Hosted Neural TTS with CosyVoice 2 & N8N",
|
|
"ogTitle_zh": "自建 CosyVoice 2 高保真语音栈与 N8N 联动"
|
|
},
|
|
"why-is-my-tts-model-repeating-percent": {
|
|
"evidence": "URL percent-encoding trap killed · 2-layer defensive fix",
|
|
"ogTitle_en": "Why Your TTS Model Keeps Saying \"Percent\"",
|
|
"ogTitle_zh": "为什么本地语音合成一直在念 Percent?"
|
|
},
|
|
"php2shell-patching-every-php-runtime-i-manage": {
|
|
"evidence": "8 public sites in 2 min · 7 on 8.5.12 · 8 dead rules"
|
|
},
|
|
"giving-ai-your-mouse-and-keyboard-safely": {
|
|
"evidence": "PowerShell & Registry stripped · 0.5x downscale · 0 flash",
|
|
"ogTitle_en": "Safe Guardrails for Windows Desktop MCP",
|
|
"ogTitle_zh": "给 AI 鼠标键盘前的四道安全防线"
|
|
},
|
|
"plugging-windows-desktop-control-into-four-ai-agents": {
|
|
"evidence": "1 Python 3.14 server · 4 agent configs · 19 native tools",
|
|
"ogTitle_en": "Plugging Windows Desktop Control into 4 Agents",
|
|
"ogTitle_zh": "把 Windows 桌面控制接进 4 款 AI Agent"
|
|
},
|
|
"why-your-windows-mcp-calls-silently-fail": {
|
|
"evidence": "CONTROL_PREEMPTED killed · 10s idle gate bypassed",
|
|
"ogTitle_en": "Why Windows MCP Calls Silently Fail",
|
|
"ogTitle_zh": "攻破 Windows 桌面 MCP 10 秒空闲门禁"
|
|
},
|
|
"when-to-give-your-agent-physical-clicks": {
|
|
"evidence": "API > CLI > CUA > Physical clicks · 4-tier matrix",
|
|
"ogTitle_en": "When to Give Your Agent Physical Clicks",
|
|
"ogTitle_zh": "什么时候该让 AI 操控物理鼠标"
|
|
},
|
|
"the-single-writer-rule-for-coding-agents": {
|
|
"evidence": "1 write process · 0 merge collisions · isolated review",
|
|
"ogTitle_en": "The Single-Writer Rule for AI Agents",
|
|
"ogTitle_zh": "代码只让一个 AI 改:单写多审架构"
|
|
},
|
|
"slashing-agent-context-with-a-code-graph": {
|
|
"evidence": "AST graph indexing · 80% token churn cut · 0 hallucination",
|
|
"ogTitle_en": "Slashing Context With Code Graph",
|
|
"ogTitle_zh": "用 Code Graph 斩断 Token 膨胀与遗忘"
|
|
},
|
|
"why-multi-agent-coding-fails": {
|
|
"evidence": "Telephone game distortion · implicit architectural drift",
|
|
"ogTitle_en": "Why Multi-Agent Coding Fails",
|
|
"ogTitle_zh": "多 AI 写代码烂尾与隐式决策困境"
|
|
},
|
|
"generating-full-length-songs-with-yue2-comfyui": {
|
|
"evidence": "60 songs - 9-part structure - 295s headroom cap"
|
|
},
|
|
"when-lowering-crf-does-nothing-maxrate-deadlock": {
|
|
"evidence": "CRF 19→14 · SSIM +0.00003 · 106.2h wasted",
|
|
"ogTitle_en": "When Lowering CRF Does Nothing",
|
|
"ogTitle_zh": "降低 CRF 为何毫无效果:maxrate 死锁"
|
|
},
|
|
"why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux": {
|
|
"evidence": "-map 0 copy · tx3g CC · udta/name dual-write",
|
|
"ogTitle_en": "Why ffmpeg -map 0 Breaks Remux",
|
|
"ogTitle_zh": "ffmpeg -map 0 搞崩跨容器混流"
|
|
},
|
|
"traefik-yaegi-plugin-package-name-trap": {
|
|
"evidence": "Yaegi lookup · hyphen to underscore · panic",
|
|
"ogTitle_en": "Traefik Yaegi Plugin Package Trap",
|
|
"ogTitle_zh": "Traefik Yaegi 插件启动崩溃陷阱"
|
|
},
|
|
"architecting-sea-payment-and-offline-licensing-pipelines": {
|
|
"evidence": "toyyibPay FPX · FOR UPDATE · Ed25519 offline",
|
|
"ogTitle_en": "SEA Payment & Offline Licensing",
|
|
"ogTitle_zh": "东南亚网银支付与离线机器码授权"
|
|
},
|
|
"batch-generating-80-technical-covers-with-comfyui": {
|
|
"evidence": "89 covers in 48m · 35% safe zone · Laplacian filter",
|
|
"ogTitle_en": "Batch Generating 80+ Technical Covers",
|
|
"ogTitle_zh": "ComfyUI 批量闭环 80+ 张技术封面"
|
|
},
|
|
"when-a-proxy-timeout-returns-html-instead-of-json": {
|
|
"evidence": "13.6 s -> 0.26 s · 2507 s worst · 499 at the gate",
|
|
"ogTitle_en": "The Proxy That Replied in HTML",
|
|
"ogTitle_zh": "反代用 HTML 回答了 JSON",
|
|
"tags": [
|
|
"nginx",
|
|
"timeouts",
|
|
"caching"
|
|
]
|
|
},
|
|
"read-amplification-504-gateway-timeout-swr-cache": {
|
|
"evidence": "4 reads/file · 960 per page · 0.3 µs cache hit"
|
|
}
|
|
} |