Faynt

Learning competitive Melee.

Paper on arXiv
Back to research

Faynt: Scaling and Optimizing Policies for Competitive Melee

Advisory contributions:

Learning competitive Melee.

At Frisson Labs, we’re building AI companions that can play games with you. A natural starting point is teaching them to play well.

Faynt is a family of 10M- and 75M-parameter policies trained on approximately 840,000 human replays. Each checkpoint plays all 26 characters. We refine human imitation with winning demonstrations, distill the larger policy into the smaller one, then continue both with reinforcement learning.

The final 10M wins 240 of 244 supported-character mirror games against fourteen Slippi-AI releases. It also wins all 68 games in a separate zero-delay comparison.

10Mparameters in the
compact policy
26characters in
one checkpoint
68 / 68wins in the separate
zero-delay comparison

The 244-game panel preserves opponents’ 21- or 24-frame delays. The 68-game comparison uses one privately supplied zero-delay checkpoint under two conditioning settings. Faynt uses zero added delay in both.

One policy, 26 characters.

Both models read structured game state and predict the next controller command. Training uses 256-frame windows, about 4.3 seconds of play. Full Attention Residuals let each sublayer learn how to combine earlier representations.

Parameters10M / 75M two model sizes
Depth × width5 × 384 / 11 × 768
Context256 frames ~4.3 seconds
Model configurations
Configuration10M75M
Exact parameters10,163,62975,305,709
Transformer blocks511
Hidden width384768
Query / KV heads6 / 212 / 3
Feed-forward width7681,920

Head dimension is 64 for both sizes. The paper does not isolate the individual gameplay contribution of each backbone component. Full architecture in §2.3 and Appendix B.

The training recipe.

The replay dataset provides 17.48 billion training targets. We split by whole game, keeping both players’ perspectives together. Pretraining predicts human button and stick inputs with behavioral cloning.

We measure prediction error with negative log-likelihood (NLL): the average penalty for assigning low probability to the recorded human command. Lower is better. The curves use held-out games, so they measure prediction on replays the model did not train on. W is the checkpoint-selection score: 90% Master-winning NLL plus 10% Diamond-winning NLL.

Validation loss during post-training

4.80B targets
Lower-rate distillation4.80B targets
Weighted W0.75746
Overall NLL0.76896
Master wins0.75647
Diamond wins0.76641

165 recorded evaluations. W = 0.9 × Master-winning NLL + 0.1 × Diamond-winning NLL is the checkpoint-selection metric. Lines join observations within each run; the horizontal axis follows processed targets along selected-checkpoint ancestry. Intermediate stages have held-out loss measurements; gameplay is evaluated at the pretrained, final supervised, and RL endpoints.
Selected checkpoints and exact losses
Selected checkpoint10M weighted NLL75M weighted NLL
Pretrained0.811520.77502
Winner curriculum0.770780.73591
Winner mixture0.764430.72489
Distillation, round 10.75983Not applied
Distillation, lower rate0.75746Not applied

The larger policy’s winner-mixture checkpoint is the teacher and supervised endpoint. Its later continuation regresses and is stopped.

The winner curriculum moves through natural replay data, winners of any rank, Master and Diamond winners, then Master winners. Later filtering improves prediction on strong winning play even as overall validation loss starts to rise.

The next supervised stage samples approximately 90% Master-winning and 10% Diamond-winning replay visits. That same distribution continues through both 10M distillation rounds. The objective changes: the student combines human-action prediction with the 75M teacher’s action probabilities.

Data and objectives

Explore 01–04
Replay distribution and training objective are separate. The 90/10 winner mixture spans the supervised mixture and both distillation rounds. Distillation uses equal weights for behavioral cloning and teacher-to-student Kullback–Leibler divergence at temperature 1; it applies to 10M only.

Each distillation round covers 900 million targets; the second halves the held learning rate. Weighted validation loss falls from 0.76443 before distillation to 0.75746 afterward.

Optimizer choice. Optimizers turn loss gradients into weight updates. Faynt uses Muon for hidden backbone matrices and AdamW for the remaining parameters. In a single-seed calibration with a 20M-parameter model and 166 million targets, the selected Muon configuration gives 1.65% lower validation NLL than the selected AdamW configuration.

Gameplay after supervised post-training.

In the same 152-game suite, supervised post-training raises 10M wins from 49 to 106 and 75M wins from 69 to 123. The supervised 10M wins 37 more games than the pretrained 75M, despite slightly worse overall prediction loss.

Win rate and validation loss

Figure 02
WIN RATE · HIGHER IS BETTER0–100%
Supervised 10M: 69.7%. Pretrained 75M: 45.4%. A 24.3-point difference.
Identical 152-game schedules, Final Destination, four stocks, eight-minute timer. Weighted loss also selected the supervised checkpoints. The comparison covers four policies, without independent training replications or compute-matched continuation controls.

Weighted winning-play loss orders these four checkpoints consistently with win rate. In the replays, both policies take less damage and build larger early stock leads. Their opponents receive more damage.

