CS2 Recoil Patterns, Measured and Dated
Every bullet of the AK-47, M4A4 and M4A1-S spray, in degrees, measured on our own CS2 install on 2026-09-10 (game version 1.41.8.1). Not copied from a no-recoil script and not traced from a picture: one bullet per round restart, impact markers read off the wall. When CS2 updates, the measurement runs again and the log below says what moved.
AK-47
30 bullets · 600 rpm · measured 2026-09-10
Where the bullets land
Impact of each bullet relative to the aim point, no mouse movement. Peak 11.2° above the aim point at bullet 26; 7.24° wide.
Where the mouse goes
The compensation path: pull the crosshair through these points, bullet by bullet, and every shot lands on the aim point.
Total rise
11.2°
peak at bullet 26
After 10 bullets
9.52°
the pull-down phase
Sideways
2.9° L · 4.33° R
7.24° end to end
Biggest jump
2.53°
bullet 27 → 28
Hold the trigger, then pull: the same magazine twice
11.2° of climb and 7.24° of sideways spread: two or three bullets in, the stream has already left the point you aimed at.
Train the pull, not the picture
FREEOur aim trainer fires at the weapon's own cadence and plays this measured path. You hold the button, move the mouse, and get the error per bullet: first ten, the rest, whole magazine.
Early build · free while it is in testingShow the numbers · AK-47
| Bullet | Yaw (° , + right) | Pitch (° , + up) | Jump from previous (°) |
|---|---|---|---|
| 1 | 0.000 | 0.000 | — |
| 2 | -0.078 | +1.080 | 1.08 |
| 3 | +0.036 | +2.654 | 1.58 |
| 4 | +0.119 | +4.449 | 1.80 |
| 5 | -0.561 | +6.130 | 1.81 |
| 6 | -0.997 | +7.577 | 1.51 |
| 7 | -1.736 | +8.706 | 1.35 |
| 8 | -0.871 | +9.532 | 1.20 |
| 9 | +1.343 | +9.311 | 2.23 |
| 10 | +2.571 | +9.520 | 1.25 |
| 11 | +1.933 | +10.106 | 0.87 |
| 12 | +2.779 | +10.210 | 0.85 |
| 13 | +4.099 | +9.920 | 1.35 |
| 14 | +4.331 | +10.077 | 0.28 |
| 15 | +2.380 | +10.308 | 1.96 |
| 16 | +1.176 | +10.585 | 1.24 |
| 17 | +0.388 | +10.936 | 0.86 |
| 18 | -1.003 | +10.931 | 1.39 |
| 19 | -2.904 | +10.499 | 1.95 |
| 20 | -1.861 | +10.504 | 1.04 |
| 21 | -2.082 | +10.602 | 0.24 |
| 22 | -1.736 | +10.919 | 0.47 |
| 23 | -1.259 | +11.189 | 0.55 |
| 24 | -2.261 | +11.063 | 1.01 |
| 25 | -2.583 | +11.069 | 0.32 |
| 26 | -1.581 | +11.195 | 1.01 |
| 27 | +0.239 | +11.011 | 1.83 |
| 28 | +2.642 | +10.216 | 2.53 |
| 29 | +3.582 | +10.100 | 0.95 |
| 30 | +3.553 | +10.100 | 0.03 |
M4A1-S
20 bullets · 600 rpm · measured 2026-09-10
Where the bullets land
Impact of each bullet relative to the aim point, no mouse movement. Peak 5.99° above the aim point at bullet 16; 4.72° wide.
Where the mouse goes
The compensation path: pull the crosshair through these points, bullet by bullet, and every shot lands on the aim point.
Total rise
5.99°
peak at bullet 16
After 10 bullets
5.69°
the pull-down phase
Sideways
1.6° L · 3.12° R
4.72° end to end
Biggest jump
1.25°
bullet 11 → 12
Hold the trigger, then pull: the same magazine twice
5.99° of climb and 4.72° of sideways spread: two or three bullets in, the stream has already left the point you aimed at.
Train the pull, not the picture
FREEOur aim trainer fires at the weapon's own cadence and plays this measured path. You hold the button, move the mouse, and get the error per bullet: first ten, the rest, whole magazine.
Early build · free while it is in testingShow the numbers · M4A1-S
| Bullet | Yaw (° , + right) | Pitch (° , + up) | Jump from previous (°) |
|---|---|---|---|
| 1 | 0.000 | 0.000 | — |
| 2 | -0.012 | +0.316 | 0.32 |
| 3 | +0.191 | +0.901 | 0.62 |
| 4 | -0.066 | +1.927 | 1.06 |
| 5 | +0.257 | +2.934 | 1.06 |
| 6 | +0.466 | +3.939 | 1.03 |
| 7 | -0.257 | +4.645 | 1.01 |
| 8 | -0.698 | +5.196 | 0.71 |
| 9 | -1.599 | +5.297 | 0.91 |
| 10 | -1.229 | +5.693 | 0.54 |
| 11 | -0.471 | +5.947 | 0.80 |
| 12 | +0.776 | +5.841 | 1.25 |
| 13 | +1.712 | +5.693 | 0.95 |
| 14 | +2.672 | +5.445 | 0.99 |
| 15 | +2.565 | +5.693 | 0.27 |
| 16 | +2.100 | +5.994 | 0.55 |
| 17 | +2.588 | +5.894 | 0.50 |
| 18 | +3.124 | +5.693 | 0.57 |
| 19 | +2.981 | +5.882 | 0.24 |
| 20 | +2.970 | +5.858 | 0.03 |
M4A4
30 bullets · 667 rpm · measured 2026-09-10
Where the bullets land
Impact of each bullet relative to the aim point, no mouse movement. Peak 9.17° above the aim point at bullet 29; 6.36° wide.
Where the mouse goes
The compensation path: pull the crosshair through these points, bullet by bullet, and every shot lands on the aim point.
Total rise
9.17°
peak at bullet 29
After 10 bullets
7.6°
the pull-down phase
Sideways
2.05° L · 4.31° R
6.36° end to end
Biggest jump
1.74°
bullet 19 → 20
Hold the trigger, then pull: the same magazine twice
9.17° of climb and 6.36° of sideways spread: two or three bullets in, the stream has already left the point you aimed at.
Train the pull, not the picture
FREEOur aim trainer fires at the weapon's own cadence and plays this measured path. You hold the button, move the mouse, and get the error per bullet: first ten, the rest, whole magazine.
Early build · free while it is in testingShow the numbers · M4A4
| Bullet | Yaw (° , + right) | Pitch (° , + up) | Jump from previous (°) |
|---|---|---|---|
| 1 | 0.000 | 0.000 | — |
| 2 | -0.024 | +0.615 | 0.62 |
| 3 | +0.173 | +1.611 | 1.02 |
| 4 | -0.030 | +2.696 | 1.10 |
| 5 | +0.370 | +4.010 | 1.37 |
| 6 | +0.597 | +5.332 | 1.34 |
| 7 | -0.233 | +6.201 | 1.20 |
| 8 | -0.847 | +6.996 | 1.00 |
| 9 | -2.052 | +7.201 | 1.22 |
| 10 | -1.748 | +7.601 | 0.50 |
| 11 | -0.841 | +7.993 | 0.99 |
| 12 | +0.752 | +7.882 | 1.60 |
| 13 | +2.088 | +7.776 | 1.34 |
| 14 | +3.398 | +7.383 | 1.37 |
| 15 | +3.511 | +7.606 | 0.25 |
| 16 | +3.095 | +8.028 | 0.59 |
| 17 | +3.606 | +7.987 | 0.51 |
| 18 | +4.307 | +7.776 | 0.73 |
| 19 | +4.265 | +7.893 | 0.12 |
| 20 | +2.529 | +8.063 | 1.74 |
| 21 | +1.814 | +8.274 | 0.75 |
| 22 | +0.460 | +8.280 | 1.35 |
| 23 | -0.125 | +8.484 | 0.62 |
| 24 | -0.728 | +8.682 | 0.63 |
| 25 | -0.167 | +8.764 | 0.57 |
| 26 | -0.424 | +8.869 | 0.28 |
| 27 | -0.621 | +8.974 | 0.22 |
| 28 | -0.847 | +9.067 | 0.24 |
| 29 | -1.044 | +9.172 | 0.22 |
| 30 | -1.026 | +9.172 | 0.02 |
Measurement log
every re-measurement after a CS2 update, with the version it was measured onHow to read the pattern
The left panel is what the wall shows if you hold the trigger and never touch the mouse: bullet 1 at the aim point, then the climb, then the sideways drift. The right panel is the same shape mirrored — where your crosshair has to be at each bullet so that the bullet still lands on the aim point. Pull down through the climb, then follow the drift. Yaw is positive to the right, pitch positive upwards; the scale bar in each panel is one degree.
Degrees, not pixels
A recoil picture in pixels is a picture of somebody else's resolution. The AK-47 climbs 11.2° by bullet 26; at 1920×1080 that is about 141 px on screen, at 1280×960 stretched about 125 px — same angle, different picture. In mouse terms it is one number for everybody: at sensitivity 2 and CS2's m_pitch of 0.022, the full AK climb is 255 mouse counts of pull-down — about 8 mm of mousepad at 800 DPI, half that at 1600. That is 1600 eDPI; the animation above each pattern is drawn at 800 eDPI, so its millimetres are twice these. Change the sensitivity and the counts scale with it; the degrees do not move. The pattern was measured with spread off, so it is the ideal compensation path, not a promise that every bullet lands in a match. The eDPI calculator gives your centimetres per turn from the same constant.
How we measure
On our own CS2 client, on a fleet account, with -insecure and sv_cheats on a local map: stand at a fixed setpos on de_dust2 facing a flat wall about ten metres away, set weapon_accuracy_nospread 1 so every impact is recoil and nothing else, and fire one bullet per round restart — bullets one to k−1 go into a side wall, a bound setang turns the view onto the clean wall just before bullet k, and sv_showimpactsleaves a marker of constant shape. The marker centroid is read from a 2560×1440 screenshot (0.06° per pixel), converted to degrees through the same field-of-view maths the trainer draws with. Bullet 1 is the aim point. The whole run is a script; nobody holds the mouse. Re-running the method on the same version reproduces a bullet to within the marker's size, which is why the change log above can tell a patch from noise.
Train the path
The Spray Path programin our aim trainer plays these exact numbers: hold the button at the weapon's own cadence, move the mouse through the compensation path, and get the error per bullet — first ten, the rest, whole magazine — scored from your input log. For the rest of the setup the crosshair generator and the practice config cover a wall session of your own.
Questions people ask
Why not copy a no-recoil script?
Is the pattern exact?
Related tools
Not affiliated with Valve Corporation. Steam and Counter-Strike are trademarks of their respective owners.

