re-walkthrough-pro 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Charles J Dove
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,178 @@
1
+ <p align="center">
2
+ <img src="docs/hero.png" alt="RE Walkthrough Pro — cinematic Zillow-to-video property walkthroughs for Claude Code" width="900">
3
+ </p>
4
+
5
+ # RE Walkthrough Pro
6
+
7
+ > Turn a Zillow listing into a cinematic, room-by-room walkthrough video — right inside [Claude Code](https://claude.ai/code). Apify pulls the photos, Higgsfield animates each room, ffmpeg stitches the final cut. Built to sell to real estate agents.
8
+
9
+ <p>
10
+ <a href="https://www.charlieautomates.com/charlie-os-vs/"><img src="https://img.shields.io/badge/Work_with_Charlie-Charlie_OS-7c3aed?style=for-the-badge&logo=anthropic&logoColor=white" alt="Work with Charlie"></a>
11
+ <a href="https://www.npmjs.com/package/re-walkthrough-pro"><img src="https://img.shields.io/npm/v/re-walkthrough-pro?color=blue&label=npm" alt="npm version"></a>
12
+ <a href="https://www.npmjs.com/package/re-walkthrough-pro"><img src="https://img.shields.io/npm/dt/re-walkthrough-pro?color=blue&label=downloads" alt="npm downloads"></a>
13
+ <a href="LICENSE"><img src="https://img.shields.io/npm/l/re-walkthrough-pro?color=green" alt="MIT license"></a>
14
+ <a href="https://github.com/charlesdove977/re-walkthrough-pro/stargazers"><img src="https://img.shields.io/github/stars/charlesdove977/re-walkthrough-pro?style=flat" alt="stars"></a>
15
+ </p>
16
+
17
+ RE Walkthrough Pro ships the **`re-walkthrough-pro`** skill: a single command that takes a Zillow listing (or finds you some), pulls every photo, animates each room into a short cinematic camera-move clip, and stitches them into one finished walkthrough video you can hand an agent.
18
+
19
+ A finished tour that looks like a $1,000–3,000 production, made from listing photos in minutes, for sub-cents of scraping plus a handful of Higgsfield credits.
20
+
21
+ > **Honest framing:** This produces a *cinematic walkthrough* (per-room camera-move clips stitched together), **not** a true 3D / Matterport reconstruction. It looks premium, and it's impossible without an AI video engine — but don't promise a walkable dollhouse.
22
+
23
+ ---
24
+
25
+ ## Why
26
+
27
+ Agents pay for media. The bottleneck is production time. RE Walkthrough Pro removes it: one command, listing in → sellable walkthrough out. Drop it into a real estate marketing service as a video line item, or batch tours across a whole farm area and pitch the listing agents.
28
+
29
+ The architecture is the unlock. Higgsfield video models work clip-by-clip (~5s image-to-video), so a whole-house walkthrough **must** be per-room clips stitched on your side. This skill does exactly that, with a camera move matched to each room type so the stitched result reads like walking through the home.
30
+
31
+ ---
32
+
33
+ ## Install
34
+
35
+ ### Option 1 — `npx` (recommended)
36
+
37
+ ```bash
38
+ npx re-walkthrough-pro install
39
+ ```
40
+
41
+ Installs the skill to `~/.claude/skills/re-walkthrough-pro/`. Refresh after a package upgrade:
42
+
43
+ ```bash
44
+ npm view re-walkthrough-pro version # check latest
45
+ npx re-walkthrough-pro@latest update # refresh in place
46
+ ```
47
+
48
+ ### Option 2 — Global install
49
+
50
+ ```bash
51
+ npm install -g re-walkthrough-pro
52
+ re-walkthrough-pro install
53
+ ```
54
+
55
+ ### Option 3 — Directly from GitHub
56
+
57
+ ```bash
58
+ npx github:charlesdove977/re-walkthrough-pro install
59
+ ```
60
+
61
+ ### Project-scoped install (per repo)
62
+
63
+ ```bash
64
+ cd ~/path/to/project
65
+ npx re-walkthrough-pro install --project
66
+ ```
67
+
68
+ ### Uninstall / where
69
+
70
+ ```bash
71
+ npx re-walkthrough-pro uninstall
72
+ npx re-walkthrough-pro where # ~/.claude/skills/re-walkthrough-pro
73
+ ```
74
+
75
+ Restart Claude Code after installing, then run `/re-walkthrough-pro`.
76
+
77
+ ---
78
+
79
+ ## What you need
80
+
81
+ Two MCP servers connected in Claude Code, plus ffmpeg:
82
+
83
+ - **[Higgsfield MCP](https://higgsfield.ai/mcp?utm_source=ig&utm_medium=social&utm_category=gr&utm_campaign=Higgsfield_MCP_-_IG&utm_creator=charlieautomates&utm_content_type=rl&utm_post=dBaWAw&invite_code=higgsfield-mcp-ig-charlieautomates-dBaWAw)** — required. Animates each room (Seedance 2.0 / Kling 3.0 image-to-video) and reframes for social. Every image + video model in one credit pool. *(My affiliate link.)*
84
+ - **[Apify account](https://www.apify.com?fpr=charles)** — required for the listing scrape. The Zillow detail scraper pulls photos + address + specs in one call. *(My referral link.)* Grab the [Apify MCP server](https://github.com/apify/actors-mcp-server) (`@apify/actors-mcp-server`) and your token at [console.apify.com](https://console.apify.com/settings/integrations).
85
+ - **ffmpeg** — required for stitching (`brew install ffmpeg`).
86
+
87
+ ---
88
+
89
+ ## How it works
90
+
91
+ ```
92
+ 1. RESOLVE Zillow link → Apify detail scraper (photos + address + specs)
93
+ "find 5 in NJ" → search actor → detail scraper (chained dataset)
94
+ 2. PERSIST write PROPERTY.md, download all photos to source-images/
95
+ 3. CURATE vision pass: best photo per room, drop floorplans/dupes, tag room type
96
+ 4. ANIMATE per room → Higgsfield image-to-video with a room-matched camera move
97
+ 5. STITCH ffmpeg concat in walkthrough order → 16:9 master (+ optional 9:16)
98
+ 6. DELIVER final video + per-room scenes + PROPERTY.md, in one folder
99
+ ```
100
+
101
+ ### Two ways in
102
+
103
+ - **Single property:** paste a Zillow listing URL (or an address).
104
+ - **Discovery:** "find 5 single-family homes in Montclair NJ" → it searches, shows you the listings, you pick.
105
+
106
+ ### Room → camera move
107
+
108
+ Each room type gets a cinematic move (drone approach for the exterior, steadicam walkthrough for halls, orbit for great rooms, window-approach reveals for views, rising reveal for the backyard). The moves are model-agnostic — they apply to whatever Higgsfield video model you pick.
109
+
110
+ ---
111
+
112
+ ## Output
113
+
114
+ ```
115
+ listing-walkthroughs/<property-slug>/
116
+ ├── PROPERTY.md address · Zillow link · price · beds/baths/sqft · agent · shot list
117
+ ├── source-images/ every photo pulled from Zillow
118
+ ├── scenes/ per-room cinematic clips (room-01-exterior.mp4, room-02-living.mp4 …)
119
+ └── final/ walkthrough-16x9.mp4 (+ walkthrough-9x16.mp4 if requested)
120
+ ```
121
+
122
+ ---
123
+
124
+ ## What gets installed
125
+
126
+ ```
127
+ ~/.claude/skills/re-walkthrough-pro/
128
+ ├── SKILL.md
129
+ ├── tasks/
130
+ │ └── build-walkthrough.md ← interview + 7-step pipeline
131
+ ├── frameworks/
132
+ │ ├── apify-zillow-actors.md ← the Zillow actor stack + how to call it
133
+ │ ├── higgsfield-camera-moves.md ← room→camera-move mapping (self-sufficient)
134
+ │ └── stitch-pipeline.md ← ffmpeg normalize/concat + 9:16 reframe
135
+ ├── templates/
136
+ │ └── property-md.md
137
+ └── checklists/
138
+ └── walkthrough-quality.md
139
+ ```
140
+
141
+ Walkthroughs are written to your *project* (`listing-walkthroughs/`), never into the skill folder.
142
+
143
+ ---
144
+
145
+ ## Optional: richer prompt craft
146
+
147
+ The built-in camera-move mapping is self-sufficient. If you also have the **`seedance-real-estate`** and **`seedance-cinematic`** skills installed (both ship inside [UGC Factory](https://www.npmjs.com/package/ugc-factory)), the skill invokes them for richer per-room motion prompts and a film-look color grade. Purely additive — nothing breaks without them.
148
+
149
+ ---
150
+
151
+ ## FAQ
152
+
153
+ **Is this true 3D?**
154
+ No. It's per-room cinematic camera-move clips stitched into a tour. Premium-looking, honest to describe as a "cinematic walkthrough," not a Matterport dollhouse.
155
+
156
+ **Does it touch my repo when I install?**
157
+ No. Default install writes to `~/.claude/skills/re-walkthrough-pro/`. Only `--project` writes into the current directory.
158
+
159
+ **Does Zillow block scraping?**
160
+ Zillow blocks naive `fetch`/headless, which is exactly why the skill routes images through the Apify actor — the reliable source for both the link and discovery paths.
161
+
162
+ **What does a run cost?**
163
+ The Apify scrape is sub-cent per property. The real cost is Higgsfield credits, scaled by room count — which is why the skill auto-curates to ~6–10 hero rooms by default.
164
+
165
+ ---
166
+
167
+ ## Related projects
168
+
169
+ - **[Charlie OS](https://www.charlieautomates.com/charlie-os/)** — one-click Claude Code setup bundling BASE, CARL, PAUL, SEED, Skillsmith, and dozens of curated skills.
170
+ - **[UGC Factory](https://www.npmjs.com/package/ugc-factory)** — AI UGC ad studio; bundles the 15 Seedance genre skills (including the two this skill optionally uses).
171
+ - **[Advertising Ops](https://github.com/charlesdove977/advertising-ops)** — CMO-in-a-box media buyer for Claude Code.
172
+ - **[Work with Charlie](https://www.charlieautomates.com/charlie-os-vs/)** — done-for-you installs, custom skill builds, 1:1 Claude Code engineering.
173
+
174
+ ---
175
+
176
+ ## License
177
+
178
+ MIT — see [LICENSE](LICENSE). Built by [Charles J Dove](https://www.charlieautomates.com).
@@ -0,0 +1,165 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * re-walkthrough-pro CLI
4
+ *
5
+ * Installs the re-walkthrough-pro Claude Code skill into either the
6
+ * user-global directory (~/.claude/skills/re-walkthrough-pro/) or the
7
+ * current project's .claude/skills/re-walkthrough-pro/ directory.
8
+ */
9
+
10
+ 'use strict';
11
+
12
+ const fs = require('fs');
13
+ const path = require('path');
14
+ const os = require('os');
15
+
16
+ const SKILL_NAME = 're-walkthrough-pro';
17
+ const PACKAGE_ROOT = path.resolve(__dirname, '..');
18
+ const SKILL_SRC = path.join(PACKAGE_ROOT, 'skill');
19
+ const PKG = require(path.join(PACKAGE_ROOT, 'package.json'));
20
+
21
+ function userClaudeDir() {
22
+ return path.join(os.homedir(), '.claude');
23
+ }
24
+
25
+ function projectClaudeDir() {
26
+ return path.join(process.cwd(), '.claude');
27
+ }
28
+
29
+ function resolveSkillTarget(opts) {
30
+ const base = opts.project ? projectClaudeDir() : userClaudeDir();
31
+ return path.join(base, 'skills', SKILL_NAME);
32
+ }
33
+
34
+ function copyDir(src, dest) {
35
+ fs.mkdirSync(dest, { recursive: true });
36
+ for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
37
+ const s = path.join(src, entry.name);
38
+ const d = path.join(dest, entry.name);
39
+ if (entry.isDirectory()) {
40
+ copyDir(s, d);
41
+ } else if (entry.isFile()) {
42
+ fs.copyFileSync(s, d);
43
+ }
44
+ }
45
+ }
46
+
47
+ function rmrf(target) {
48
+ if (!fs.existsSync(target)) return;
49
+ fs.rmSync(target, { recursive: true, force: true });
50
+ }
51
+
52
+ function install(opts) {
53
+ const target = resolveSkillTarget(opts);
54
+ const exists = fs.existsSync(target);
55
+
56
+ if (exists && !opts.force) {
57
+ console.error(
58
+ `[re-walkthrough-pro] Skill already installed at:\n ${target}\n\n` +
59
+ `Run with --update to overwrite, or --uninstall to remove first.`
60
+ );
61
+ process.exitCode = 1;
62
+ return;
63
+ }
64
+
65
+ if (exists && opts.force) {
66
+ rmrf(target);
67
+ }
68
+
69
+ copyDir(SKILL_SRC, target);
70
+
71
+ console.log(`[re-walkthrough-pro] Skill installed:`);
72
+ console.log(` ${target}`);
73
+ console.log('');
74
+ console.log(`Invoke from Claude Code with: /${SKILL_NAME}`);
75
+ console.log(`Then paste a Zillow listing link, or say "find 5 listings in <place>".`);
76
+ console.log('');
77
+ console.log(`Requires: Higgsfield MCP + Apify MCP connected in Claude Code, and ffmpeg installed.`);
78
+ }
79
+
80
+ function uninstall(opts) {
81
+ const target = resolveSkillTarget(opts);
82
+ if (fs.existsSync(target)) {
83
+ rmrf(target);
84
+ console.log(`[re-walkthrough-pro] Removed skill: ${target}`);
85
+ } else {
86
+ console.log(`[re-walkthrough-pro] Nothing to uninstall at ${target}`);
87
+ }
88
+ }
89
+
90
+ function where(opts) {
91
+ console.log(resolveSkillTarget(opts));
92
+ }
93
+
94
+ function help() {
95
+ console.log(`re-walkthrough-pro v${PKG.version}
96
+
97
+ Install the re-walkthrough-pro Claude Code skill.
98
+
99
+ Usage:
100
+ npx re-walkthrough-pro <command> [flags]
101
+
102
+ Commands:
103
+ install Install skill to ~/.claude/skills/${SKILL_NAME}/
104
+ update Same as install, but overwrite if already present
105
+ uninstall Remove skill from the target directory
106
+ where Print the target install path and exit
107
+ --help, -h Show this message
108
+ --version, -v Show version
109
+
110
+ Flags:
111
+ --project Install into the current project's ./.claude/ instead of ~/.claude/
112
+
113
+ Examples:
114
+ npx re-walkthrough-pro install
115
+ npx re-walkthrough-pro install --project
116
+ npx re-walkthrough-pro update
117
+ npx re-walkthrough-pro uninstall
118
+
119
+ Skill name once installed: /${SKILL_NAME}
120
+ Repo: https://github.com/charlesdove977/re-walkthrough-pro
121
+ `);
122
+ }
123
+
124
+ function parseArgs(argv) {
125
+ const opts = { project: false, force: false };
126
+ let cmd = null;
127
+ for (const arg of argv) {
128
+ if (arg === '--project') opts.project = true;
129
+ else if (arg === '--update' || arg === '--force' || arg === '-f') opts.force = true;
130
+ else if (arg === '--help' || arg === '-h') cmd = '__help';
131
+ else if (arg === '--version' || arg === '-v') cmd = '__version';
132
+ else if (!arg.startsWith('-') && cmd === null) cmd = arg;
133
+ }
134
+ return { cmd, opts };
135
+ }
136
+
137
+ function main() {
138
+ const { cmd, opts } = parseArgs(process.argv.slice(2));
139
+
140
+ switch (cmd) {
141
+ case 'install':
142
+ install(opts);
143
+ return;
144
+ case 'update':
145
+ opts.force = true;
146
+ install(opts);
147
+ return;
148
+ case 'uninstall':
149
+ uninstall(opts);
150
+ return;
151
+ case 'where':
152
+ where(opts);
153
+ return;
154
+ case '__version':
155
+ console.log(PKG.version);
156
+ return;
157
+ case '__help':
158
+ case null:
159
+ default:
160
+ help();
161
+ return;
162
+ }
163
+ }
164
+
165
+ main();
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "re-walkthrough-pro",
3
+ "version": "0.1.0",
4
+ "description": "Claude Code skill that turns a Zillow listing into a cinematic, room-by-room property walkthrough video — Apify scrapes the photos, Higgsfield animates each room, ffmpeg stitches the final cut. Built to sell to real estate agents.",
5
+ "keywords": [
6
+ "claude-code",
7
+ "claude",
8
+ "skill",
9
+ "real-estate",
10
+ "zillow",
11
+ "property-video",
12
+ "listing-video",
13
+ "walkthrough",
14
+ "higgsfield",
15
+ "seedance",
16
+ "apify",
17
+ "ffmpeg",
18
+ "ai-video",
19
+ "real-estate-marketing"
20
+ ],
21
+ "homepage": "https://github.com/charlesdove977/re-walkthrough-pro#readme",
22
+ "bugs": {
23
+ "url": "https://github.com/charlesdove977/re-walkthrough-pro/issues"
24
+ },
25
+ "repository": {
26
+ "type": "git",
27
+ "url": "git+https://github.com/charlesdove977/re-walkthrough-pro.git"
28
+ },
29
+ "license": "MIT",
30
+ "author": "Charles J Dove",
31
+ "type": "commonjs",
32
+ "bin": {
33
+ "re-walkthrough-pro": "bin/re-walkthrough-pro.js"
34
+ },
35
+ "files": [
36
+ "bin/",
37
+ "skill/",
38
+ "README.md",
39
+ "LICENSE"
40
+ ],
41
+ "engines": {
42
+ "node": ">=14"
43
+ },
44
+ "scripts": {
45
+ "test": "node bin/re-walkthrough-pro.js --version && echo 'OK'"
46
+ }
47
+ }
package/skill/SKILL.md ADDED
@@ -0,0 +1,74 @@
1
+ ---
2
+ name: re-walkthrough-pro
3
+ type: standalone
4
+ version: 0.1.0
5
+ category: content
6
+ description: Turn a Zillow listing into a cinematic room-by-room walkthrough video (Apify scrape → Higgsfield image-to-video → ffmpeg stitch) to sell to real estate agents
7
+ allowed-tools: [Read, Write, Bash, Glob, Grep, AskUserQuestion]
8
+ ---
9
+
10
+ <activation>
11
+ ## What
12
+ Turns a Zillow listing into a cinematic, room-by-room property walkthrough video. Pulls the listing and its photos via an Apify Zillow actor, animates each room into a short cinematic clip with the Higgsfield MCP (image-to-video), then stitches the clips into one finished walkthrough you can sell to listing agents.
13
+
14
+ ## When to Use
15
+ - You have a Zillow listing link (or want to discover listings) and want a sellable cinematic walkthrough
16
+ - Producing a batch of property tours to pitch to local agents
17
+ - Adding a video-walkthrough line item to a real estate marketing service
18
+
19
+ ## Not For
20
+ - True 3D / Matterport reconstruction — Higgsfield does cinematic camera moves on photos, not spatial reconstruction
21
+ - Other portals (Realtor.com, Redfin) — Zillow only in v1
22
+ - Agent outreach / sending the video — this skill produces the asset, not the pitch
23
+ - Music or voiceover — v1 ships a silent master; add sound in your editor
24
+ </activation>
25
+
26
+ <persona>
27
+ ## Role
28
+ Real estate content producer — turns raw listing photos into premium cinematic tours, fast and repeatably.
29
+
30
+ ## Style
31
+ - Interview-first: asks the input + creative questions up front, then runs the pipeline without hand-holding
32
+ - Honest about the tech: calls it a "cinematic walkthrough," never promises true 3D
33
+ - Cost-aware: curates rooms to control Higgsfield credit spend, says what it's skipping
34
+ - Reports concrete paths — every property lands in a predictable folder
35
+
36
+ ## Expertise
37
+ - Apify Zillow actor stack (detail scraper + search chaining)
38
+ - Higgsfield image-to-video camera-move direction per room type
39
+ - ffmpeg stitching and aspect-ratio reframing
40
+ </persona>
41
+
42
+ <commands>
43
+ | Command | Description | Routes To |
44
+ |---------|-------------|-----------|
45
+ | `/re-walkthrough-pro` | Full guided build (link or discovery → walkthrough) | tasks/build-walkthrough.md |
46
+ </commands>
47
+
48
+ <routing>
49
+ ## Load on Command
50
+ @tasks/build-walkthrough.md (when the skill runs — the full interview + pipeline)
51
+
52
+ ## Load on Demand
53
+ @frameworks/apify-zillow-actors.md (when resolving a listing or discovering listings)
54
+ @frameworks/higgsfield-camera-moves.md (when animating rooms)
55
+ @frameworks/stitch-pipeline.md (when stitching scenes + reframing)
56
+ @templates/property-md.md (when writing each property's PROPERTY.md)
57
+ @checklists/walkthrough-quality.md (before declaring a walkthrough done)
58
+
59
+ ## Optional Sibling Skills (prompt-craft enrichment, model-agnostic)
60
+ - `seedance-real-estate` — Camera Movement Library + Room-by-Room Strategy + Lighting Guide; richer per-room motion prompts
61
+ - `seedance-cinematic` — film-look layer (color grade, atmosphere) when style = cinematic
62
+ - OPTIONAL: if installed, the skill invokes them for richer prompt wording. If not, the built-in camera-move mapping in `frameworks/higgsfield-camera-moves.md` is self-sufficient. Both ship inside UGC Factory (npm: `ugc-factory`). These supply prompt craft for ANY Higgsfield video model (Seedance 2.0, Kling 3.0, future).
63
+ </routing>
64
+
65
+ <greeting>
66
+ RE Walkthrough Pro loaded.
67
+
68
+ Give me a property and I'll produce a cinematic room-by-room walkthrough you can sell to an agent.
69
+
70
+ - **Have a link?** Paste the Zillow listing URL.
71
+ - **Want options?** Tell me a place + count (e.g. "5 good listings in New Jersey") and I'll find some.
72
+
73
+ What are we working with?
74
+ </greeting>
@@ -0,0 +1,34 @@
1
+ # Walkthrough Quality Checklist
2
+
3
+ Validates a finished property walkthrough before delivering it to an agent.
4
+
5
+ ## Assets & Structure
6
+ - [ ] `listing-walkthroughs/{property-slug}/` contains PROPERTY.md, source-images/, scenes/, final/
7
+ - [ ] PROPERTY.md has address, Zillow link, specs, and all four build choices recorded
8
+ - [ ] source-images/ has at least one photo per animated room
9
+ - [ ] scenes/ clip count equals the PROPERTY.md shot-list row count
10
+
11
+ ## Video Output
12
+ - [ ] final/ contains a non-zero master file (walkthrough-16x9.mp4 or chosen ratio)
13
+ - [ ] Master duration ≈ sum of scene durations (no clip silently dropped)
14
+ - [ ] Scenes play in walkthrough order: exterior → entry → living → kitchen → beds → baths → outdoor
15
+ - [ ] If 9:16 was requested, final/walkthrough-9x16.mp4 exists and is correctly reframed (subject not cropped out)
16
+
17
+ ## Visual Quality
18
+ - [ ] No clip has obvious melting/warping of furniture, doorways, or windows
19
+ - [ ] Each clip uses one slow camera move (no fast or compound moves)
20
+ - [ ] Exterior opens the tour; an outdoor/backyard shot closes it when available
21
+ - [ ] No floorplans, maps, or watermark-heavy photos animated as rooms
22
+
23
+ ## Truth-in-Claims
24
+ - [ ] Asset is described as a "cinematic walkthrough," not "3D" or "Matterport"
25
+ - [ ] Master is silent (v1) — no accidental audio baked in
26
+
27
+ ## Scoring
28
+
29
+ | Score | Rating | Action |
30
+ |-------|--------|--------|
31
+ | 100% | Ship it | Deliverable to the agent |
32
+ | 80-99% | Fix and ship | Regenerate the offending room(s), then go |
33
+ | 50-79% | Rework | Several bad clips or wrong order — rebuild scenes |
34
+ | Below 50% | Restart | Bad source set or wrong listing — re-scrape |
@@ -0,0 +1,80 @@
1
+ <apify_zillow_actors>
2
+
3
+ ## Purpose
4
+
5
+ The Apify actor stack for pulling Zillow listings + photos, and how to call it via the Apify MCP. Researched and validated 2026-06-27. Zillow hard-blocks naive `fetch`/headless scraping, so an actor is the reliable source of both the listing metadata and the photos — Claude cannot "just grab" the images from a URL.
6
+
7
+ ## The Stack
8
+
9
+ | Role | Actor (`username/name`) | Use it for |
10
+ |------|-------------------------|------------|
11
+ | **Primary — detail + photos** | `maxcopell/zillow-detail-scraper` | One property → photos + address + price + beds/baths/sqft + year + room types + agent, in ONE call. This is the default for both input paths. |
12
+ | **Discovery — search** | `maxcopell/zillow-scraper` | "Find listings" from a Zillow search URL. Returns listing URLs + a dataset. |
13
+ | **Discovery — by ZIP** | `maxcopell/zillow-zip-search` | "Find listings in 07042" — search by ZIP code with filters. |
14
+ | **Fallback — images only** | `burbn/zillow-property-images-scraper` | If the detail scraper's photo set is thin; hi-res images to 1536px from `propertyUrls`. |
15
+
16
+ **Why this stack:** the maxcopell suite is built to chain — a search actor writes a dataset, and the detail scraper reads it via its `searchResultsDatasetId` input. So discovery and single-property paths share one downstream actor (the detail scraper), which is the one that returns photos.
17
+
18
+ ## How to Call (Apify MCP)
19
+
20
+ Use the Apify MCP tools (load via ToolSearch if deferred: `mcp__apify__fetch-actor-details`, `mcp__apify__call-actor`, `mcp__apify__get-dataset-items`).
21
+
22
+ 1. **Inspect input** (only if unsure of fields): `fetch-actor-details` with `{ inputSchema: true }`.
23
+ 2. **Run** the actor: `call-actor` with the actor `fullName` + input JSON. For a single property, prefer `waitSecs > 0` so the run completes and returns results inline.
24
+ 3. **Read output**: results land in the run's dataset — read them (the call result includes the dataset, or use `get-dataset-items` with the returned dataset id).
25
+
26
+ ### Detail scraper input — by URL (most common)
27
+
28
+ ```json
29
+ {
30
+ "startUrls": [
31
+ { "url": "https://www.zillow.com/homedetails/17-Zelma-Dr-Greenville-SC-29617/11026031_zpid/" }
32
+ ],
33
+ "propertyStatus": "FOR_SALE"
34
+ }
35
+ ```
36
+
37
+ ### Detail scraper input — by address
38
+
39
+ ```json
40
+ {
41
+ "addresses": ["18 Zelma Dr, Greenville, SC 29617"],
42
+ "propertyStatus": "FOR_SALE"
43
+ }
44
+ ```
45
+
46
+ ### Chaining discovery → detail
47
+
48
+ ```json
49
+ // after running maxcopell/zillow-zip-search and getting its dataset id:
50
+ { "searchResultsDatasetId": "<dataset-id-from-search-run>" }
51
+ ```
52
+
53
+ ## What the Detail Scraper Returns (validated)
54
+
55
+ Per its README, each result includes: price + listing status, full address + coordinates, home type, year built, lot size, living area, room counts and **room types**, parking/garage, HOA/fees, interior/exterior features, **image URLs and rich media links**, agent/broker contact + license, tour availability, MLS/attribution, parcel/tax ids, tax + price history, nearby/comparable listings, schools.
56
+
57
+ The fields this skill needs: `address`, `price`, `beds`/`baths`/`sqft` (living area), `yearBuilt`, agent name/contact, and the **image URL list** (feeds `source-images/` and the per-room animation).
58
+
59
+ ## propertyStatus matters
60
+
61
+ Zillow serves for-sale, for-rent, and sold via different methods, so the detail scraper needs `propertyStatus` to match the listing. If it's wrong, the actor self-corrects but spends extra requests. Defaults: active listing → `FOR_SALE`; sold comps → `RECENTLY_SOLD`; rentals → `FOR_RENT`.
62
+
63
+ ## Cost
64
+
65
+ All PAY_PER_EVENT, sub-cent per property on the free tier (detail scraper ~$0.0036/result, search ~$0.0023/result; cheaper at higher Apify tiers). Scraping cost is negligible next to Higgsfield credits — the room count (curation) is the real cost lever, not the scrape.
66
+
67
+ ## Anti-Patterns
68
+
69
+ | Anti-Pattern | Why It's Bad | Fix |
70
+ |-------------|-------------|-----|
71
+ | Trying to fetch Zillow photos with curl/headless directly | Zillow blocks it; you get nothing or a CAPTCHA | Always route images through the actor |
72
+ | Running the images-only actor AND the detail scraper for one property | Detail scraper already returns photos — double spend | Use detail scraper alone; images actor only as a fallback |
73
+ | Omitting `propertyStatus` on a sold/rental listing | Extra requests, slower, possible wrong record | Pass the correct status |
74
+ | Re-scraping on every run | Wastes events; photos already in source-images/ | Reuse the saved source-images/ when regenerating clips |
75
+
76
+ ## Source
77
+
78
+ Apify Store, Real Estate category. Actor IDs current as of 2026-06-27; re-verify with `search-actors "Zillow"` if a run 404s or an actor is deprecated.
79
+
80
+ </apify_zillow_actors>
@@ -0,0 +1,91 @@
1
+ <higgsfield_camera_moves>
2
+
3
+ ## Purpose
4
+
5
+ How to drive the Higgsfield MCP to turn a single still room photo into a cinematic clip that reads as "walking through" the house — using the proven Seedance prompt craft from the sibling skills `seedance-real-estate` (15-real-estate) and `seedance-cinematic` (01-cinematic) instead of hand-rolled prompts. A walkthrough is NOT one generation; it is one short image-to-video clip per room, each with a room-appropriate camera move, stitched later.
6
+
7
+ ## The Hard Constraint (read first)
8
+
9
+ Higgsfield `generate_video` is **image-to-video**: it animates a camera/scene move on one still for a short clip (~5s). It does NOT reconstruct 3D space or walk a continuous path through a house. Therefore:
10
+
11
+ - Whole-house walkthrough = N per-room clips, stitched on our side (see `stitch-pipeline.md`).
12
+ - Never promise true 3D / Matterport. Sell it as a "cinematic walkthrough."
13
+
14
+ ## Image-to-Video Adaptation (important)
15
+
16
+ `seedance-real-estate` and `seedance-cinematic` mostly author **text-to-video** prompts — they describe the entire scene. We feed a **real listing photo**, so the photo already carries the scene. Borrow only these layers from those skills, applied as a motion prompt ON the photo:
17
+
18
+ 1. The **camera move** (from the RE Camera Movement Library).
19
+ 2. The **lighting / time-of-day mood** (RE Lighting Guide) — only as a light grade, do not re-describe furniture/layout.
20
+ 3. For cinematic style, the **film-look layer** from `seedance-cinematic` (color grade, atmosphere, depth).
21
+
22
+ Do NOT re-describe the room's contents in the prompt — that fights the input image and drifts content. Prompt the camera + light, trust the photo.
23
+
24
+ ## How to Author Each Room's Prompt
25
+
26
+ For each room photo, build the motion prompt by consulting the sibling skills:
27
+
28
+ 1. Pick the room's camera move from the mapping below (named moves from `seedance-real-estate` → Camera Movement Library).
29
+ 2. Invoke the **`seedance-real-estate`** skill for that move's wording + the room's entry in Room-by-Room Showcase Strategy + a lighting cue from the Lighting & Time-of-Day Guide.
30
+ 3. If build style = **cinematic**, also invoke **`seedance-cinematic`** and layer its color-grade / atmosphere language.
31
+ 4. Compress the move to the ~5s clip length; keep ONE move per clip.
32
+
33
+ ## Room → Camera Move Mapping (RE Camera Movement Library)
34
+
35
+ | Room / shot | Named move (seedance-real-estate) | Note for image-to-video |
36
+ |-------------|-----------------------------------|--------------------------|
37
+ | Exterior / establishing | DRONE AERIAL APPROACH (or GIMBAL GLIDE along facade) | slow approach toward entry; compress to ~5s |
38
+ | Entry / foyer | DOORWAY THRESHOLD REVEAL → STEADICAM WALKTHROUGH | "walking in" feel |
39
+ | Hallway | STEADICAM WALKTHROUGH | human walking pace, smooth |
40
+ | Living / great room | ROTATING/ORBIT or GIMBAL SMOOTH GLIDE | reveal space + depth |
41
+ | Kitchen | GIMBAL SMOOTH GLIDE (counter flow) or ORBIT (island) | highlight finishes |
42
+ | Dining | GIMBAL SMOOTH GLIDE (table approach) | warm, steady |
43
+ | Primary bedroom | STEADICAM / gentle GIMBAL GLIDE | calm, spacious |
44
+ | Primary bath / spa | DOORWAY THRESHOLD REVEAL → short push-in | bright, clean |
45
+ | Secondary bedroom | GIMBAL SMOOTH GLIDE | brief beat |
46
+ | Guest bathroom | REVEAL AROUND CORNER / short push-in | quick, don't linger |
47
+ | Home office / library | PULLBACK OR PUSH-IN REVEAL | detail → context |
48
+ | Specialty (gym, cinema, wine) | PULLBACK/PUSH-IN or ORBIT | feature the wow |
49
+ | Window / view feature | WINDOW APPROACH & VIEW REVEAL | the emotional beat |
50
+ | Soaring ceiling / 2-story foyer | CEILING-TO-FLOOR VERTICAL TILT | reveal height |
51
+ | Outdoor / backyard / pool | DRONE AERIAL APPROACH or LATERAL CRANE | rising reveal closer |
52
+ | Detail (marble, fixtures, joinery) | PULLBACK/PUSH-IN REVEAL + SUBTLE FOCUS SHIFT | craftsmanship |
53
+
54
+ ## Prompting Rules
55
+
56
+ - **One move per clip.** Compound moves warp geometry. Single and slow.
57
+ - **Slow beats fast.** Real estate reads premium when calm; fast moves expose AI artifacts (melting furniture, bent doorways).
58
+ - **Prompt the camera + light, not the scene.** The photo carries content.
59
+ - **Engine is independent of the prompt craft.** The camera-move + lighting + cinematic-grade layers are model-agnostic — they apply to whatever Higgsfield video model you pick (Seedance 2.0 default, Kling 3.0, or a future model). Optionally `models_explore(action:'recommend')` per shot.
60
+ - **Aspect ratio = master ratio.** Generate at 16:9 for the agent master (or 9:16 if that's the only output). Reframe later; never generate twice.
61
+
62
+ ## Generation + Polling
63
+
64
+ 1. `generate_video` (image-to-video) per room photo with its authored motion prompt → job id.
65
+ 2. Dispatch all rooms, then poll `job_status` per id (don't block room N on N-1).
66
+ 3. Download each clip to `scenes/room-NN-{type}.mp4`, NN = walkthrough position.
67
+
68
+ ## Handling Bad Outputs
69
+
70
+ | Symptom | Fix |
71
+ |---------|-----|
72
+ | Furniture melts / warps | Regenerate with a gentler, shorter move (orbit → short push-in) |
73
+ | Doorway / window bends | Reduce move distance; prefer lateral glide over push-in for that room |
74
+ | Clip too short to feel cinematic | Accept it — stitched short clips still read as a tour; never force one long generation |
75
+ | One room keeps failing | Note it, skip after one retry; never block the property on one room |
76
+
77
+ ## Anti-Patterns
78
+
79
+ | Anti-Pattern | Why It's Bad | Fix |
80
+ |-------------|-------------|-----|
81
+ | Re-describing the room in the prompt | Fights the input photo, drifts content | Prompt only the camera move + light |
82
+ | Copying the seedance skills' full text-to-video scene prompts | They assume no input image; bloats + drifts | Borrow camera-move + lighting layers only |
83
+ | Generating the whole house in one call | Higgsfield can't; incoherent output | One clip per room, stitch later |
84
+ | Fast / compound camera moves | Exposes AI artifacts, looks cheap | Single slow move per clip |
85
+ | Duplicating the RE Camera Library into this skill | Two sources drift on every Seedance update | Invoke `seedance-real-estate` by name |
86
+
87
+ ## Source
88
+
89
+ Camera-move grammar: `seedance-real-estate` (15-real-estate) Camera Movement Library + Room-by-Room Showcase Strategy + Lighting & Time-of-Day Guide. Film-look layer: `seedance-cinematic` (01-cinematic). Higgsfield MCP: `generate_video`, `models_explore`, `job_status`, `reframe`.
90
+
91
+ </higgsfield_camera_moves>
@@ -0,0 +1,78 @@
1
+ <stitch_pipeline>
2
+
3
+ ## Purpose
4
+
5
+ How to assemble the per-room Higgsfield clips into one finished walkthrough, and how to produce the optional 9:16 social cut. Stitching happens on our side with ffmpeg — the skill owns the edit, not Claude eyeballing it and not Higgsfield.
6
+
7
+ ## Walkthrough Order
8
+
9
+ Concatenate in natural tour order, NOT the order Zillow returned photos:
10
+
11
+ ```
12
+ exterior → entry/foyer → living → dining → kitchen → bedrooms → bathrooms → outdoor/backyard
13
+ ```
14
+
15
+ The `scenes/` files are already named `room-NN-{type}.mp4` with NN encoding this order, so a sorted concat is correct.
16
+
17
+ ## Normalize Before Concat
18
+
19
+ Higgsfield clips can differ in fps, resolution, or codec. Concatenating mismatched clips causes stutter or failure. Normalize each clip to the same fps + resolution + codec first, then concat.
20
+
21
+ ```bash
22
+ # 1. Normalize every scene to 1080p, 30fps, h264 (master = 16:9)
23
+ for f in scenes/room-*.mp4; do
24
+ ffmpeg -y -i "$f" -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,fps=30" \
25
+ -c:v libx264 -pix_fmt yuv420p -an "norm-$(basename "$f")"
26
+ done
27
+
28
+ # 2. Concat in sorted (walkthrough) order
29
+ ls norm-room-*.mp4 | sort | sed "s/^/file '/;s/$/'/" > concat.txt
30
+ ffmpeg -y -f concat -safe 0 -i concat.txt -c:v libx264 -pix_fmt yuv420p -an final/walkthrough-16x9.mp4
31
+ ```
32
+
33
+ Silent master by design (v1): `-an` drops audio. Add music/VO in your editor later.
34
+
35
+ ## Optional Transitions
36
+
37
+ Hard cuts on the beat are clean and safe (default). If you want crossfades between rooms, use `xfade` — but keep them short (0.3–0.5s) so the tour stays brisk. Hard cuts are the recommended default; only add crossfades if the user asks.
38
+
39
+ ## 9:16 Social Cut
40
+
41
+ If the user requested a 9:16 cut, produce it FROM the finished clips, not by regenerating:
42
+
43
+ - **Preferred:** Higgsfield `reframe` on the master (content-aware — keeps the subject framed).
44
+ - **Fallback (ffmpeg center-crop + scale):**
45
+
46
+ ```bash
47
+ ffmpeg -y -i final/walkthrough-16x9.mp4 \
48
+ -vf "scale=-1:1920,crop=1080:1920" -c:v libx264 -pix_fmt yuv420p -an final/walkthrough-9x16.mp4
49
+ ```
50
+
51
+ Center-crop loses edges; `reframe` is better for rooms where the focal point isn't centered.
52
+
53
+ ## Verify Output
54
+
55
+ After producing each final file:
56
+ - File exists and is non-zero.
57
+ - Duration ≈ sum of scene durations (catches a silently dropped clip).
58
+ - Plays start-to-finish (a quick `ffprobe` for duration + stream count is enough; no need to watch).
59
+
60
+ ```bash
61
+ ffprobe -v error -show_entries format=duration -of default=nk=1:nw=1 final/walkthrough-16x9.mp4
62
+ ```
63
+
64
+ ## Anti-Patterns
65
+
66
+ | Anti-Pattern | Why It's Bad | Fix |
67
+ |-------------|-------------|-----|
68
+ | Concat without normalizing | Stutter, A/V desync, or ffmpeg errors on mismatched clips | Normalize fps/res/codec first |
69
+ | Regenerating rooms at 9:16 for the social cut | Double Higgsfield spend | Reframe the finished master |
70
+ | Long fancy transitions | Drags the tour, looks like a screensaver | Hard cuts (or ≤0.5s crossfade) |
71
+ | Trusting the concat blindly | A dropped clip yields a short video nobody notices | Check duration ≈ sum of scenes |
72
+ | Baking in music in v1 | Locks the edit, licensing headaches | Ship silent master; sound added downstream |
73
+
74
+ ## Source
75
+
76
+ ffmpeg (concat demuxer, scale/pad/crop, xfade) + Higgsfield `reframe`. Commands are reference patterns — adjust resolution/fps to the chosen master ratio.
77
+
78
+ </stitch_pipeline>
@@ -0,0 +1,168 @@
1
+ <purpose>
2
+ Take a Zillow listing (a pasted link, an address, or one discovered via search) and produce a finished cinematic room-by-room walkthrough video. Scrapes the listing + photos via Apify, animates curated rooms with the Higgsfield MCP, stitches the clips with ffmpeg, and writes everything into a predictable per-property folder.
3
+ </purpose>
4
+
5
+ <user-story>
6
+ As a creator selling media to real estate agents, I want one command that turns a listing into a cinematic walkthrough, so that I can produce a sellable tour in minutes instead of manually scraping, prompting, and editing.
7
+ </user-story>
8
+
9
+ <when-to-use>
10
+ - User pastes a Zillow listing URL or address and wants a walkthrough
11
+ - User wants to discover listings ("find 5 in NJ") then build from one
12
+ - Entry point routes here via /listing-walkthrough
13
+ </when-to-use>
14
+
15
+ <references>
16
+ @frameworks/apify-zillow-actors.md (during resolve_listing — actor IDs, inputs, chaining)
17
+ @frameworks/higgsfield-camera-moves.md (during animate_rooms — room→camera-move mapping + prompts)
18
+ @frameworks/stitch-pipeline.md (during stitch_and_reframe — ffmpeg concat + reframe)
19
+ @templates/property-md.md (during persist_property — PROPERTY.md shape)
20
+ @checklists/walkthrough-quality.md (during review_and_deliver — pre-delivery QA)
21
+ </references>
22
+
23
+ <steps>
24
+
25
+ <step name="choose_input_mode" priority="first">
26
+ Determine what we're building from. Ask the user (if not already clear from how they invoked the skill):
27
+
28
+ 1. **Do you have a specific listing, or want me to find some?**
29
+ - A Zillow listing URL → single-property path
30
+ - An address → single-property path (use the actor's `addresses` input)
31
+ - "Find me listings" → discovery path (ask: location + how many, e.g. "5 single-family homes in Montclair NJ")
32
+
33
+ **Wait for response.**
34
+
35
+ <if condition="discovery path">
36
+ Load @frameworks/apify-zillow-actors.md. Run the search/zip actor for the requested location + count. Present the found listings as a table (address · price · beds/baths · sqft · photo count). Ask the user to pick one (or more, processed one at a time).
37
+
38
+ **Wait for selection.**
39
+ </if>
40
+
41
+ Confirm the final property/properties and the listing status (FOR_SALE / RECENTLY_SOLD / FOR_RENT — needed by the detail scraper; default FOR_SALE for active listings).
42
+ </step>
43
+
44
+ <step name="collect_creative_choices">
45
+ Ask the creative questions (offer the recommended default for each — let the user accept all defaults with one "go"):
46
+
47
+ 1. **Style** — Cinematic (camera-move per room) [default] or Basic (simple slow pan / Ken-Burns).
48
+ 2. **Rooms** — Auto-curate ~6–10 hero shots [default] or animate all photos.
49
+ 3. **Output ratio** — 16:9 master for agent delivery [default], 9:16 social cut, or both.
50
+ 4. **Engine** — Seedance 2.0 [default] or Kling 3.0.
51
+
52
+ **Wait for response (or a blanket "use defaults").**
53
+
54
+ State the rough cost before running: detail scrape (~$0.004) + N Higgsfield clips. Confirm to proceed.
55
+
56
+ **Wait for go.**
57
+ </step>
58
+
59
+ <step name="resolve_listing">
60
+ Load @frameworks/apify-zillow-actors.md.
61
+
62
+ Resolve the property to structured data + photo URLs via the Apify MCP:
63
+ - URL path → call `maxcopell/zillow-detail-scraper` with `startUrls`.
64
+ - Address path → same actor with `addresses`.
65
+ - Discovery path → chain the search actor's dataset into the detail scraper via `searchResultsDatasetId`.
66
+
67
+ Use the Apify MCP `call-actor` tool (fetch the actor's input schema first if unsure). Retrieve the run's dataset items.
68
+
69
+ Verify you got: full address, price, beds/baths/sqft, year built, agent info, and a non-empty list of image URLs. If image URLs are missing or sparse, fall back to `burbn/zillow-property-images-scraper` with `propertyUrls` for the photos.
70
+
71
+ Derive a `{property-slug}` from the address (kebab-case, e.g. `17-zelma-dr-greenville-sc-29617`).
72
+ </step>
73
+
74
+ <step name="persist_property">
75
+ Load @templates/property-md.md.
76
+
77
+ Create the property folder tree under the output root `listing-walkthroughs/{property-slug}/`:
78
+ - `source-images/` — download every photo URL here (use Bash `curl`/`wget`; name `NN-original.jpg` in returned order).
79
+ - `scenes/` — created now, filled in animate_rooms.
80
+ - `final/` — created now, filled in stitch_and_reframe.
81
+
82
+ Write `listing-walkthroughs/{property-slug}/PROPERTY.md` from the template: address, Zillow link, price, beds/baths/sqft, year, agent, full room/photo list, and the run's creative choices.
83
+ </step>
84
+
85
+ <step name="curate_rooms">
86
+ <if condition="rooms = auto-curate">
87
+ Do a vision pass over `source-images/`: Read the images, pick the single best photo per distinct room, drop floorplans, maps, aerial-only, watermark-heavy, and near-duplicate shots. Target the hero set: exterior, entry/foyer, living, kitchen, primary bed, primary bath, one secondary bed, and a backyard/outdoor shot when present (~6–10 total). Tag each kept photo with its room type.
88
+ </if>
89
+
90
+ <if condition="rooms = all">
91
+ Use every non-floorplan photo, tagging each with its best-guess room type for camera-move selection.
92
+ </if>
93
+
94
+ Produce an ordered shot list: [photo file, room type, walkthrough position]. Walkthrough order = exterior → entry → living → kitchen → bedrooms → bathrooms → outdoor, regardless of Zillow's photo order.
95
+ </step>
96
+
97
+ <step name="animate_rooms">
98
+ Load @frameworks/higgsfield-camera-moves.md.
99
+
100
+ The prompt craft is **model-agnostic** (applies to whichever Higgsfield video model you chose: Seedance 2.0, Kling 3.0, or any future model). Two OPTIONAL sibling skills enrich the wording when present:
101
+ - **`seedance-real-estate`** — Camera Movement Library, Room-by-Room Showcase Strategy, Lighting & Time-of-Day Guide.
102
+ - **`seedance-cinematic`** — film-look layer (color grade, atmosphere, depth), used when style = cinematic.
103
+
104
+ For each shot in the list, generate one clip via the Higgsfield MCP:
105
+ 1. Pick the room's camera move from the framework mapping in `higgsfield-camera-moves.md` (this mapping is self-sufficient on its own).
106
+ 2. **Author the motion prompt.** If `seedance-real-estate` is installed, invoke it for the move wording + room cue + lighting; if style = cinematic and `seedance-cinematic` is installed, layer its grade/atmosphere. If neither is installed, build the prompt directly from the framework mapping + prompting rules — it is enough. Either way: apply only the camera-move + lighting layers ON the photo — do NOT re-describe the room (image-to-video carries the scene). Compress the move to the ~5s clip length; one move per clip.
107
+ 3. (Optional) Call `models_explore` to confirm the best model for the shot; otherwise use the chosen engine.
108
+ 4. Call `generate_video` as image-to-video, passing the room photo + the authored motion prompt, at the master ratio (16:9 unless 9:16-only was selected).
109
+ 5. Capture the returned job id.
110
+
111
+ After dispatching all rooms, poll `job_status` for each until rendered. Download each finished clip to `scenes/room-NN-{type}.mp4` (NN = walkthrough position, zero-padded).
112
+
113
+ If a clip fails or warps badly (furniture melting, doorway distortion), regenerate that single room with a gentler move (shorter push-in) before continuing. Do not block the whole property on one bad room — note it and move on if a retry also fails.
114
+ </step>
115
+
116
+ <step name="stitch_and_reframe">
117
+ Load @frameworks/stitch-pipeline.md.
118
+
119
+ 1. Concatenate `scenes/*.mp4` in walkthrough order via ffmpeg → `final/walkthrough-16x9.mp4` (or the chosen master ratio). Normalize fps/resolution per the framework before concat so clips join cleanly.
120
+ 2. <if condition="ratio includes 9:16 and master is 16:9">Produce `final/walkthrough-9x16.mp4` — prefer Higgsfield `reframe` for content-aware reframing; fall back to ffmpeg center-crop + scale per the framework.</if>
121
+ 3. Master is silent by design (v1). Do not add audio.
122
+
123
+ Verify each final file exists, is non-zero, and plays start-to-finish with the expected duration (~sum of scene durations).
124
+ </step>
125
+
126
+ <step name="review_and_deliver">
127
+ Load @checklists/walkthrough-quality.md and validate the output against it.
128
+
129
+ Report to the user:
130
+ - Final video path(s) under `listing-walkthroughs/{property-slug}/final/`
131
+ - Scene count + any rooms that were skipped/failed
132
+ - `PROPERTY.md` path
133
+ - Rough Higgsfield credit + Apify cost spent
134
+
135
+ Ask: "Walkthrough ready — want any room regenerated, a different ratio, or this batched across more listings?"
136
+
137
+ **Wait for approval or revision requests.**
138
+ </step>
139
+
140
+ </steps>
141
+
142
+ <output>
143
+ ## Artifact
144
+ A finished cinematic walkthrough video plus a complete per-property asset folder.
145
+
146
+ ## Structure
147
+ ```
148
+ listing-walkthroughs/{property-slug}/
149
+ ├── PROPERTY.md address · link · price · specs · agent · room list · run notes
150
+ ├── source-images/ every photo pulled from Zillow (NN-original.jpg)
151
+ ├── scenes/ per-room Higgsfield clips (room-NN-{type}.mp4)
152
+ └── final/ walkthrough-16x9.mp4 (+ walkthrough-9x16.mp4 if requested)
153
+ ```
154
+
155
+ ## Location
156
+ Output root: `listing-walkthroughs/` at repo root.
157
+ </output>
158
+
159
+ <acceptance-criteria>
160
+ - [ ] Listing resolved to structured data + non-empty photo set via Apify
161
+ - [ ] PROPERTY.md written with address, link, specs, agent, and creative choices
162
+ - [ ] All source photos downloaded to source-images/
163
+ - [ ] Each curated room produced one clip in scenes/, ordered by walkthrough position
164
+ - [ ] final/ contains a playable master that runs start-to-finish in correct room order
165
+ - [ ] If 9:16 requested, the social cut exists and is correctly reframed
166
+ - [ ] Output passes checklists/walkthrough-quality.md
167
+ - [ ] User confirmed the walkthrough matches intent
168
+ </acceptance-criteria>
@@ -0,0 +1,92 @@
1
+ # Property Template
2
+
3
+ Template for `listing-walkthroughs/{property-slug}/PROPERTY.md` — the per-property brief that travels with the walkthrough assets.
4
+
5
+ **Purpose:** Capture everything about the property (so the folder is self-describing for re-runs and for the agent pitch) plus the creative choices used for this build.
6
+
7
+ ---
8
+
9
+ ## File Template
10
+
11
+ ```markdown
12
+ # {property-address}
13
+
14
+ **Zillow:** {zillow-url}
15
+ **Status:** {listing-status}
16
+ **Slug:** {property-slug}
17
+ **Built:** {build-date}
18
+
19
+ ## Property
20
+ | Field | Value |
21
+ |-------|-------|
22
+ | Price | {price} |
23
+ | Beds | {beds} |
24
+ | Baths | {baths} |
25
+ | Living area | {sqft} sqft |
26
+ | Year built | {year-built} |
27
+ | Home type | {home-type} |
28
+
29
+ ## Agent
30
+ - **Name:** [Listing agent name]
31
+ - **Contact:** [Phone / email if returned]
32
+ - **Brokerage:** [Brokerage]
33
+
34
+ ## Photos
35
+ - Source count: {source-photo-count} (in `source-images/`)
36
+ - Curated for animation: {curated-count}
37
+
38
+ ## Shot List (walkthrough order)
39
+ | # | Room | Photo | Camera move |
40
+ |---|------|-------|-------------|
41
+ | 01 | [exterior] | [NN-original.jpg] | [push-in] |
42
+ | 02 | [entry] | [NN-original.jpg] | [forward dolly] |
43
+ | ... | ... | ... | ... |
44
+
45
+ ## Build Choices
46
+ - **Style:** {style} (cinematic / basic)
47
+ - **Rooms:** {room-mode} (auto-curate / all)
48
+ - **Output ratio:** {ratio} (16:9 / 9:16 / both)
49
+ - **Engine:** {engine} (Seedance 2.0 / Kling 3.0)
50
+
51
+ ## Outputs
52
+ - Master: `final/walkthrough-16x9.mp4`
53
+ - Social: [final/walkthrough-9x16.mp4 if produced]
54
+ - Scenes: {scene-count} clips in `scenes/`
55
+
56
+ ## Run Notes
57
+ [Any rooms skipped/failed, regenerations, or cost notes]
58
+ ```
59
+
60
+ ---
61
+
62
+ ## Field Documentation
63
+
64
+ | Field | Type | Required | Purpose | Example |
65
+ |-------|------|----------|---------|---------|
66
+ | `{property-address}` | variable | Yes | Full street address | `17 Zelma Dr, Greenville, SC 29617` |
67
+ | `{zillow-url}` | variable | Yes | Source listing link | `https://www.zillow.com/homedetails/.../11026031_zpid/` |
68
+ | `{listing-status}` | variable | Yes | FOR_SALE / RECENTLY_SOLD / FOR_RENT | `FOR_SALE` |
69
+ | `{property-slug}` | variable | Yes | kebab-case folder name | `17-zelma-dr-greenville-sc-29617` |
70
+ | `{build-date}` | variable | Yes | Date built (YYYY-MM-DD) | `2026-06-27` |
71
+ | `{price}` `{beds}` `{baths}` `{sqft}` `{year-built}` `{home-type}` | variable | Yes | Core specs from the actor | `$415,000` / `3` / `2` / `1840` / `1998` / `Single Family` |
72
+ | `{source-photo-count}` `{curated-count}` `{scene-count}` | variable | Yes | Counts from the run | `34` / `8` / `8` |
73
+ | `{style}` `{room-mode}` `{ratio}` `{engine}` | variable | Yes | The build choices | `cinematic` / `auto-curate` / `16:9` / `Seedance 2.0` |
74
+ | `[Listing agent name]` / `[Contact]` / `[Brokerage]` | prose | No | Agent details if the actor returned them | `Jane Doe, Keller Williams` |
75
+ | `[Shot list rows]` | prose | Yes | One row per animated room | `01 / exterior / 03-original.jpg / push-in` |
76
+ | `[Run Notes]` | prose | No | Skips, retries, cost | `Bath 2 skipped — only floorplan photo` |
77
+
78
+ ## Section Specifications
79
+
80
+ ### Property
81
+ **Purpose:** The spec table the agent cares about.
82
+ **Contains:** Price, beds, baths, sqft, year, home type — pulled straight from the detail scraper.
83
+ **Quality check:** Every cell filled from actor data, not guessed.
84
+
85
+ ### Shot List
86
+ **Purpose:** Audit trail mapping each scene clip back to its source photo + camera move.
87
+ **Contains:** One row per animated room in walkthrough order.
88
+ **Quality check:** Row count equals `scenes/` clip count.
89
+
90
+ ### Build Choices
91
+ **Purpose:** Reproducibility — re-run the same property the same way.
92
+ **Quality check:** All four choices recorded (style, rooms, ratio, engine).