Xilp012 Publish
src.xil_pipeline.XILP012_publish
XILP012 — Social Media Post Draft Generator.
Reads a parsed episode JSON, builds a structured episode summary, and calls the Claude API to produce three ready-to-edit Facebook post variants. Output is an editable markdown file the producer reviews and pastes.
Post variants per episode
Hype — new episode announcement, teaser tone, no spoilers past cold open Quote — pull quote from cold open + tune-in call to action Spotlight — cast member feature (cycles by episode number mod cast count)
Output: posts/{slug}/{tag}_posts.md
Usage:
xil publish --episode S04E01 --dry-run
xil publish --episode S04E01
xil publish --all
xil publish --episode S04E01 --platform instagram
extract_episode_summary
extract_episode_summary(parsed: dict, cast_cfg: dict | None, master_path: str | None = None) -> dict
Build a structured summary dict from parsed episode data.
Returns::
{
"show": str, "season": int, "episode": int, "tag": str,
"title": str, "season_title": str | None,
"cold_open_scene": str,
"cold_open_lines": [{"speaker": str, "text": str}, ...],
"cast": [{"key": str, "full_name": str, "role": str}, ...],
"section_arc": str,
"runtime_minutes": int | None,
}
Source code in src/xil_pipeline/XILP012_publish.py
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 | |
build_user_message
Compose the Claude user message from an episode summary dict.
Source code in src/xil_pipeline/XILP012_publish.py
call_claude_api
call_claude_api(system_prompt: str, user_message: str, model: str = 'claude-haiku-4-5-20251001') -> str
Call the Anthropic API and return the text response.
Source code in src/xil_pipeline/XILP012_publish.py
write_posts_file
Write the generated posts to a markdown file.
Source code in src/xil_pipeline/XILP012_publish.py
publish_episode
publish_episode(slug: str, tag: str, platform: str = 'facebook', dry_run: bool = False, model: str = 'claude-haiku-4-5-20251001') -> bool
Generate social posts for one episode. Returns True on success.