Iliotibial band contracture causes etiology pathology and signs and symptoms deformities formed investigation and treatment explain in detail with appropriate illustrative diagrams and images

Reading File
Finding Sources
Finding Sources
Searching the Web

iliotibial band contracture etiology pathology signs symptoms deformities treatment orthopedics

Reading File
Reading File
Reading File
Reading File
Reading File
Loading Image
Loading Image
Finding Sources
Loading Image
Reading File
Reading File
Loading Image
Finding Sources
Reading File
Finding Sources
Reading File
Loading Image
I now have comprehensive content from Campbell's Operative Orthopaedics and supporting textbooks, along with excellent images. Let me compile the complete, detailed response.

Iliotibial Band Contracture - Comprehensive Review


1. Anatomy of the Iliotibial Band

The iliotibial band (ITB) is a dense fibrous condensation of the fascia lata running along the lateral thigh. Understanding its extensive proximal origin is essential for appreciating how it causes deformity.
Proximal origin: The fascia lata arises from the coccyx, sacrum, iliac crest, inguinal ligament, and pubic arch, investing all muscles of the thigh and buttock. Both the superficial and deep layers attach to the gluteus maximus and the entire tensor fasciae latae muscle. All these fascial attachments converge to form the iliotibial band on the lateral side of the thigh.
Distal attachments:
  • Proximally (in the knee region): lateral epicondyle of the femur
  • Distally: Gerdy's tubercle on the lateral tibial plateau
  • An anterior extension (the iliopatellar band) inserts onto the lateral patella
Three layers of the distal ITB:
  1. Superficial layer - the main fascial band
  2. Deep layer - begins 6 cm proximal to the lateral femoral epicondyle; connects to the lateral intermuscular septum ("Kaplan fibers")
  3. Capsule-osseous layer - creates a sling over the lateral femoral condyle, blends with the short head of the biceps femoris
