VestraAC
VestraAC is THE FIRST open-source custom PyTorch model for multi-label classification of first-person Garry's Mod gameplay clips. It estimates whether a clip contains:
aimbottriggerbotsilent_aim
These labels are independent. A clip is treated as clean when no score reaches the chosen threshold.
Model details
- Task: Multi-label video classification
- Framework: PyTorch
- Frame encoder: ImageNet-pretrained EfficientNet-B2, fully fine-tuned
- Sequence model: Compact 384-wide, 3-layer Transformer encoder with a learned classification token, positional encoding, and motion-delta features
- Input: 24 RGB frames sampled across an approximately 8-second clip
- Resolution: 224 × 224 pixels per frame
- Output: Three logits in the order
aimbot,triggerbot,silent_aim - Parameters: Approximately 12.0 million
- Checkpoint size: Approximately 92 MiB
This model uses ~750mb-1gb VRAM when loaded fully, with PyTorch's reserving some of that.
The checkpoint is a custom PyTorch checkpoint, not a Hugging Face Transformers AutoModel.
Preprocessing
- Sample 24 frames uniformly across the full clip.
- Convert frames to RGB.
- Mask configured Garry's Mod HUD regions when applicable.
- Resize each frame to 224 × 224.
- Scale pixel values to
[0, 1]. - Normalize with ImageNet statistics:
- Mean:
[0.485, 0.456, 0.406] - Standard deviation:
[0.229, 0.224, 0.225]
- Mean:
- Stack frames as a tensor with shape
[batch, 24, 3, 224, 224].
Apply a sigmoid to each output logit. The default decision threshold is 0.5, but it should be calibrated for the target environment.
Loading the checkpoint
The model architecture is defined in src/model.py.
import torch
from src.model import build_model_from_config
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
checkpoint = torch.load(
"best.pt",
map_location=device,
weights_only=False,
)
model = build_model_from_config(checkpoint["config"], pretrained=False)
state_dict = checkpoint.get("model_ema") or checkpoint["model"]
model.load_state_dict(state_dict)
model.to(device).eval()
# frames: ImageNet-normalized tensor shaped [B, 24, 3, 224, 224]
with torch.inference_mode():
probabilities = torch.sigmoid(model(frames.to(device)))
class_names = checkpoint["class_names"]
scores = [
dict(zip(class_names, sample_scores.tolist()))
for sample_scores in probabilities.cpu()
]
Only load .pt files obtained from a trusted source.
Validation results
The released current.pt checkpoint was selected at epoch 28 and evaluated at a 0.5 threshold on a held-out split of 39 clips:
- Micro F1: 0.7059
- Macro F1: 0.6790
- Aimbot: F1 0.5556, average precision 0.5216
- Triggerbot: F1 0.6667, average precision 0.5611
- Silent aim: F1 0.8148, average precision 0.8108
The training split contained 154 clips. The validation split was also used for checkpoint selection, so these results are not an independent test-set estimate.
Intended use
This model is intended for research, offline clip review, and moderation-assistance experiments on Garry's Mod footage similar to its training data. Its scores should be treated as review signals, not proof of cheating.
Do not use the model as the sole basis for bans, disciplinary action, or other high-impact decisions. Human review and additional evidence are required.
This model was made specifically to put a middle finger up to greedy companies (ahem, chrononlabs), because I believe that users should have a choice between locally hosting a model or a company that forces you into using a model stored on THEIR systems to possibly violate users' privacy. I will provide any and all documentations to allow users to train the model further on their own, producing more powerful models. Though, please credit us. That is all we ask.
Limitations
- The model was trained on a small, private dataset and has not been independently benchmarked.
- Performance may degrade with different games, servers, maps, HUDs, resolutions, frame rates, fields of view, codecs, or spectator modes.
- It may learn correlations specific to the capture setup rather than cheat behavior itself.
- Legitimate fast aim can produce false positives, while subtle or unfamiliar cheats can produce false negatives.
- The three scores are not guaranteed to be calibrated probabilities.
cleanis inferred from all three scores being below threshold; it is not a separately trained class.
Help improve the model
If you own or manage an active server and are comfortable installing an optional addon, we would love to work with you. The addon records gameplay kill clips that can be reviewed and used as opt-in training data to help improve future versions of this model.
Participation is entirely voluntary. Before installation, we will provide clear documentation covering what the addon captures, how clips are stored or transferred, how data is used, and how to remove it at any time. Please ensure your players are properly informed and that your server’s data collection complies with applicable laws and platform rules.
If you are interested, please contact me personally at magon@vestracorp.com with information about your server and its usual player population.
License
This model is licensed under CC BY 4.0.
You may use, modify, fine-tune, distribute, and use this model commercially, provided you give appropriate credit to Vestra and link to this licence. Please indicate whether you have modified the model.
Model tree for magonyt/VestraAC-1.1
Base model
timm/efficientnet_b2.ra_in1k