Downloadable picture/slide to explain cooperative binding of hemoglobin

Reading File
Now let me search the medical library for hemoglobin cooperative binding content and images, and also read the PPTX skill since the user wants a downloadable slide.
Finding Sources
Reading File
Finding Sources
Reading File
Good - I have the key textbook content. Now let me read the actual hemoglobin cooperative binding section from Lippincott's for the detailed content, and also search for images.
Reading File
I found the image URLs. Let me read more content and fetch the images simultaneously.
Reading File
Loading Image
Excellent! I have the key images. Now let me fetch the cooperative binding diagram (Fig 3.7) and the O2 transport diagram (Fig 3.8) too, then build the PPTX slide.
Loading Image
Loading Image
I have all three excellent diagrams from Lippincott's. Now let me build a comprehensive, well-designed PPTX slide using these images and key textbook content.
Running Command

mkdir -p /tmp/workspace/hb-cooperative && ls /tmp/workspace/hb-cooperative/

Running Command

python3 << 'EOF' import subprocess, json, base64 from io import BytesIO from pptx import Presentation from pptx.util import Inches, Pt, Emu from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN, MSO_ANCHOR # Download the three images urls = [ "https://cdn.orris.care/cdss_images/2cdde4c4bed29b706395298c5d1d24c0be3e84c808853ff069fb92de4801c9cc.png", # Fig 3.6 ODC "https://cdn.orris.care/cdss_images/b060956996ffe177479ae742ccd0e647c749e33e5f6d6746aaef192cc5b725ed.png", # Fig 3.7 cooperative "https://cdn.orris.care/cdss_images/a3aaa333a9aea93914106afd00ba5c11c666bf3a33add030124ee274c3e4c5e6.png", # Fig 3.8 transport ] result = json.loads(subprocess.check_output( ["python", "/tmp/skills/shared/scripts/fetch_images.py"] + urls )) images = [] for img in result: if img["base64"]: header, b64 = img["base64"].split(",", 1) raw = base64.b64decode(b64) images.append(BytesIO(raw)) else: images.append(None) print(f"Downloaded {sum(1 for i in images if i)} / {len(images)} images") # ---- Build Presentation ---- prs = Presentation() prs.slide_width = Inches(13.333) prs.slide_height = Inches(7.5) blank = prs.slide_layouts[6] # ============================================================ # SLIDE 1 — Title slide # ============================================================ slide1 = prs.slides.add_slide(blank) # Dark background bg = slide1.background fill = bg.fill fill.solid() fill.fore_color.rgb = RGBColor(0x0D, 0x1B, 0x2A) # Title tb = slide1.shapes.add_textbox(Inches(1), Inches(2.3), Inches(11.3), Inches(1.4)) tf = tb.text_frame tf.word_wrap = True p = tf.paragraphs[0] p.alignment = PP_ALIGN.CENTER run = p.add_run() run.text = "Cooperative Binding of Hemoglobin" run.font.name = "Calibri" run.font.size = Pt(46) run.font.bold = True run.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF) # Subtitle tb2 = slide1.shapes.add_textbox(Inches(1), Inches(3.85), Inches(11.3), Inches(0.7)) tf2 = tb2.text_frame p2 = tf2.paragraphs[0] p2.alignment = PP_ALIGN.CENTER run2 = p2.add_run() run2.text = "How hemoglobin loads O₂ in the lungs and unloads it in the tissues" run2.font.name = "Calibri" run2.font.size = Pt(22) run2.font.color.rgb = RGBColor(0xA8, 0xD5, 0xFF) # Accent line from pptx.util import Inches, Pt from pptx.oxml.ns import qn from lxml import etree # Simple colored rectangle as accent line line_shape = slide1.shapes.add_shape( 1, # MSO_SHAPE_TYPE.RECTANGLE Inches(4.0), Inches(4.7), Inches(5.333), Inches(0.06) ) line_shape.fill.solid() line_shape.fill.fore_color.rgb = RGBColor(0x4F, 0xC3, 0xF7) line_shape.line.fill.background() # Source note tb3 = slide1.shapes.add_textbox(Inches(1), Inches(6.8), Inches(11.3), Inches(0.4)) tf3 = tb3.text_frame p3 = tf3.paragraphs[0] p3.alignment = PP_ALIGN.CENTER run3 = p3.add_run() run3.text = "Source: Lippincott Illustrated Reviews – Biochemistry, 8th Ed." run3.font.name = "Calibri" run3.font.size = Pt(12) run3.font.color.rgb = RGBColor(0x80, 0x96, 0xAA) # ============================================================ # SLIDE 2 — What is cooperative binding? # ============================================================ slide2 = prs.slides.add_slide(blank) bg2 = slide2.background fill2 = bg2.fill fill2.solid() fill2.fore_color.rgb = RGBColor(0xF7, 0xFA, 0xFF) # Header bar hdr = slide2.shapes.add_shape(1, Inches(0), Inches(0), Inches(13.333), Inches(0.95)) hdr.fill.solid() hdr.fill.fore_color.rgb = RGBColor(0x1A, 0x3A, 0x5C) hdr.line.fill.background() tb_hdr = slide2.shapes.add_textbox(Inches(0.4), Inches(0.1), Inches(12.5), Inches(0.75)) tf_hdr = tb_hdr.text_frame p_hdr = tf_hdr.paragraphs[0] run_hdr = p_hdr.add_run() run_hdr.text = "What is Cooperative Binding?" run_hdr.font.name = "Calibri" run_hdr.font.size = Pt(28) run_hdr.font.bold = True run_hdr.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF) # Left column text points = [ ("Hemoglobin (Hb) is a tetramer", "4 subunits, each with one heme group capable of binding O₂"), ("Sequential binding increases affinity", "Each O₂ bound causes a conformational shift (T→R state), making the next subunit bind O₂ more easily"), ("Affinity × 300", "The last O₂ binds with ~300× greater affinity than the first"), ("Sigmoidal curve", "Results in an S-shaped (sigmoidal) O₂-dissociation curve — unlike the hyperbolic curve of monomeric myoglobin"), ("Clinical relevance", "Steep sigmoidal slope at tissue pO₂ (20–40 mmHg) enables efficient O₂ unloading to metabolically active tissues"), ] y = 1.1 for title, desc in points: # Bullet title tb_t = slide2.shapes.add_textbox(Inches(0.4), Inches(y), Inches(6.0), Inches(0.35)) tf_t = tb_t.text_frame tf_t.margin_left = 0; tf_t.margin_right = 0; tf_t.margin_top = 0; tf_t.margin_bottom = 0 p_t = tf_t.paragraphs[0] r_t = p_t.add_run() r_t.text = "▶ " + title r_t.font.name = "Calibri" r_t.font.size = Pt(15) r_t.font.bold = True r_t.font.color.rgb = RGBColor(0x1A, 0x3A, 0x5C) # Bullet desc tb_d = slide2.shapes.add_textbox(Inches(0.65), Inches(y + 0.34), Inches(5.75), Inches(0.45)) tf_d = tb_d.text_frame tf_d.word_wrap = True tf_d.margin_left = 0; tf_d.margin_right = 0; tf_d.margin_top = 0; tf_d.margin_bottom = 0 p_d = tf_d.paragraphs[0] r_d = p_d.add_run() r_d.text = desc r_d.font.name = "Calibri" r_d.font.size = Pt(13) r_d.font.color.rgb = RGBColor(0x33, 0x33, 0x33) y += 1.0 # Fig 3.7 image (cooperative binding diagram) on the right if images[1]: images[1].seek(0) slide2.shapes.add_picture(images[1], Inches(6.8), Inches(1.05), Inches(3.0), Inches(5.8)) # Fig caption tb_cap = slide2.shapes.add_textbox(Inches(6.8), Inches(6.9), Inches(6.0), Inches(0.35)) tf_cap = tb_cap.text_frame p_cap = tf_cap.paragraphs[0] r_cap = p_cap.add_run() r_cap.text = "Fig 3.7 – Successive O₂ binding with increasing affinity (Lippincott's Biochemistry)" r_cap.font.name = "Calibri" r_cap.font.size = Pt(10) r_cap.font.italic = True r_cap.font.color.rgb = RGBColor(0x55, 0x66, 0x77) # ============================================================ # SLIDE 3 — ODC curve + T/R state # ============================================================ slide3 = prs.slides.add_slide(blank) bg3 = slide3.background fill3 = bg3.fill fill3.solid() fill3.fore_color.rgb = RGBColor(0xF7, 0xFA, 0xFF) hdr3 = slide3.shapes.add_shape(1, Inches(0), Inches(0), Inches(13.333), Inches(0.95)) hdr3.fill.solid() hdr3.fill.fore_color.rgb = RGBColor(0x1A, 0x3A, 0x5C) hdr3.line.fill.background() tb_hdr3 = slide3.shapes.add_textbox(Inches(0.4), Inches(0.1), Inches(12.5), Inches(0.75)) tf_hdr3 = tb_hdr3.text_frame p_hdr3 = tf_hdr3.paragraphs[0] r_hdr3 = p_hdr3.add_run() r_hdr3.text = "Oxygen-Dissociation Curve: Myoglobin vs Hemoglobin" r_hdr3.font.name = "Calibri" r_hdr3.font.size = Pt(28) r_hdr3.font.bold = True r_hdr3.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF) # ODC image if images[0]: images[0].seek(0) slide3.shapes.add_picture(images[0], Inches(0.4), Inches(1.05), Inches(5.6), Inches(5.8)) # Right side explanatory text key_points = [ ("Myoglobin", "Hyperbolic curve — single heme, no cooperativity. P₅₀ = 1 mmHg"), ("Hemoglobin", "Sigmoidal curve — 4 subunits, cooperative. P₅₀ = 26 mmHg"), ("T state (tense)", "Deoxy-Hb. Low O₂ affinity. Stabilised by salt bridges between subunits"), ("R state (relaxed)", "Oxy-Hb. High O₂ affinity. Stabilised when O₂ binds and conformational change occurs"), ("Loading (lungs)", "pO₂ ~100 mmHg → Hb ~98% saturated"), ("Unloading (tissues)", "pO₂ ~40 mmHg → Hb drops to ~75% sat → large O₂ delivery"), ("P₅₀ comparison", "Higher P₅₀ = lower O₂ affinity = better unloading"), ] y3 = 1.1 for title, desc in key_points: tb_t3 = slide3.shapes.add_textbox(Inches(6.3), Inches(y3), Inches(6.6), Inches(0.3)) tf_t3 = tb_t3.text_frame tf_t3.margin_left = 0; tf_t3.margin_right = 0; tf_t3.margin_top = 0; tf_t3.margin_bottom = 0 p_t3 = tf_t3.paragraphs[0] r_t3 = p_t3.add_run() r_t3.text = "● " + title r_t3.font.name = "Calibri" r_t3.font.size = Pt(14) r_t3.font.bold = True r_t3.font.color.rgb = RGBColor(0x1A, 0x3A, 0x5C) tb_d3 = slide3.shapes.add_textbox(Inches(6.55), Inches(y3 + 0.3), Inches(6.35), Inches(0.38)) tf_d3 = tb_d3.text_frame tf_d3.word_wrap = True tf_d3.margin_left = 0; tf_d3.margin_right = 0; tf_d3.margin_top = 0; tf_d3.margin_bottom = 0 p_d3 = tf_d3.paragraphs[0] r_d3 = p_d3.add_run() r_d3.text = desc r_d3.font.name = "Calibri" r_d3.font.size = Pt(12) r_d3.font.color.rgb = RGBColor(0x33, 0x33, 0x33) y3 += 0.82 # ============================================================ # SLIDE 4 — O2 & CO2 Transport (Haldane / Bohr / allosteric) # ============================================================ slide4 = prs.slides.add_slide(blank) bg4 = slide4.background fill4 = bg4.fill fill4.solid() fill4.fore_color.rgb = RGBColor(0xF7, 0xFA, 0xFF) hdr4 = slide4.shapes.add_shape(1, Inches(0), Inches(0), Inches(13.333), Inches(0.95)) hdr4.fill.solid() hdr4.fill.fore_color.rgb = RGBColor(0x1A, 0x3A, 0x5C) hdr4.line.fill.background() tb_hdr4 = slide4.shapes.add_textbox(Inches(0.4), Inches(0.1), Inches(12.5), Inches(0.75)) tf_hdr4 = tb_hdr4.text_frame p_hdr4 = tf_hdr4.paragraphs[0] r_hdr4 = p_hdr4.add_run() r_hdr4.text = "Allosteric Effectors & Physiological Significance" r_hdr4.font.name = "Calibri" r_hdr4.font.size = Pt(28) r_hdr4.font.bold = True r_hdr4.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF) # Transport image if images[2]: images[2].seek(0) slide4.shapes.add_picture(images[2], Inches(0.4), Inches(1.05), Inches(3.0), Inches(5.8)) # Allosteric effectors table effectors = [ ("2,3-BPG", "Binds T state → ↓ O₂ affinity → favors O₂ unloading. Elevated at altitude & in chronic anaemia"), ("CO₂ (↑pCO₂)", "Bohr effect: CO₂ + H₂O → H⁺ + HCO₃⁻. H⁺ stabilises T state → ↓ affinity → more O₂ to tissues"), ("↓ pH", "Bohr effect: acidosis → right-shift of ODC → ↓ affinity → enhanced O₂ release"), ("↑ Temperature", "Right-shift: exercising muscle produces heat → ↑ O₂ delivery"), ("CO (carbon monoxide)", "Binds Fe²⁺ with 200× greater affinity than O₂ → displaces O₂ → left-shifts remaining ODC"), ] y4 = 1.15 for eff, detail in effectors: # colored box for effector name box = slide4.shapes.add_shape(1, Inches(3.7), Inches(y4), Inches(2.4), Inches(0.34)) box.fill.solid() box.fill.fore_color.rgb = RGBColor(0x1A, 0x3A, 0x5C) box.line.fill.background() tb_eff = slide4.shapes.add_textbox(Inches(3.72), Inches(y4 + 0.02), Inches(2.4), Inches(0.3)) tf_eff = tb_eff.text_frame tf_eff.margin_left = Inches(0.05); tf_eff.margin_top = 0; tf_eff.margin_bottom = 0 p_eff = tf_eff.paragraphs[0] r_eff = p_eff.add_run() r_eff.text = eff r_eff.font.name = "Calibri" r_eff.font.size = Pt(13) r_eff.font.bold = True r_eff.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF) tb_det = slide4.shapes.add_textbox(Inches(6.2), Inches(y4 + 0.01), Inches(6.9), Inches(0.55)) tf_det = tb_det.text_frame tf_det.word_wrap = True tf_det.margin_left = 0; tf_det.margin_right = 0; tf_det.margin_top = 0; tf_det.margin_bottom = 0 p_det = tf_det.paragraphs[0] r_det = p_det.add_run() r_det.text = detail r_det.font.name = "Calibri" r_det.font.size = Pt(12) r_det.font.color.rgb = RGBColor(0x22, 0x22, 0x22) y4 += 1.05 # Caption tb_cap4 = slide4.shapes.add_textbox(Inches(0.4), Inches(7.05), Inches(12.5), Inches(0.3)) tf_cap4 = tb_cap4.text_frame p_cap4 = tf_cap4.paragraphs[0] r_cap4 = p_cap4.add_run() r_cap4.text = "Fig 3.8 – O₂ & CO₂ transport cycle (Lippincott's Biochemistry, 8th Ed.)" r_cap4.font.name = "Calibri" r_cap4.font.size = Pt(10) r_cap4.font.italic = True r_cap4.font.color.rgb = RGBColor(0x55, 0x66, 0x77) # ============================================================ # Save # ============================================================ out = "/tmp/workspace/hb-cooperative/Cooperative_Binding_Hemoglobin.pptx" prs.save(out) print(f"Saved to {out}") EOF

