Skip to content

Package slimming: dead-asset audit tooling + reconcile repo Content with shipped pak #4

Description

@mellox

Context

The ficsit upload kept failing on the ~600 MB pak (SMR server-side multipart-completion bug). We slimmed the package 647.7 MB → 293.9 MB (−55%, 4K textures kept) by relocating provably-unused assets out of the cook path.

What was done (2026-07-14)

  • Scripts/ue/slim_audit.py — headless, read-only UE asset-registry dependency walk from the mod's real shipping roots (schematics / recipes / descriptors / research / ammo / BP_Equip_LaserRifle* / icons + the C++ ConstructorHelpers/LoadClass soft-ref paths). Splits /LaserRifleMod/ into LIVE (382 MB) vs DEAD (488 MB). Parity check = CONTRADICTIONS: 0 — no live asset references a dead one, so removal cannot change rendering.
  • Relocated 128 dead assets (488 MB) out of Content/_DevKit_Uncooked/DeadAssets_2026-07-14/ (a move, reversible). These were textures orphaned by the 07-03..05 mesh rework (Mk02-10_Tex, M_Rifle_Mk02-10), kit-bash leftovers (Kit_Tex_*), and old blaster-*/KitTest meshes. Full list: Scripts/ue/slim_dead_manifest_2026-07-14.txt.
  • Scripts/ue/clamp_2k.py — optional further ~2× cut via MaxTextureSize=2048 (reversible; backs up 4K first → ~130 MB). Tested in-game and rejected — the 2K viewmodel look was too soft. 4K is the shipped default.
  • Parity verified at 3 levels — static (CONTRADICTIONS=0) · cook log · runtime FactoryGame.log — all clean except the documented-expected MAM_LaserRifle_Systems parked-tree warning (LaserRifleRootWorld.cpp:35, guarded, unrelated).

The real follow-up (why this issue exists)

The slim currently lives only in the cook dir (SatisfactoryModLoader/Mods/LaserRifleMod/). The git repo tracks just a partial Content/ snapshot (148 files; missing Meshes_Energy, Meshes_Mk1, Rigged, …), and the large binary art (4K textures, meshes) isn't in git at all — deliberately, since huge binaries caused the tripo_rifles 9 GB .git blowup that had to be filter-repo-purged. So the repo can't currently rebuild the shipped pak from scratch. Decide how to make it reproducible:

  • Version/back-up the binary art (Git LFS? external/cloud store? regenerate via the Tripo/Blender pipeline?)
  • Formalize _DevKit_Uncooked/ parking, or switch to an SML PackagePlugin cook-exclusion filter if one exists (zero risk of "moved a live asset")
  • Keep the slim_dead_manifest current after each content rework

Re: "worktree so it isn't part of the release build"

Heads-up for whoever picks this up: the slim is already excluded from the release build by physical location — SML's PackagePlugin cooks whatever is in Content/, so assets in _DevKit_Uncooked/ (outside Content/) simply aren't cooked. A git worktree/branch would not change what the cooker reads (it reads the cook-dir Content/, not a git branch), so branching isn't the exclusion mechanism. Git's role here is preserving the tooling + decision + manifest, not gating the cook.

Tooling + manifest committed on branch chore/slim-package-audit.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions