- Python 100%
| .gitignore | ||
| create_subtitles.py | ||
| justina_facebook_exchange_transcript.md | ||
| notebooklm_prompts.md | ||
| podcast_processing_report.md | ||
| process_pipeline.py | ||
| README.md | ||
| transcribe.py | ||
The Grain of Shame: Structural Analysis & Automated Video Production of the Justina Facebook Exchange
This repository compiles the code, analytical frameworks, discussions, and prompts from the Shame Control Study case study. It establishes a complete, automated pipeline for transcribing, subtitling, and compiling media assets related to this investigation.
📖 Context & Executive Summary
The core of this study is the forensic analysis of a social media dialogue—the Justina Facebook Exchange—regarding the origins of sexual control.
The Core Debate
- Mark Havens [MH] proposes a structural hypothesis: that sexual control (shame, purity codes, marriage contracts, institutional regulations) is not an inherent aspect of human nature. Rather, it is a cultural operating system co-created and sustained for 12,000 years, emerging directly from the transition to agriculture, surplus, property, and inheritance.
- Justina Walford [JW] representing a classic moral/social narrative, frames the exploitation of gender dynamics as an interpersonal/political injustice to be resolved by believing and validating marginalized groups ("Believe women").
Linguistic Constraints on Control
To test the thesis that morality and shame are downstream of economic and linguistic conditions rather than "human nature," the study highlights two key linguistic stress tests:
- The Pirahã Exception: The Pirahã language enforces the Immediacy of Experience Principle (only speaking about what is witnessed or directly reported by a living witness) and lacks grammatical recursion. This makes it structurally difficult to build or sustain complex, nested moral and legal databases like lineages, purity codes, and long-term ownership.
- Irish State-of-Being: Grammatical structures like "Tá brón orm" (sadness is on me) frame experiences as temporary states rather than permanent identity structures (contrasting with "I am sad").
The Autoimmune Rhetorical Defense Loop
The dialogue itself performs the exact defense mechanisms it describes. The repository documents how the cultural operating system triggers an "autoimmune" response to protect its coherence across four specific vectors:
- Vector 1: Tribal Translation: Collapsing a structural/civilizational analysis back into a moral blame dynamic ("men exploiting women").
- Vector 2: The Scale Filter: Challenging the viability of scaling the counter-example (e.g. "can a tribe of 500 scale globally?") to dismiss it as an irrelevant edge case.
- Vector 3: Concession & Reclamation: Partially conceding the point under pressure, but immediately folding it back into the existing narrative by claiming authority (e.g., citing Engels, Ryan) to neutralize its disruptive power.
- Vector 4: Retroactive Loop Closure: Laughing off the critique and claiming that the debate actually proved the original position.
🗄️ Public S3 Assets (Single Source of Truth)
To keep this Git repository lightweight and bloat-free, all large binary media files and screenshots are hosted externally on S3. They are publicly accessible for direct streaming and reference:
Core Produced Media
- 🎥 Final Visualizer Video: justina_podcast_visualizer.mp4 (1.26 GiB, 35:43 length)
- 🎨 Abstract Background Art: agricultural_shame_art.jpg (972 KiB)
- 🎵 Raw Audio: How_agriculture_invented_sexual_shame.m4a (66 MiB)
Pipeline Metadata
- 📝 Subtitles (ASS Format): subtitles.ass (693 KiB)
- 📊 Word-Level Alignment (JSON): transcript_words.json (744 KiB)
Case Study Source Files (Screenshots)
The complete set of 43 screenshots documenting the conversation is indexed below. You can also browse the full 📂 Screenshots Directory:
🛠️ Automated Production Pipeline (AI Reproducibility Guide)
A future AI agent can reproduce this entire workflow with zero manual setup beyond standard package installations.
1. Requirements & System Context
- Hardware: CUDA-capable GPU (recommended: NVIDIA GTX 1070 or better) to accelerate transcription and video encoding.
- Libraries:
ffmpegwithnvenchardware acceleration enabled, Python 3.10+. - Fonts: Montserrat Black (installed on the host system to support the subtitle style).
2. Pipeline Execution Steps
graph TD
A[Raw Audio: m4a] -->|faster-whisper small| B(transcript_words.json)
B -->|create_subtitles.py| C(subtitles.ass)
C -->|process_pipeline.py| D(FFmpeg nvenc render)
A -->|process_pipeline.py| D
E[agricultural_shame_art.jpg] -->|process_pipeline.py| D
D --> F[output.mp4]
Step A: Speech-to-Text Transcription (transcribe.py)
Processes the raw audio via the faster-whisper library using the small model. It extracts word-level timestamps (start, end, and confidence) and outputs transcript_words.json.
pip install faster-whisper
python3 transcribe.py
Step B: Subtitle Generation (create_subtitles.py)
Converts the JSON timestamps into advanced SubStation Alpha (.ass) subtitles. Words are grouped into brief segments (max 3 words, 1.5 seconds, or gaps > 0.4 seconds) in ALL-CAPS. The currently active word is highlighted dynamically in Yellow (\c&H0000FFFF&).
python3 create_subtitles.py
Step C: FFmpeg Composition & Compilation (process_pipeline.py)
Loops the background image, binds the audio, overlays a golden audio visualizer (showwaves cline mode with scale=sqrt and opacity 0.55 at the bottom of the canvas), overlays the ASS subtitle track, and renders a 1080x1080 square video via NVIDIA's H.264 hardware encoder (h264_nvenc).
python3 process_pipeline.py
🗂️ File Directory Structure
transcribe.py- Whisper-based audio transcribing script.create_subtitles.py- ASS subtitle generator with Hormozi-style highlighting.process_pipeline.py- Orchestrates subtitle creation and ffmpeg video rendering.justina_facebook_exchange_transcript.md- Complete chronological legal-style transcript.notebooklm_prompts.md- Prompts for NotebookLM to reproduce the slides and script.podcast_processing_report.md- Pipeline execution details and system metrics..gitignore- Standard filters for caching, local venv, and large output files.
📝 Valuable Commit Metadata
Every commit in this repository is designed to document specific phases of development, mapping out the evolution of the research project from raw inputs to a structured deployment:
feat: init repository with gitignore and pipeline filesdocs: add facebook exchange transcript and podcast processing reportsdocs: add notebooklm prompts for presentation and podcast generationdocs: create comprehensive README with system diagram and AI reproduction instructions