The Kaplan fibers restrain internal tibial rotation, particularly in the ACL-deficient knee. The ITB moves forward in extension and backward in flexion but remains tense in both positions. During flexion, the ITB, popliteal tendon, and LCL cross each other, all enhancing lateral knee stability.
(Campbell's Operative Orthopaedics 15th Ed 2026)

2. Etiology

ITB contracture is most classically described in the context of paralytic conditions, though it may occur in any setting where sustained abnormal posturing leads to fascial shortening.

Primary Causes

CauseMechanism
PoliomyelitisMost classical cause. Muscle spasm during acute/convalescent stages forces the "frog position" (hips and knees flexed, extremities externally rotated). Sustained positioning causes secondary soft-tissue contracture, especially when gluteal muscles are weakened
MyelomeningoceleParalysis of hip abductors and extensors leads to hip abduction contracture
Cerebral palsy / upper motor neuron lesionsSpastic posturing causes adaptive ITB shortening
Intramuscular injections (in infants)Repeated gluteal/quadriceps injections can cause fibrosis and secondary ITB/fascia lata contracture
Burns and scarringLateral thigh burns can cause secondary fascial contracture
Prolonged immobilization / bed restSustained frog-leg position without passive range-of-motion exercises

Pathomechanics of Contracture Development

In poliomyelitis, spasm of the hamstrings, hip flexors, tensor fasciae latae, and hip abductors is common during the acute and convalescent stages. The patient assumes the frog position. When this position is maintained for even a few weeks, secondary soft-tissue contractures occur - a permanent deformity develops, especially when the gluteal muscles are weakened.
Critically, the deformity puts the gluteus maximus at a disadvantage and prevents its return to normal strength. If the faulty position is not corrected, growth of contracted soft tissues will fail to keep pace with bone growth, and deformity progressively increases.
(Campbell's Operative Orthopaedics 15th Ed 2026)

3. Pathology

The essential pathological process is shortening and fibrosis of the fascia lata/ITB complex, which acts as a taut bowstring across the lateral aspect of the lower limb.
Key pathological features:
  • Secondary adaptive changes occur soon after the ITB contracts. These cannot be corrected by non-operative measures; attempts at correction with traction only increase pelvic obliquity and hyperextension without correcting the deformity
  • The ITB lies lateral and anterior to the hip joint - contracture therefore causes flexion AND abduction
  • The hip is externally rotated for comfort; if not corrected, the external rotators of the hip themselves contract and contribute to a fixed rotational deformity
  • With growth, the contracted ITB acts as a taut lateral bowstring across the knee, gradually abducting and flexing the tibia
  • Subluxation occurs in severe cases: because of its lateral distal attachment, the ITB gradually rotates the tibia and fibula externally on the femur; when extreme, the lateral tibial condyle subluxates on the lateral femoral condyle, and the head of the fibula lies in the popliteal space

4. Signs and Symptoms

Symptoms

  • Difficulty walking (antalgic or Trendelenburg gait)
  • Inability to bring knees together (hip held in abduction)
  • Lateral knee and hip pain
  • Visible limb deformity
  • Snapping sensation over greater trochanter (external coxa saltans) - the thickened ITB snapping over the greater trochanter

Signs

  • Hip held in abduction, flexion, and external rotation (in established contracture)
  • Pelvic obliquity - the pelvis tilts toward the contracted side
  • Genu valgum - the knee is pushed laterally as the ITB bowstrings
  • Flexion deformity of the knee
  • External tibial torsion - the tibia is rotated outward
  • Limb-length discrepancy - related to loss of muscle function and altered growth
  • Increased lumbar lordosis - compensatory for pelvic obliquity
  • Secondary ankle and foot deformities (equinovalgus)

Positive Ober Test (Key Diagnostic Sign)

The Ober test is the classic clinical test for ITB contracture:
  • Patient lies in lateral decubitus position, lower leg flexed at hip and knee for stability
  • Examiner abducts and extends the upper (affected) leg with knee flexed at 90 degrees
  • Hips should be slightly extended to allow the ITB to pass over the greater trochanter
  • Examiner slowly lowers the limb with muscles relaxed
  • Positive test: The leg fails to fall back to the level of the tabletop - indicating ITB contracture
  • A positive test with the hip extended past neutral signifies ITB tightness
  • A positive test with the hip in neutral flexion/extension signifies gluteus medius contracture or tendinopathy
(Firestein & Kelley's Textbook of Rheumatology; Campbell's Operative Orthopaedics 15th Ed 2026)
Below is a clinical demonstration of hip examination technique (lateral decubitus position used for the Ober test):
Clinical hip examination in lateral decubitus position

5. Deformities Formed

ITB contracture produces a predictable cascade of deformities. These are summarized below:

Deformities Caused by ITB Contracture (eBox 36.2 - Campbell's)

DeformityMechanism
Flexion, abduction, external rotation contracture of the hipITB lies lateral and anterior to hip joint; contracture causes flexion and abduction. Hip is externally rotated for comfort; if not corrected, external rotators contract and produce fixed deformity
Genu valgum and flexion contracture of the kneeWith growth, contracted ITB acts as a taut bowstring across the knee, gradually abducts and flexes the tibia
External tibial torsion (with/without knee subluxation)Because of lateral distal attachment, ITB gradually rotates the tibia and fibula externally on the femur. In extreme cases, lateral tibial condyle subluxates on lateral femoral condyle; head of fibula displaces into popliteal space
Limb-length discrepancyMechanism not entirely defined; related to neurological/muscle function loss and altered growth
Pelvic obliquityThe hip abduction deformity tilts the pelvis obliquely
Increased lumbar lordosisCompensatory for pelvic obliquity and hip flexion deformity
Secondary ankle and foot deformitiesDue to altered limb alignment (equinovalgus)

Diagram of the hip release technique showing the ITB and surrounding muscles:

Complete release of flexion-abduction-external rotation contracture of hip showing ITB anatomy
eFig. 36.15 - Complete release of flexion-abduction-external rotation contracture of hip (Campbell's Operative Orthopaedics)

Diagram of supracondylar osteotomy for knee flexion contracture:

Supracondylar extension osteotomy for flexion contracture of knee
Supracondylar extension osteotomy of the femur for flexion contracture of the knee (Campbell's Operative Orthopaedics)

6. Investigations

Clinical Assessment (Primary)

  1. Full gait analysis - Trendelenburg gait, abductor lurch, knee valgus
  2. Ober test - gold standard clinical test (see above)
  3. Thomas test - to quantify hip flexion contracture
  4. Range of motion assessment - hip, knee, and ankle in all planes
  5. Leg length measurement - true vs apparent limb length discrepancy

Radiological Investigations

InvestigationFindings
Plain X-ray (AP pelvis, hip, knee)Pelvic obliquity, hip subluxation/dislocation, genu valgum, tibial torsion, degenerative changes. AP pelvis requires symmetrical iliac wings and obturator foramina
Standing long-leg X-rayAssess overall limb alignment, leg length discrepancy, mechanical axis deviation
MRI of hip/kneeAssesses the ITB itself for thickening/fibrosis, bursitis (trochanteric bursitis), labral pathology, articular cartilage
UltrasoundDynamic assessment of the snapping ITB over the greater trochanter; confirms trochanteric bursitis
CT scanAssesses bony deformities, rotational profile (tibial torsion, femoral anteversion)

EMG/Nerve Conduction Studies

  • Indicated when the underlying cause is a paralytic condition (poliomyelitis, spina bifida, cerebral palsy)
  • Assesses muscle function to guide tendon transfer planning

7. Treatment

Treatment depends on the severity of contracture and the patient's age. The fundamental principle is:
"Secondary adaptive changes occur soon after the iliotibial band contracts, and the resulting deformity, regardless of its duration or the patient's age, cannot be corrected by non-operative measures; attempts at correction with traction only increase the obliquity and hyperextension of the pelvis." - Campbell's Operative Orthopaedics 15th Ed

7A. Prevention (Paralytic Conditions - e.g., Poliomyelitis)

  • Place patient in neutral rotation, slight abduction, no flexion
  • Full passive range of motion of all joints, several times daily
  • Hips stretched in extension, adduction, and internal rotation
  • Use a Denis Browne type bar to hold feet in slight internal rotation and prevent rotation
  • Contracture must be corrected before ambulation is allowed

7B. Non-Operative Treatment

Non-operative management is effective only for mild or early contractures and for ITB syndrome (overuse variety):
  • Physical therapy - stretching program, ITB foam rolling, hip abductor and gluteal strengthening
  • Orthoses/bracing - long leg brace with pelvic band to maintain correction after surgical release
  • Serial casting - for very mild contractures in young children (recurvatum deformity prevention)
  • Corticosteroid injection - into trochanteric bursa for pain relief in associated bursitis
  • NSAIDs and activity modification for ITB syndrome component
Important: Non-operative measures cannot correct an established ITB contracture.

7C. Operative Treatment

Minor Contracture - Simple Fasciotomy

  • Division of the iliotibial band and fascia lata
  • Recurrence is common after simple fasciotomy
  • Does not correct severe contractures

Moderate Contracture - Ober-Yount Procedure

Indications: Abduction and external rotation contractures of the hip
Technique (Campbell's eTechnique 36.18):
  1. Patient in lateral position; transverse incision medial and distal to the ASIS, extending laterally above the greater trochanter
  2. Divide the iliopsoas tendon distally and excise 1 cm
  3. Detach the sartorius from ASIS, detach the rectus femoris from AIIS
  4. Divide the tensor fasciae latae from its anterior border completely posteriorly
  5. Detach the gluteus medius and minimus and the short external rotators from their trochanteric insertions
  6. Retract the sciatic nerve posteriorly; open the hip capsule from anterior to posterior, parallel to the acetabular labrum
  7. Yount distal release: Expose the fascia lata through a lateral longitudinal incision just proximal to the femoral condyle; divide the ITB and fascia lata posteriorly to the biceps tendon and anteriorly to the midline of the thigh at a level 2.5 cm proximal to the patella
  8. Excise a segment of the ITB and lateral intermuscular septum 5-8 cm long
  9. Confirm by palpation that all tight bands are divided
Post-operative care:
  • Hip spica cast with hip in full extension, 10 degrees abduction, and if possible internal rotation
  • Cast removed at 2 weeks
  • Long leg brace with pelvic band fitted with hip in same corrected position

Severe Deformity - Campbell Technique

  • Complete release of all muscles from the iliac wing with transfer of the crest of the ilium
  • Indicated for the most severe deformities with fixed bony remodelling

Knee Flexion Contracture - Graded Surgical Approach

SeverityTreatment
15-20 degrees or less (young children)Posterior hamstring lengthening and capsulotomy
Moderate contractureSupracondylar extension osteotomy of the femur
More than 70 degreesDivision of ITB, hamstring tendons, combined with posterior capsulotomy; skeletal traction (distal tibial pin); second-stage supracondylar osteotomy near skeletal maturity
Hip abduction contracture (myelomeningocele):
  • Proximal division of tensor fasciae latae + distal ITB release (Ober-Yount procedure) - corrects pelvic obliquity and prevents scoliosis (Miller's Review of Orthopaedics 9th Ed)

8. Summary Table

FeatureDetails
DefinitionFibrotic shortening of the fascia lata/ITB complex causing deformities at hip, knee, and tibia
Classic etiologyPoliomyelitis (sustained frog-leg posture); also myelomeningocele, CP, injections, burns
Key pathologyITB acts as a taut lateral bowstring; secondary adaptive changes are irreversible without surgery
Signature deformity at hipFlexion + abduction + external rotation
Signature deformity at kneeFlexion contracture + genu valgum + external tibial torsion
Key clinical testPositive Ober test (leg fails to adduct to table level)
InvestigationsClinical + X-ray series; MRI/US for soft tissue; EMG in paralytic cases
Minor contracture RxSimple fasciotomy (high recurrence)
Moderate-severe RxOber-Yount procedure (hip and distal ITB release)
Severe RxCampbell technique (full iliac wing release); supracondylar osteotomy for knee

Sources:
  • Campbell's Operative Orthopaedics 15th Ed 2026, Chapter 36 (Paralytic Disorders - Flexion/Abduction Contractures)
  • Firestein & Kelley's Textbook of Rheumatology
  • Miller's Review of Orthopaedics 9th Edition
  • Goldman-Cecil Medicine

Give me pdf download link

Reading File
Running Command

mkdir -p /home/daytona/workspace/itb-contracture && ls /home/daytona/workspace/i…

Writing File

~/itb-contracture/generate_pdf.py

from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.lib import colors
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    HRFlowable, PageBreak, Image, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus.flowables import HRFlowable
import urllib.request
import os

OUTPUT = "/home/daytona/workspace/itb-contracture/ITB_Contracture.pdf"

# Download images
img_urls = {
    "hip_release.png": "https://cdn.orris.care/cdss_images/87bebd5f74c03d1a33011950fcbba1768cca1b228a23e208afd95eb81a79174f.png",
    "knee_osteotomy.png": "https://cdn.orris.care/cdss_images/72ee2556f5f728cfcf170c0a5282f5f9cd96e7fe69c1a119898234592eebcd4b.png",
    "ober_test.png": "https://cdn.orris.care/cdss_images/20f8e7bfb844262b54cd352cbe5ad8c59e18b3dfd83e23e4ae13bd6794d92f3d.png",
    "faber_test.png": "https://cdn.orris.care/cdss_images/0a583710823b4e33d14b21b3053ae8456c9385935e0b1fd416aa0e63472419d8.png",
}
img_dir = "/home/daytona/workspace/itb-contracture/"
for fname, url in img_urls.items():
    fpath = img_dir + fname
    if not os.path.exists(fpath):
        try:
            urllib.request.urlretrieve(url, fpath)
            print(f"Downloaded {fname}")
        except Exception as e:
            print(f"Failed {fname}: {e}")

# Styles
doc = SimpleDocTemplate(
    OUTPUT, pagesize=A4,
    leftMargin=2*cm, rightMargin=2*cm,
    topMargin=2.2*cm, bottomMargin=2.2*cm
)

styles = getSampleStyleSheet()

NAVY = colors.HexColor("#1a3560")
TEAL = colors.HexColor("#1e7a8c")
LIGHT_BLUE = colors.HexColor("#dbeeff")
LIGHT_GRAY = colors.HexColor("#f5f5f5")
ORANGE = colors.HexColor("#d4620a")
WHITE = colors.white

title_style = ParagraphStyle("Title", parent=styles["Title"],
    fontSize=22, textColor=WHITE, alignment=TA_CENTER,
    spaceAfter=4, fontName="Helvetica-Bold")

subtitle_style = ParagraphStyle("Subtitle", parent=styles["Normal"],
    fontSize=11, textColor=colors.HexColor("#cce4ff"), alignment=TA_CENTER,
    spaceAfter=2, fontName="Helvetica")

h1_style = ParagraphStyle("H1", parent=styles["Heading1"],
    fontSize=14, textColor=WHITE, fontName="Helvetica-Bold",
    spaceBefore=14, spaceAfter=4, leftIndent=0, borderPad=4)

h2_style = ParagraphStyle("H2", parent=styles["Heading2"],
    fontSize=12, textColor=NAVY, fontName="Helvetica-Bold",
    spaceBefore=10, spaceAfter=3, leftIndent=0)

h3_style = ParagraphStyle("H3", parent=styles["Heading3"],
    fontSize=10.5, textColor=TEAL, fontName="Helvetica-Bold",
    spaceBefore=7, spaceAfter=2)

body_style = ParagraphStyle("Body", parent=styles["Normal"],
    fontSize=9.5, leading=14, textColor=colors.HexColor("#222222"),
    alignment=TA_JUSTIFY, fontName="Helvetica", spaceAfter=5)

bullet_style = ParagraphStyle("Bullet", parent=body_style,
    leftIndent=14, bulletIndent=4, spaceAfter=3,
    bulletText="\u2022")

note_style = ParagraphStyle("Note", parent=body_style,
    fontSize=8.5, textColor=colors.HexColor("#555555"),
    fontName="Helvetica-Oblique", alignment=TA_CENTER, spaceAfter=3)

caption_style = ParagraphStyle("Caption", parent=styles["Normal"],
    fontSize=8, textColor=colors.HexColor("#444444"),
    fontName="Helvetica-Oblique", alignment=TA_CENTER, spaceAfter=8)

def section_header(text, num):
    data = [[Paragraph(f"{num}. {text}", h1_style)]]
    t = Table(data, colWidths=[17*cm])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), NAVY),
        ("ROUNDEDCORNERS", [4,4,4,4]),
        ("TOPPADDING", (0,0), (-1,-1), 7),
        ("BOTTOMPADDING", (0,0), (-1,-1), 7),
        ("LEFTPADDING", (0,0), (-1,-1), 10),
    ]))
    return t

def sub_header(text):
    return Paragraph(text, h2_style)

def sub_sub_header(text):
    return Paragraph(text, h3_style)

def body(text):
    return Paragraph(text, body_style)

def bullet(text):
    return Paragraph(f"\u2022   {text}", bullet_style)

def spacer(h=6):
    return Spacer(1, h)

def hr():
    return HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#cccccc"), spaceAfter=4, spaceBefore=4)

def img_block(path, w, caption):
    elems = []
    if os.path.exists(path):
        im = Image(path, width=w, height=None)
        im.hAlign = "CENTER"
        elems.append(im)
    elems.append(Paragraph(caption, caption_style))
    return elems

def make_table(headers, rows, col_widths=None):
    data = [headers] + rows
    if col_widths is None:
        col_widths = [17*cm / len(headers)] * len(headers)
    t = Table(data, colWidths=col_widths, repeatRows=1)
    style = [
        ("BACKGROUND", (0,0), (-1,0), NAVY),
        ("TEXTCOLOR", (0,0), (-1,0), WHITE),
        ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
        ("FONTSIZE", (0,0), (-1,0), 9),
        ("FONTNAME", (0,1), (-1,-1), "Helvetica"),
        ("FONTSIZE", (0,1), (-1,-1), 8.5),
        ("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, LIGHT_GRAY]),
        ("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#bbbbbb")),
        ("VALIGN", (0,0), (-1,-1), "TOP"),
        ("TOPPADDING", (0,0), (-1,-1), 5),
        ("BOTTOMPADDING", (0,0), (-1,-1), 5),
        ("LEFTPADDING", (0,0), (-1,-1), 6),
        ("RIGHTPADDING", (0,0), (-1,-1), 6),
        ("WORDWRAP", (0,0), (-1,-1), True),
    ]
    t.setStyle(TableStyle(style))
    return t

def highlight_box(text):
    data = [[Paragraph(text, ParagraphStyle("hi", parent=body_style,
        textColor=NAVY, fontName="Helvetica-BoldOblique", fontSize=9.5))]]
    t = Table(data, colWidths=[17*cm])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), LIGHT_BLUE),
        ("LEFTPADDING", (0,0), (-1,-1), 12),
        ("RIGHTPADDING", (0,0), (-1,-1), 12),
        ("TOPPADDING", (0,0), (-1,-1), 8),
        ("BOTTOMPADDING", (0,0), (-1,-1), 8),
        ("BOX", (0,0), (-1,-1), 1.5, TEAL),
    ]))
    return t

