WD CrystalChain is a local-first, JSON-first toolkit for creating original crystal-bracelet concepts, product photography prompts, social posts, and live-sales scripts.
This repository does not contain a crawler, browser-login automation, platform-specific selectors, or platform-specific domains. Style analysis accepts local Markdown files supplied by the user. Only use material that you created, that is in the public domain, that has an open licence compatible with your use, or that you have explicit permission to process.
Do not place personal information, account identifiers, session cookies, API keys, copied posts, or third-party images in this repository.
python3 -m venv .venv
source .venv/bin/activate
pip install -e '.[openai]'
cp .env.example .env
python web_app.pyOpen http://127.0.0.1:8765. The application remains local and is not intended to be exposed as a hosted service.
The interface starts with Mock mode enabled. Mock mode makes no external API calls.
- Keep the default style source name,
example_creator. - Click Summarize local style. On a fresh clone, this uses the original demo note in
examples/demo_note.md. - When the demo style appears, click Generate content.
The generated local files are ignored by Git.
The equivalent command-line flow is:
mkdir -p raw/example_creator
cp examples/demo_note.md raw/example_creator/demo.md
python analyze.py --blogger example_creator --mock
python summarize.py --blogger example_creator --mock
python generate.py --target-user "Young professionals" --theme "career milestone" --need "A calm blue bracelet" --budget 399 --style example_creator --mockcp .env.example .env creates blank configuration placeholders; it does not provide API access. Add your own provider API key to .env, keep the file local, restart web_app.py, and then turn off Mock mode. Never commit .env.
Place user-owned or licensed Markdown files under raw/<style_source>/. Each file may contain:
# Example title
Source: user-owned sample
Tags: #crystal #design
Images:
- https://example.org/licensed-image.jpg
## Content
Original or properly licensed text goes here.Run python analyze.py --blogger <style_source>, followed by python summarize.py --blogger <style_source>.
The text, vision, and image providers are configurable through .env. The sample configuration uses versioned model identifiers such as deepseek-v4-flash, qwen3-vl-flash, and qwen-image-2.0; availability and names may change. Substitute models that are available under your own provider account and terms.
Successful text generation is retained if optional image generation fails. Source images are never passed to the image-generation model; image generation uses only the user's draft, the newly generated bracelet design, and abstract style information.
The following are intentionally excluded from Git:
.env,.venv/,.browser_profile/knowledge/learned.json- files under
raw/,analysis/,summary/, andoutputs/ - generated images, build artifacts, and Python caches
See PRIVACY_AND_CONTENT_POLICY.md. This project is provided for lawful creative assistance and does not grant rights to third-party content, trademarks, personal data, or platform access.
Code is available under the MIT License. Documentation and included example data are also offered under MIT unless a file states otherwise.