FFMI Index
The Genetic Limit.
The Fat-Free Mass Index (FFMI) is the ultimate metric for muscle mass, accounting for both weight and body fat. Find out where you stand on the spectrum of human muscular potential.
FFMI Calculator
Fat-Free Mass Index — a better gauge of muscularity than BMI.
Use the Navy Body Fat Calculator if you don’t already know this.
Disclaimer: This tool is for informational purposes only and is not a substitute for professional medical advice, diagnosis, or treatment.
Your Results
let currentUnit = 'imperial';
function setUnit(unit) { currentUnit = unit; const btns = document.querySelectorAll('.toggle-btn'); btns.forEach(btn => btn.classList.remove('active')); if (unit === 'imperial') { btns[0].classList.add('active'); document.getElementById('weightLabel').innerText = 'Weight (lbs)'; document.getElementById('heightLabel').innerText = 'Height (inches)'; document.getElementById('weight').placeholder = 'e.g. 180'; document.getElementById('height').placeholder = 'e.g. 70'; } else { btns[1].classList.add('active'); document.getElementById('weightLabel').innerText = 'Weight (kg)'; document.getElementById('heightLabel').innerText = 'Height (cm)'; document.getElementById('weight').placeholder = 'e.g. 80'; document.getElementById('height').placeholder = 'e.g. 175'; } }
function calculateFFMI() { const gender = document.getElementById('gender').value; let weight = parseFloat(document.getElementById('weight').value); let height = parseFloat(document.getElementById('height').value); let bodyfat = parseFloat(document.getElementById('bodyfat').value);
if (!weight || !height || bodyfat === undefined || isNaN(bodyfat)) { alert('Please fill in weight, height, and body fat %.'); return; }
let weightKg = currentUnit === 'imperial' ? weight * 0.453592 : weight; let heightCm = currentUnit === 'imperial' ? height * 2.54 : height; let heightM = heightCm / 100;
let ffm = weightKg * (1 - bodyfat / 100); let ffmi = ffm / (heightM * heightM); // Normalized FFMI adjusts for height so results are comparable at a standard 1.8m let normalizedFfmi = ffmi + 6.1 * (1.8 - heightM);
let ffmDisplay = currentUnit === 'imperial' ? Math.round(ffm * 2.20462) + ' lbs' : Math.round(ffm) + ' kg';
let interpretation = ''; if (gender === 'male') { if (normalizedFfmi < 18) interpretation = 'Below average muscle mass'; else if (normalizedFfmi < 20) interpretation = 'Average'; else if (normalizedFfmi < 22) interpretation = 'Above average / muscular'; else if (normalizedFfmi < 25) interpretation = 'Very muscular (typical natural ceiling)'; else interpretation = 'Exceptional — above the typical drug-free range'; } else { if (normalizedFfmi < 14) interpretation = 'Below average muscle mass'; else if (normalizedFfmi < 16) interpretation = 'Average'; else if (normalizedFfmi < 18) interpretation = 'Above average / muscular'; else if (normalizedFfmi < 21) interpretation = 'Very muscular (typical natural ceiling)'; else interpretation = 'Exceptional — above the typical drug-free range'; } document.getElementById('ffmiResult').innerText = normalizedFfmi.toFixed(1); document.getElementById('ffmResult').innerText = ffmDisplay; document.getElementById('interpretation').innerText = interpretation; document.getElementById('results').style.display = 'block'; }
let currentUnit = 'imperial';
function setUnit(unit) { currentUnit = unit; const btns = document.querySelectorAll('.toggle-btn'); btns.forEach(btn => btn.classList.remove('active')); if (unit === 'imperial') { btns[0].classList.add('active'); document.getElementById('weightLabel').innerText = 'Weight (lbs)'; document.getElementById('heightLabel').innerText = 'Height (inches)'; document.getElementById('weight').placeholder = 'e.g. 180'; document.getElementById('height').placeholder = 'e.g. 70'; } else { btns[1].classList.add('active'); document.getElementById('weightLabel').innerText = 'Weight (kg)'; document.getElementById('heightLabel').innerText = 'Height (cm)'; document.getElementById('weight').placeholder = 'e.g. 80'; document.getElementById('height').placeholder = 'e.g. 175'; } }
function calculateFFMI() { const gender = document.getElementById('gender').value; let weight = parseFloat(document.getElementById('weight').value); let height = parseFloat(document.getElementById('height').value); let bodyfat = parseFloat(document.getElementById('bodyfat').value);
if (!weight || !height || bodyfat === undefined || isNaN(bodyfat)) { alert('Please fill in weight, height, and body fat %.'); return; }
let weightKg = currentUnit === 'imperial' ? weight * 0.453592 : weight; let heightCm = currentUnit === 'imperial' ? height * 2.54 : height; let heightM = heightCm / 100;
let ffm = weightKg * (1 - bodyfat / 100); let ffmi = ffm / (heightM * heightM); // Normalized FFMI adjusts for height so results are comparable at a standard 1.8m let normalizedFfmi = ffmi + 6.1 * (1.8 - heightM);
let ffmDisplay = currentUnit === 'imperial' ? Math.round(ffm * 2.20462) + ' lbs' : Math.round(ffm) + ' kg';
let interpretation = '';
if (gender === 'male') {
if (normalizedFfmi < 18) interpretation = 'Below average muscle mass';
else if (normalizedFfmi < 20) interpretation = 'Average';
else if (normalizedFfmi < 22) interpretation = 'Above average / muscular';
else if (normalizedFfmi < 25) interpretation = 'Very muscular (typical natural ceiling)';
else interpretation = 'Exceptional — above the typical drug-free range';
} else {
if (normalizedFfmi < 14) interpretation = 'Below average muscle mass';
else if (normalizedFfmi < 16) interpretation = 'Average';
else if (normalizedFfmi < 18) interpretation = 'Above average / muscular';
else if (normalizedFfmi < 21) interpretation = 'Very muscular (typical natural ceiling)';
else interpretation = 'Exceptional — above the typical drug-free range';
}
document.getElementById('ffmiResult').innerText = normalizedFfmi.toFixed(1);
document.getElementById('ffmResult').innerText = ffmDisplay;
document.getElementById('interpretation').innerText = interpretation;
document.getElementById('results').style.display = 'block';
}