{"slug": "show-hn-xviral-post-virality-predictor-based-on-x-s-for-you-ranking-pipeline", "title": "Show HN: XViral – Post virality predictor based on X's For You Ranking pipeline", "summary": "XViral, a new open-source tool, predicts a post's virality on X by rebuilding the platform's For You ranking pipeline from its official source code. The tool audits X's released code, emulates its Grok-based judges, and applies the exact scoring formula, treating accuracy as a measurable target rather than a claim.", "body_md": "*Let AI grade your post before the algorithm does. Based on X's open source For You ranking pipeline, rebuilt from the official source release.*\n\nStar us, and you will receive all release notifications from GitHub without any delay!\n\nIn May 2026, X published the production code of its For You feed — Home Mixer (orchestration), Thunder (in-network store), Phoenix (the Grok-based ranking transformer), and Grox (the content-understanding service) — together with a 2.9 GB pre-trained mini Phoenix checkpoint, frozen from the same continuous training process as the production model. The release contains the complete scoring formula and its nineteen engagement heads, the output schemas and thresholds of the Grok content judges, and the pipeline's filters and penalties. It withholds the numbers: the head weights, the judge prompts, and the operational thresholds.\n\nXViral vendors that release unmodified, audits it file by file\n([FINDINGS.md](/ninjahawk/XViral/blob/main/FINDINGS.md)), and rebuilds the pipeline locally as a\ndraft-post scorer: the Grok judge layer is emulated by an LLM against the\nexact published schemas, the weighted scorer applies the exact published\nformula, and every withheld number is a provenance-tagged free parameter\n([simulator/weights.json](/ninjahawk/XViral/blob/main/simulator/weights.json)) to be fitted against the\noutcomes of real posts.\n\nThis differs from the algorithm-guide genre in that nothing here is folklore: each mechanic traces to a file in X's own code, each assumed value is labeled as assumed, and the simulator's accuracy is treated as a measurable quantity with a target (pairwise ranking accuracy against published posts), not a claim.\n\n**1. The platform scores slop.** Every post passes a Grok vision-language\njudge whose output schema includes `quality_score`\n\n(a \"banger\" screen with a\nhard threshold at 0.4) and an integer `slop_score`\n\n— template filler is\nmeasured, not merely disliked (`grox/classifiers/content/banger_initial_screen.py`\n\n).\n\n**2. Small accounts face a dedicated spam judge.** A classifier named\n`SpamSystemLowFollower`\n\nrenders binary spam verdicts specifically for\nlow-follower authors — the exact cohort, and the exact phrasing patterns, of\ntemplate giveaway posts (`grox/classifiers/content/spam.py`\n\n).\n\n**3. Negative predictions are first-class.** The final score is a weighted sum\nover heads that include `not_interested`\n\n, `block_author`\n\n, `mute_author`\n\n, and\n`report`\n\n— a post that provokes mutes does not merely underperform, it is\nactively suppressed, and legacy-published weights put `report`\n\nat −369 against\n0.5 for a like (`home-mixer/scorers/weighted_scorer.rs`\n\n).\n\n**4. Video earns nothing below a duration floor.** The video-quality-view head\nis weight-gated on `video_duration_ms > MIN_VIDEO_DURATION_MS`\n\n; the widely\nrecycled \"video gets 10× engagement\" figure appears nowhere in the code and\ntraces to a 2019 Twitter Ads marketing post.\n\n**Grox judges**— the emulated banger screen (`quality_score`\n\nagainst the source threshold 0.4),`slop_score`\n\n0–10, and the low-follower spam verdict with its reason.**Weighted score**— the source formula applied to per-impression action probabilities: an in-network score and an out-of-network score (the OON multiplier from`oon_scorer.rs`\n\napplied).**The head table**— each action's probability, weight, and signed contribution, sorted by magnitude; the negative-head net is printed separately because it usually decides the total.**Top fixes**— the three highest-impact edits, from the judge.\n\n```\ndraft text (+ media flags)\n    → Grok-judge emulation (claude -p | local ollama, temp 0)\n         banger {quality_score, slop_score, tags}   [schema: source]\n         spam   {decision, reason}                  [schema: source]\n         P(action) per impression × 19 heads        [head list: source]\n    → weighted scorer:  Σ weight_i × P(action_i)    [formula: source]\n         vqv head gated by video duration           [mechanism: source]\n    → OON view: score × OON_WEIGHT_FACTOR           [mechanism: source]\n```\n\n**Provenance.** Everything marked *source* is verbatim from the vendored\nrelease. Weight values carry tags in `weights.json`\n\n: `legacy_2023`\n\n(the\npublished weights of the previous open-sourcing, used as priors) or `assumed`\n\n(our priors, first to move under calibration). The judge prompts are\nreconstructions against the published output schemas; X's actual prompt text\nis withheld from the release.\n\n**Real outcomes, no API.** `--tweet <url>`\n\npulls live public engagement\nnumbers for any post through X's syndication CDN — the endpoint that powers\nembedded tweets — with no authentication and no account contact. This is the\ncalibration data path.\n\nA 23-variant, 3-generation evolutionary search over giveaway formats\n([experiments/RESULTS.md](/ninjahawk/XViral/blob/main/simulator/experiments/RESULTS.md)) ran through an\nidentical judge at temperature 0 and converged in two generations on a single\nfamily (attached payout-proof video × no-strings ask), with clean negative\nresults isolating the drivers — evidence the instrument produces consistent,\ndiscriminating rankings rather than noise. The account it is tuned for\nreports that these rankings track observed post behavior (directional\nvalidation). Current status: pipeline structure, head list, schemas, and\nthresholds are source-faithful; absolute scores are uncalibrated — the\nnegative heads in particular inherit LLM overestimation amplified by large\nlegacy weights. The roadmap ([PLAN.md](/ninjahawk/XViral/blob/main/PLAN.md)) defines the accuracy\ncontract: predictions logged before posting, outcomes fetched after, pairwise\nranking accuracy ≥ 70% out-of-sample before the scoring profile is frozen.\n\nRequirements: Python 3.11+, and at least one judge engine — the `claude`\n\nCLI,\nor [Ollama](https://ollama.com) running any capable local model (default:\n`qwen3.5:9b`\n\n). No X API access, no GPU required for the simulator itself.\n\n```\ngit clone https://github.com/ninjahawk/XViral\ncd XViral/simulator\npython xviral_score.py \"your draft post\"                    # judge: claude CLI\npython xviral_score.py \"your draft post\" --engine ollama    # judge: local model\npython xviral_score.py --tweet https://x.com/u/status/123   # real stats, no auth\n```\n\nFlags: `--video-ms 12000`\n\n, `--image`\n\n, `--link`\n\n, `--audience file.txt`\n\n, `--json`\n\n.\n\n**The checkpoint.** The 2.9 GB mini Phoenix (`phoenix/artifacts/`\n\n, Git LFS) is\nnot committed here; re-fetch it via the LFS batch API or `git lfs pull`\n\nin the\nupstream repo. It runs under JAX (`phoenix/run_pipeline.py`\n\n) and ranks by\nhash-ID embeddings — a mechanics lab for the ranking stage, deliberately not\npart of the text-scoring path.\n\n**Other audiences.** The judge is conditioned on an audience description\n(default: crypto-Twitter giveaway subculture at ~7k followers). Pass\n`--audience yourfile.txt`\n\nto re-target the instrument at any niche.\n\nThe instrument inherits the gaps of the release it is built on. Production Phoenix conditions on each individual viewer's engagement history; we approximate with audience descriptions. Early-engagement cascades, timing luck, and shadow visibility actions are not modeled and appear only as noise in outcomes. Withheld weights mean absolute scores are meaningless until calibrated; the tool rank-orders drafts and flags structural killers — it does not predict lightning strikes, and it is not a substitute for posting.\n\nThe pipeline source is by X / xAI\n([x-algorithm](https://github.com/xai-org/x-algorithm), Apache 2.0), vendored\nunmodified with license preserved. Legacy weight priors are from the 2023\nopen-sourcing ([the-algorithm-ml](https://github.com/twitter/the-algorithm-ml)).\nXViral is an independent project and is not affiliated with X or xAI.\n\nLicensed under Apache 2.0.", "url": "https://wpnews.pro/news/show-hn-xviral-post-virality-predictor-based-on-x-s-for-you-ranking-pipeline", "canonical_source": "https://github.com/ninjahawk/XViral", "published_at": "2026-07-15 15:00:58+00:00", "updated_at": "2026-07-15 15:28:37.285031+00:00", "lang": "en", "topics": ["artificial-intelligence", "machine-learning", "ai-tools", "ai-infrastructure", "large-language-models"], "entities": ["XViral", "X", "Grok", "Home Mixer", "Thunder", "Phoenix", "GitHub"], "alternates": {"html": "https://wpnews.pro/news/show-hn-xviral-post-virality-predictor-based-on-x-s-for-you-ranking-pipeline", "markdown": "https://wpnews.pro/news/show-hn-xviral-post-virality-predictor-based-on-x-s-for-you-ranking-pipeline.md", "text": "https://wpnews.pro/news/show-hn-xviral-post-virality-predictor-based-on-x-s-for-you-ranking-pipeline.txt", "jsonld": "https://wpnews.pro/news/show-hn-xviral-post-virality-predictor-based-on-x-s-for-you-ranking-pipeline.jsonld"}}