Damage and stock advantage

PretrainedSupervised
Matched configurations at both stages: 139 per model at 10M and 145 at 75M. Damage is percentage points per minute. Each metric has its own scale. For games ending before one minute, stock lead retains the terminal score. Paper Figures 12–14.

Reinforcement learning.

We continue both policies with proximal policy optimization (PPO), playing Fox against Fox across six stages. A stock taken earns +1 and a percentage point of damage dealt earns +0.01, with additional movement, offstage, and ledge rewards or penalties. Kullback–Leibler (KL) divergence measures how much the action probabilities change. Penalizing it keeps the policy close to its supervised starting point; the second 10M run also penalizes changes from the policy that collected the games.

Self-play and the reward horizon

96 emulators

Analytical reward discount

4-second half-life 25%8-second half-life 50%
Each step collects 2,048 frames per emulator and applies two PPO updates. Discount weight is 2−t/h for a reward arriving t seconds later and half-life h. This plot illustrates the configured discount. The runs also change policy-gradient and KL weights. Paper §4.4.

The 10M’s second run switches to full self-play and extends the reward half-life from four to eight seconds. A reward eight seconds away then retains half its weight. Several objective settings change together.

The PPO settings and reward horizon
Setting75M10M, run 110M, run 2
Learning rate4 × 10−510−410−4
Policy-gradient weight113
KL(policy ∥ reference)0.10.10.003
KL(reference ∥ policy)000.003
Behavior-policy KL000.3
Reward half-life4 s4 s8 s

The per-frame discount factor is γ = 2−1/(60h), where γ is the fraction of reward weight retained per frame, h is the half-life in seconds, and 60 is the frame rate. A reward arriving one half-life later receives half its weight. PPO clips the log probability ratio at ±0.01 in its policy-improvement term, limiting the incentive for large updates. Returns include a value-network estimate beyond each rollout; advantages retain their original reward scale. The frozen reference reuses the acting policy’s attention cache, so its KL penalty uses an approximate reference distribution. Training uses continuous Fox mirrors on six stages, without a stock limit or timer. Paper §4.4.

Supervised and RL checkpoints

WIN LOSS68 games at each training stage
68 games at each checkpoint. Both players use zero added delay. Filled squares are wins, grouped by outcome. This suite is separate from the initial 152-game evaluation. Paper Figure 15.

The final 10M wins all 68 zero-delay games, including 61 four-stocks. The 75M improves from 25 to 58 wins.

Evaluation details

One opponent checkpoint under Master Player and Cody conditioning. Each setting receives 16 Final Destination games and 18 games across six stages. The 10M has two RL runs; the 75M has one. Their different objectives and training histories prevent isolating a model-size effect.

Match recordings

These two games provide a closer look at the 10M policy in Fox mirror matches on Final Destination. Use them to inspect movement, attack timing, and recovery beyond the aggregate win rates. Each recording uses a different checkpoint, identified below.

Faynt (P1) vs. SmashBot · 10M RL1318 Faynt is P1, shown by the left stock counter. These individual recordings supplement the benchmark results. Open in a new tab

Across the roster.

Fox is the only character used during reinforcement learning. All 26 characters share the updated weights and are included in the expanded evaluation.

ONE SET OF WEIGHTS Fox receives RL experience

On opponents’ supported characters, the final 10M wins 240 of 244 mirror games, with a winning record against every release.

Supported-character mirror matches

Figure 03
Faynt 10M240 / 24498.4% win rate
Faynt 75M149 / 24461.1% win rate
10M75MWin rate · 0–100%
Explore all 14 opponents
Faynt wins / games on each opponent’s supported characters
Slippi-AI release10M75M
Fourteen frozen releases: five specialists, seven twelve-character policies, and two four-character policies. Specialists receive 12 games; others receive two per supported character. Opponents retain 21- or 24-frame delays. Faynt has zero added delay. Some opponents informed checkpoint selection.

Inside a 16.67 ms frame.

The standard PyTorch path misses 60 Hz on every tested GPU. Removing host synchronization, keeping cache bookkeeping on the GPU, and replaying operations through a CUDA graph brings mean processing time and p99 latency below one frame on recorded-game inputs.

Recorded-game inference latency

Figure 04
Mean processing time p99 latency
Recorded-game inputs at 60 Hz, random weights. Mean processing includes conversion, inference, sampling, decoding, and a recording stub. p99 also includes waiting after scheduled arrival. Emulator and communication time are excluded. One timing run per hardware setting. Late decisions still occur: 0.6% for T4/75M and 0.3% for A10G/10M.

On T4, 10M averages 5.2 ms with 6.8 ms p99 latency. Trained-checkpoint parity checks reproduce the same sampled actions across 1,200 frames.

Paper and releases.

We release the model weights, benchmark suites, and tournament platform. The paper includes the training recipe, full results, and evaluation conditions.

AUTHORSADVISORY CONTRIBUTIONSFrisson Labs ·