# ─── Cover Page ───────────────────────────────────────────────────────────────
story = []

cover_data = [[Paragraph("ILIOTIBIAL BAND CONTRACTURE", title_style)],
              [Paragraph("Etiology | Pathology | Signs & Symptoms | Deformities | Investigations | Treatment", subtitle_style)],
              [Paragraph("A Comprehensive Orthopaedic Review", subtitle_style)],
              [Spacer(1, 6)],
              [Paragraph("Based on Campbell's Operative Orthopaedics 15th Ed 2026 & authoritative orthopaedic textbooks", note_style)],
             ]
cover_t = Table(cover_data, colWidths=[17*cm])
cover_t.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,-1), NAVY),
    ("TOPPADDING", (0,0), (-1,-1), 14),
    ("BOTTOMPADDING", (0,0), (-1,-1), 14),
    ("LEFTPADDING", (0,0), (-1,-1), 20),
    ("RIGHTPADDING", (0,0), (-1,-1), 20),
]))
story.append(cover_t)
story.append(spacer(18))

# ─── Section 1: Anatomy ───────────────────────────────────────────────────────
story.append(section_header("Anatomy of the Iliotibial Band", 1))
story.append(spacer(6))
story.append(body(
    "The iliotibial band (ITB) is a dense fibrous condensation of the fascia lata running along the "
    "lateral thigh. The fascia lata arises proximally from the coccyx, sacrum, iliac crest, inguinal "
    "ligament, and pubic arch, investing all muscles of the thigh and buttock. Both the superficial "
    "and deep layers attach to the gluteus maximus and the entire tensor fasciae latae muscle. All "
    "these fascial attachments converge to form the iliotibial band on the lateral thigh."
))
story.append(sub_header("Distal Attachments"))
for b in [
    "Lateral epicondyle of the femur (proximal insertion)",
    "Gerdy's tubercle on the lateral tibial plateau (distal insertion)",
    "Iliopatellar band — anterior extension to the lateral patella",
]:
    story.append(bullet(b))
story.append(spacer(4))
story.append(sub_header("Three Layers of the Distal ITB"))
t = make_table(
    [Paragraph("Layer", styles["Normal"]), Paragraph("Description", styles["Normal"])],
    [
        [Paragraph("Superficial", body_style), Paragraph("Main fascial band coursing along lateral thigh", body_style)],
        [Paragraph("Deep (Kaplan fibers)", body_style), Paragraph("Begins 6 cm proximal to lateral femoral epicondyle; connects to lateral intermuscular septum; restrains internal tibial rotation (especially in ACL-deficient knee)", body_style)],
        [Paragraph("Capsule-osseous layer", body_style), Paragraph("Creates sling over lateral femoral condyle; blends with short head of biceps femoris; inserts posterior to Gerdy's tubercle", body_style)],
    ],
    col_widths=[4*cm, 13*cm]
)
story.append(t)
story.append(spacer(6))
story.append(body(
    "The ITB moves forward in extension and backward in flexion but remains tense in both positions. "
    "During flexion, the ITB, popliteal tendon, and LCL cross each other — all serving to enhance "
    "lateral stability of the knee."
))

# ─── Section 2: Etiology ──────────────────────────────────────────────────────
story.append(spacer(10))
story.append(section_header("Etiology", 2))
story.append(spacer(6))
story.append(body(
    "ITB contracture is most classically described in paralytic conditions, though it may occur "
    "whenever sustained abnormal posturing leads to fascial shortening."
))
t = make_table(
    [Paragraph("Cause", styles["Normal"]), Paragraph("Mechanism", styles["Normal"])],
    [
        [Paragraph("Poliomyelitis (classic)", body_style),
         Paragraph("Acute muscle spasm forces 'frog position' (hips and knees flexed, externally rotated). "
                   "Sustained positioning causes secondary soft-tissue contracture, especially when gluteal muscles are weakened.", body_style)],
        [Paragraph("Myelomeningocele", body_style),
         Paragraph("Paralysis of hip abductors/extensors leads to hip abduction contracture; ITB tethers laterally.", body_style)],
        [Paragraph("Cerebral palsy / UMN lesions", body_style),
         Paragraph("Spastic posturing causes adaptive ITB shortening over time.", body_style)],
        [Paragraph("Intramuscular injections (infants)", body_style),
         Paragraph("Repeated gluteal/quadriceps injections cause fibrosis and secondary fascia lata contracture.", body_style)],
        [Paragraph("Burns and lateral thigh scarring", body_style),
         Paragraph("Scar contracture secondarily tightens the overlying fascia lata/ITB.", body_style)],
        [Paragraph("Prolonged immobilization", body_style),
         Paragraph("Sustained frog-leg position without passive ROM exercises allows progressive shortening.", body_style)],
    ],
    col_widths=[4.5*cm, 12.5*cm]
)
story.append(t)

# ─── Section 3: Pathology ─────────────────────────────────────────────────────
story.append(spacer(10))
story.append(section_header("Pathology", 3))
story.append(spacer(6))
story.append(highlight_box(
    '"Secondary adaptive changes occur soon after the iliotibial band contracts, and the resulting '
    'deformity, regardless of its duration or of the patient\'s age, cannot be corrected by non-operative '
    'measures; on the contrary, attempts at correction with traction only increase the obliquity and '
    'hyperextension of the pelvis." — Campbell\'s Operative Orthopaedics 15th Ed 2026'
))
story.append(spacer(6))
for b in [
    "<b>Fascial fibrosis:</b> Progressive shortening and fibrosis of the fascia lata/ITB complex — the core pathological process.",
    "<b>Lateral bowstring effect:</b> With growth, the contracted ITB acts as a taut bowstring along the lateral limb, gradually abducting and flexing the tibia on the femur.",
    "<b>Hip position effect:</b> The ITB lies lateral and anterior to the hip joint; contracture forces flexion AND abduction. The hip adopts external rotation for comfort.",
    "<b>Progressive external rotator contracture:</b> If hip external rotation is not corrected, the external rotators themselves contract, contributing to fixed rotational deformity.",
    "<b>Knee subluxation (severe):</b> The ITB's lateral distal attachment gradually rotates the tibia externally. In extreme cases, the lateral tibial condyle subluxates on the lateral femoral condyle, and the fibular head displaces into the popliteal space.",
    "<b>Growth failure of contracted tissues:</b> In children, contracted soft tissues fail to keep pace with bone growth — deformity progressively worsens without treatment.",
]:
    story.append(bullet(b))

# ─── Section 4: Signs & Symptoms ─────────────────────────────────────────────
story.append(spacer(10))
story.append(section_header("Signs and Symptoms", 4))
story.append(spacer(6))
story.append(sub_header("Symptoms"))
for b in [
    "Difficulty walking — antalgic or Trendelenburg gait",
    "Inability to bring knees together (hip held in abduction)",
    "Lateral hip and knee pain",
    "Snapping sensation over the greater trochanter (external coxa saltans) — ITB snapping over the trochanter",
    "Visible progressive limb deformity",
    "Pelvic tilt and low back pain (due to pelvic obliquity)",
]:
    story.append(bullet(b))

story.append(spacer(4))
story.append(sub_header("Signs"))
t = make_table(
    [Paragraph("Sign", styles["Normal"]), Paragraph("Description", styles["Normal"])],
    [
        [Paragraph("Hip abduction + flexion + ER", body_style), Paragraph("Classic triad at the hip — the limb is held in abduction, flexion, and external rotation", body_style)],
        [Paragraph("Pelvic obliquity", body_style), Paragraph("Pelvis tilts toward the contracted side; apparent limb-length discrepancy", body_style)],
        [Paragraph("Genu valgum", body_style), Paragraph("Knee pushed laterally as ITB bowstrings from lateral ilium to Gerdy's tubercle", body_style)],
        [Paragraph("Knee flexion contracture", body_style), Paragraph("ITB prevents full knee extension; may be associated with posterior knee subluxation", body_style)],
        [Paragraph("External tibial torsion", body_style), Paragraph("Tibia rotated outward; in severe cases, knee joint subluxation", body_style)],
        [Paragraph("Limb-length discrepancy", body_style), Paragraph("True shortening from altered growth; apparent from pelvic obliquity", body_style)],
        [Paragraph("Lumbar lordosis", body_style), Paragraph("Compensatory increase in lumbar lordosis for hip flexion deformity", body_style)],
        [Paragraph("Ankle/foot deformities", body_style), Paragraph("Secondary equinovalgus from altered limb alignment", body_style)],
    ],
    col_widths=[5*cm, 12*cm]
)
story.append(t)

story.append(spacer(8))
story.append(sub_header("Ober Test — Key Clinical Diagnostic Test"))
story.append(body(
    "The Ober test is the gold-standard clinical test for ITB contracture:"
))
for b in [
    "Patient lies in <b>lateral decubitus</b> position; lower leg flexed at hip and knee for stability",
    "Examiner <b>abducts and extends</b> the upper (affected) leg with knee flexed at 90°",
    "Hips slightly extended to allow the ITB to pass over the greater trochanter",
    "Examiner slowly <b>lowers the limb</b> with the muscles relaxed",
    "<b>Positive test:</b> The leg fails to fall back to the level of the tabletop — confirms ITB contracture",
    "Positive with <b>hip extended past neutral</b> → ITB tightness",
    "Positive with <b>hip in neutral</b> → Gluteus medius contracture/tendinopathy",
]:
    story.append(bullet(b))

story.append(spacer(8))

# Images side by side
img1_path = img_dir + "ober_test.png"
img2_path = img_dir + "faber_test.png"
img_row = []
if os.path.exists(img1_path):
    img_row.append([Image(img1_path, width=7.5*cm, height=8*cm), Image(img2_path, width=7.5*cm, height=8*cm)])
    img_t = Table(img_row, colWidths=[8.5*cm, 8.5*cm])
    img_t.setStyle(TableStyle([("ALIGN", (0,0), (-1,-1), "CENTER"), ("VALIGN", (0,0), (-1,-1), "MIDDLE")]))
    story.append(img_t)
    story.append(Paragraph(
        "Left: Hip examination (lateral decubitus) used in Ober test technique. "
        "Right: FABER test — also performed in lateral position for hip assessment.",
        caption_style
    ))

# ─── Section 5: Deformities ───────────────────────────────────────────────────
story.append(spacer(10))
story.append(section_header("Deformities Formed", 5))
story.append(spacer(6))
story.append(body(
    "ITB contracture produces a predictable cascade of deformities at the hip, knee, and distally — "
    "collectively described in eBox 36.2 of Campbell's Operative Orthopaedics:"
))
t = make_table(
    [Paragraph("Deformity", styles["Normal"]),
     Paragraph("Mechanism", styles["Normal"]),
     Paragraph("Key Features", styles["Normal"])],
    [
        [Paragraph("Flexion + Abduction + External Rotation of Hip", body_style),
         Paragraph("ITB lies lateral and anterior to hip joint; shortening pulls hip into flexion and abduction", body_style),
         Paragraph("Hip held in 'frog' position; external rotators secondarily contract", body_style)],
        [Paragraph("Genu Valgum + Knee Flexion Contracture", body_style),
         Paragraph("Contracted ITB bowstrings across lateral knee, abducting and flexing the tibia", body_style),
         Paragraph("With growth, worsens progressively; >70° flexion deforms articular surfaces", body_style)],
        [Paragraph("External Tibial Torsion ± Knee Subluxation", body_style),
         Paragraph("Lateral distal attachment of ITB rotates tibia/fibula externally on femur", body_style),
         Paragraph("Extreme: lateral tibial condyle subluxates; fibular head displaces into popliteal space", body_style)],
        [Paragraph("Limb-Length Discrepancy", body_style),
         Paragraph("Altered growth from neurological loss and mechanical factors", body_style),
         Paragraph("May be considerable after years of growth", body_style)],
        [Paragraph("Pelvic Obliquity", body_style),
         Paragraph("Hip abduction contracture tilts pelvis", body_style),
         Paragraph("Can cause compensatory scoliosis", body_style)],
        [Paragraph("Increased Lumbar Lordosis", body_style),
         Paragraph("Compensatory for hip flexion deformity and pelvic tilt", body_style),
         Paragraph("Contributes to chronic low back pain", body_style)],
        [Paragraph("Secondary Foot/Ankle Deformities", body_style),
         Paragraph("Altered limb alignment and muscle imbalance", body_style),
         Paragraph("Equinovalgus most common", body_style)],
    ],
    col_widths=[4.5*cm, 7*cm, 5.5*cm]
)
story.append(t)
story.append(spacer(8))

# Images
hip_img_path = img_dir + "hip_release.png"
knee_img_path = img_dir + "knee_osteotomy.png"
if os.path.exists(hip_img_path) and os.path.exists(knee_img_path):
    img_row2 = [[Image(hip_img_path, width=7.5*cm, height=9*cm),
                 Image(knee_img_path, width=7*cm, height=9*cm)]]
    img_t2 = Table(img_row2, colWidths=[8.5*cm, 8.5*cm])
    img_t2.setStyle(TableStyle([("ALIGN", (0,0), (-1,-1), "CENTER"), ("VALIGN", (0,0), (-1,-1), "MIDDLE")]))
    story.append(img_t2)
    story.append(Paragraph(
        "Left: Surgical anatomy showing complete release of flexion-abduction-external rotation "
        "contracture of hip (Campbell's eFig. 36.15). "
        "Right: Supracondylar extension osteotomy of femur for knee flexion contracture.",
        caption_style
    ))

# ─── Section 6: Investigations ────────────────────────────────────────────────
story.append(PageBreak())
story.append(section_header("Investigations", 6))
story.append(spacer(6))
story.append(sub_header("Clinical Assessment (Primary)"))
for b in [
    "<b>Full gait analysis</b> — Trendelenburg gait, abductor lurch, knee valgus in stance",
    "<b>Ober test</b> — gold standard for ITB contracture",
    "<b>Thomas test</b> — quantifies hip flexion contracture",
    "<b>Range of motion assessment</b> — hip, knee, and ankle in all planes",
    "<b>Limb length measurement</b> — true vs. apparent discrepancy",
    "<b>Neurological assessment</b> — muscle power grading, sensation (for paralytic causes)",
]:
    story.append(bullet(b))

story.append(spacer(6))
story.append(sub_header("Radiological Investigations"))
t = make_table(
    [Paragraph("Investigation", styles["Normal"]), Paragraph("Findings / Purpose", styles["Normal"])],
    [
        [Paragraph("Plain X-ray (AP Pelvis, Hip, Knee)", body_style),
         Paragraph("Pelvic obliquity, hip subluxation/dislocation, genu valgum, tibial torsion, "
                   "degenerative changes. AP pelvis requires symmetrical iliac wings and obturator foramina.", body_style)],
        [Paragraph("Standing Long-leg X-ray", body_style),
         Paragraph("Overall limb alignment, leg-length discrepancy, mechanical axis deviation, "
                   "assessment of genu valgum magnitude.", body_style)],
        [Paragraph("MRI Hip/Knee/Thigh", body_style),
         Paragraph("ITB thickening and fibrosis, trochanteric bursitis, labral pathology, "
                   "articular cartilage assessment, muscle wasting.", body_style)],
        [Paragraph("Ultrasound", body_style),
         Paragraph("Dynamic assessment of snapping ITB over greater trochanter; "
                   "trochanteric bursitis confirmation; guided injection planning.", body_style)],
        [Paragraph("CT Scan", body_style),
         Paragraph("Bony deformities, rotational profile (tibial torsion, femoral anteversion), "
                   "pre-operative planning for osteotomy.", body_style)],
    ],
    col_widths=[5*cm, 12*cm]
)
story.append(t)
story.append(spacer(6))
story.append(sub_header("Electrodiagnostic Studies"))
story.append(body(
    "EMG and nerve conduction studies are indicated when the underlying cause is a paralytic condition "
    "(poliomyelitis, spina bifida, cerebral palsy). They assess residual muscle function and guide "
    "tendon transfer planning."
))

# ─── Section 7: Treatment ─────────────────────────────────────────────────────
story.append(spacer(10))
story.append(section_header("Treatment", 7))
story.append(spacer(6))
story.append(highlight_box(
    "Fundamental Principle: Once ITB contracture is established, it CANNOT be corrected by "
    "non-operative measures. Traction attempts only worsen pelvic obliquity. Surgical release is required."
))
story.append(spacer(8))

story.append(sub_header("7A. Prevention (Paralytic Conditions)"))
for b in [
    "Position patient in <b>neutral rotation, slight abduction, no flexion</b>",
    "Full <b>passive range of motion</b> of all joints, multiple times daily",
    "Hips stretched in extension, adduction, and internal rotation",
    "Denis Browne-type bar clipped to shoes to hold feet in slight internal rotation",
    "Contracture must be corrected <b>before ambulation is allowed</b>",
]:
    story.append(bullet(b))

story.append(spacer(6))
story.append(sub_header("7B. Non-Operative Treatment (Mild / ITB Syndrome)"))
t = make_table(
    [Paragraph("Modality", styles["Normal"]), Paragraph("Details", styles["Normal"])],
    [
        [Paragraph("Physical therapy", body_style), Paragraph("ITB stretching program, hip abductor and gluteal strengthening, gait retraining", body_style)],
        [Paragraph("Foam rolling / myofascial release", body_style), Paragraph("Reduces tightness in mild/early contracture and overuse presentations", body_style)],
        [Paragraph("Orthoses / bracing", body_style), Paragraph("Long leg brace with pelvic band to maintain post-surgical correction", body_style)],
        [Paragraph("Serial casting", body_style), Paragraph("For very mild contractures in young children; also used for recurvatum prevention", body_style)],
        [Paragraph("Corticosteroid injection", body_style), Paragraph("Into trochanteric bursa for associated bursitis pain relief", body_style)],
        [Paragraph("NSAIDs", body_style), Paragraph("Symptomatic relief in overuse/ITB syndrome presentations", body_style)],
    ],
    col_widths=[5*cm, 12*cm]
)
story.append(t)

story.append(spacer(8))
story.append(sub_header("7C. Operative Treatment"))