Running Command

ls -lh /tmp/workspace/hb-cooperative/

Here is your downloadable 4-slide presentation on cooperative binding of hemoglobin:

Cooperative Binding Hemoglobin

Presentation · PPTX


What's inside (4 slides):
Slide 1 - Title slide Dark themed intro: "Cooperative Binding of Hemoglobin"
Slide 2 - What is Cooperative Binding?
  • Hb is a tetramer with 4 heme groups
  • Each O₂ bound triggers a T→R conformational shift, making the next subunit bind O₂ more easily
  • The last O₂ binds with ~300x greater affinity than the first
  • Includes the Lippincott's Fig 3.7 diagram showing successive O₂ binding
Slide 3 - Oxygen-Dissociation Curve
  • Myoglobin (hyperbolic) vs Hemoglobin (sigmoidal) - the classic comparison
  • T state vs R state explained
  • P₅₀ values (Mb = 1 mmHg, Hb = 26 mmHg)
  • Loading in lungs vs unloading in tissues
  • Full Lippincott's Fig 3.6 graph embedded
Slide 4 - Allosteric Effectors
  • 2,3-BPG, CO₂/pH (Bohr effect), temperature, CO
  • All cause right-shift (except CO which left-shifts)
  • Lippincott's Fig 3.8 transport cycle diagram
All three diagrams are sourced directly from Lippincott Illustrated Reviews - Biochemistry, 8th Ed.
This is a shared conversation. Sign in to Orris to start your own chat.