story.append(sub_sub_header("Minor Contracture — Simple Fasciotomy"))
story.append(body(
    "Division of the iliotibial band and fascia lata around the hip and knee. Simple fasciotomies "
    "may correct a minor contracture, but recurrence is common and they do not correct severe contractures."
))

story.append(sub_sub_header("Moderate Contracture — Ober-Yount Procedure"))
story.append(body(
    "<b>Indication:</b> Abduction and external rotation contractures of the hip. "
    "Also used in myelomeningocele: proximal division of tensor fasciae latae + distal ITB release."
))
steps = [
    "Patient in lateral position; transverse incision medial and distal to the ASIS, extending laterally above the greater trochanter",
    "Divide the <b>iliopsoas tendon</b> distally; excise 1 cm",
    "Detach the <b>sartorius</b> from ASIS; detach <b>rectus femoris</b> from AIIS; divide <b>tensor fasciae latae</b> from its anterior border completely posteriorly",
    "Detach <b>gluteus medius and minimus</b> and short external rotators from trochanteric insertions",
    "Retract sciatic nerve posteriorly; open hip capsule parallel to acetabular labrum",
    "<b>Yount distal release:</b> Lateral longitudinal incision proximal to femoral condyle; divide ITB and fascia lata from biceps tendon to midline, 2.5 cm proximal to patella",
    "<b>Excise</b> a 5–8 cm segment of ITB and lateral intermuscular septum",
    "Confirm by palpation all tight bands are divided",
    "<b>Post-op:</b> Hip spica cast — full extension, 10° abduction, internal rotation if possible; cast off at 2 weeks; long leg brace with pelvic band",
]
for i, s in enumerate(steps, 1):
    story.append(Paragraph(f"<b>{i}.</b> &nbsp; {s}", bullet_style))

story.append(spacer(6))
story.append(sub_sub_header("Severe Deformity — Campbell Technique"))
story.append(body(
    "Complete release of all muscles from the iliac wing with transfer of the crest of the ilium. "
    "Indicated for the most severe deformities where simpler releases are insufficient."
))

story.append(spacer(6))
story.append(sub_sub_header("Knee Flexion Contracture — Graded Approach"))
t = make_table(
    [Paragraph("Severity", styles["Normal"]), Paragraph("Surgical Treatment", styles["Normal"])],
    [
        [Paragraph("≤15–20° (young children)", body_style), Paragraph("Posterior hamstring lengthening + capsulotomy", body_style)],
        [Paragraph("Moderate contracture", body_style), Paragraph("Supracondylar extension osteotomy of the femur", body_style)],
        [Paragraph(">70° contracture", body_style), Paragraph("Division of ITB + hamstring tendons + posterior capsulotomy; skeletal traction via distal tibial pin; second-stage supracondylar osteotomy near skeletal maturity", body_style)],
    ],
    col_widths=[5*cm, 12*cm]
)
story.append(t)

# ─── Section 8: Summary ───────────────────────────────────────────────────────
story.append(spacer(10))
story.append(section_header("Summary", 8))
story.append(spacer(6))
t = make_table(
    [Paragraph("Feature", styles["Normal"]), Paragraph("Details", styles["Normal"])],
    [
        [Paragraph("Definition", body_style), Paragraph("Fibrotic shortening of fascia lata/ITB complex causing deformities at hip, knee, and tibia", body_style)],
        [Paragraph("Classic etiology", body_style), Paragraph("Poliomyelitis (sustained frog-leg posture); also myelomeningocele, CP, injections, burns", body_style)],
        [Paragraph("Key pathology", body_style), Paragraph("ITB acts as taut lateral bowstring; secondary adaptive changes are irreversible without surgery", body_style)],
        [Paragraph("Hip deformity", body_style), Paragraph("Flexion + abduction + external rotation", body_style)],
        [Paragraph("Knee deformity", body_style), Paragraph("Flexion contracture + genu valgum + external tibial torsion ± subluxation", body_style)],
        [Paragraph("Key clinical test", body_style), Paragraph("Positive Ober test (leg fails to adduct to table level)", body_style)],
        [Paragraph("Investigations", body_style), Paragraph("Clinical + X-ray series; MRI/US for soft tissue; EMG in paralytic cases; CT for rotational profile", body_style)],
        [Paragraph("Minor contracture Rx", body_style), Paragraph("Simple fasciotomy (high recurrence)", body_style)],
        [Paragraph("Moderate-severe Rx", body_style), Paragraph("Ober-Yount procedure (hip + distal ITB release)", body_style)],
        [Paragraph("Severe Rx", body_style), Paragraph("Campbell technique (full iliac wing release); supracondylar osteotomy for knee", body_style)],
    ],
    col_widths=[4.5*cm, 12.5*cm]
)
story.append(t)

story.append(spacer(14))
story.append(HRFlowable(width="100%", thickness=1, color=NAVY))
story.append(spacer(4))
story.append(Paragraph(
    "Sources: Campbell's Operative Orthopaedics 15th Ed 2026 | Firestein &amp; Kelley's Textbook of Rheumatology | "
    "Miller's Review of Orthopaedics 9th Ed | Goldman-Cecil Medicine",
    ParagraphStyle("src", parent=body_style, fontSize=8, textColor=colors.HexColor("#666666"),
                   alignment=TA_CENTER)
))

# Build PDF
doc.build(story)
print("PDF generated:", OUTPUT)
Running Command

cd /home/daytona/workspace/itb-contracture && python generate_pdf.py 2>&1

Your credits are exhausted. You can purchase a top-up or subscribe to a plan to continue using Orris. If you're already subscribed, your daily credits will reset tomorrow.
This is a shared conversation. Sign in to Orris to start your own chat.