feat: Add OurDigital custom skills package (10 skills)

Complete implementation of OurDigital skills with dual-platform support
(Claude Desktop + Claude Code) following standardized structure.

Skills created:
- 01-ourdigital-brand-guide: Brand reference & style guidelines
- 02-ourdigital-blog: Korean blog drafts (blog.ourdigital.org)
- 03-ourdigital-journal: English essays (journal.ourdigital.org)
- 04-ourdigital-research: Research prompts & workflows
- 05-ourdigital-document: Notion-to-presentation pipeline
- 06-ourdigital-designer: Visual/image prompt generation
- 07-ourdigital-ad-manager: Ad copywriting & keyword research
- 08-ourdigital-trainer: Training materials & workshop planning
- 09-ourdigital-backoffice: Quotes, proposals, cost analysis
- 10-ourdigital-skill-creator: Meta skill for creating new skills

Features:
- YAML frontmatter with "ourdigital" or "our" prefix triggers
- Standardized directory structure (code/, desktop/, shared/, docs/)
- Shared environment setup (_ourdigital-shared/)
- Comprehensive reference documentation
- Cross-skill integration support

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-31 16:50:17 +07:00
parent 7d20abe811
commit 0bc24d00b9
169 changed files with 9970 additions and 741 deletions

View File

@@ -0,0 +1,251 @@
#!/usr/bin/env python3
"""
OurDigital Mood Calibrator
Fine-tune emotional and stylistic parameters for visual prompts
"""
import json
from typing import Dict, Any
import argparse
class MoodCalibrator:
def __init__(self):
self.presets = {
"default": {
"contemplative_depth": 0.8,
"cultural_fusion": 0.6,
"technical_precision": 0.7,
"emotional_weight": 0.5,
"innovation_index": 0.7
},
"philosophical_essay": {
"contemplative_depth": 0.95,
"cultural_fusion": 0.7,
"technical_precision": 0.6,
"emotional_weight": 0.3,
"innovation_index": 0.8
},
"technical_analysis": {
"contemplative_depth": 0.6,
"cultural_fusion": 0.4,
"technical_precision": 0.9,
"emotional_weight": 0.3,
"innovation_index": 0.6
},
"social_commentary": {
"contemplative_depth": 0.7,
"cultural_fusion": 0.6,
"technical_precision": 0.5,
"emotional_weight": 0.7,
"innovation_index": 0.7
},
"cultural_exploration": {
"contemplative_depth": 0.8,
"cultural_fusion": 0.9,
"technical_precision": 0.4,
"emotional_weight": 0.6,
"innovation_index": 0.8
}
}
self.parameter_descriptions = {
"contemplative_depth": "Level of abstraction (0=literal, 1=highly abstract)",
"cultural_fusion": "Balance of Korean-Western aesthetics (0=Western only, 1=Korean dominant)",
"technical_precision": "Clean geometric vs organic forms (0=organic, 1=geometric)",
"emotional_weight": "Mood intensity (0=neutral, 1=heavy atmosphere)",
"innovation_index": "Traditional vs experimental approach (0=traditional, 1=experimental)"
}
def calibrate(self, preset: str = "default", **overrides) -> Dict[str, float]:
"""
Get calibrated mood parameters
Args:
preset: Base preset to use
**overrides: Specific parameter overrides
Returns:
Dictionary of calibrated parameters
"""
params = self.presets.get(preset, self.presets["default"]).copy()
# Apply overrides
for key, value in overrides.items():
if key in params:
params[key] = max(0, min(1, value)) # Clamp to 0-1
return params
def generate_modifier_text(self, params: Dict[str, float]) -> str:
"""
Generate text modifiers based on parameters
Args:
params: Dictionary of mood parameters
Returns:
Text description for prompt modification
"""
modifiers = []
# Contemplative depth
if params["contemplative_depth"] > 0.8:
modifiers.append("highly abstract and philosophical")
elif params["contemplative_depth"] > 0.6:
modifiers.append("semi-abstract with symbolic elements")
else:
modifiers.append("grounded with recognizable forms")
# Cultural fusion
if params["cultural_fusion"] > 0.7:
modifiers.append("strong Korean aesthetic influence")
elif params["cultural_fusion"] > 0.4:
modifiers.append("balanced East-West aesthetic fusion")
else:
modifiers.append("Western minimalist approach")
# Technical precision
if params["technical_precision"] > 0.7:
modifiers.append("precise geometric construction")
elif params["technical_precision"] > 0.4:
modifiers.append("blend of geometric and organic")
else:
modifiers.append("flowing organic forms")
# Emotional weight
if params["emotional_weight"] > 0.7:
modifiers.append("heavy, contemplative atmosphere")
elif params["emotional_weight"] > 0.4:
modifiers.append("balanced emotional tone")
else:
modifiers.append("light, open feeling")
# Innovation index
if params["innovation_index"] > 0.7:
modifiers.append("experimental and avant-garde")
elif params["innovation_index"] > 0.4:
modifiers.append("contemporary with classic elements")
else:
modifiers.append("timeless and traditional")
return ", ".join(modifiers)
def suggest_color_temperature(self, params: Dict[str, float]) -> str:
"""
Suggest color temperature based on parameters
Args:
params: Dictionary of mood parameters
Returns:
Color temperature suggestion
"""
emotional = params.get("emotional_weight", 0.5)
technical = params.get("technical_precision", 0.7)
if emotional > 0.6:
if technical > 0.6:
return "Cool palette with strategic warm accents"
else:
return "Warm, earthy tones with depth"
else:
if technical > 0.6:
return "Neutral grays with single accent color"
else:
return "Soft, desaturated natural colors"
def export_for_prompt(self, params: Dict[str, float]) -> Dict[str, Any]:
"""
Export parameters in a format ready for prompt generation
Args:
params: Dictionary of mood parameters
Returns:
Formatted export for prompt generation
"""
return {
"parameters": params,
"modifiers": self.generate_modifier_text(params),
"color_temperature": self.suggest_color_temperature(params),
"abstraction_level": params["contemplative_depth"],
"cultural_balance": params["cultural_fusion"]
}
def main():
parser = argparse.ArgumentParser(
description="Calibrate mood parameters for OurDigital visual prompts"
)
parser.add_argument(
"--preset",
choices=["default", "philosophical_essay", "technical_analysis",
"social_commentary", "cultural_exploration"],
default="default",
help="Base preset to use"
)
parser.add_argument(
"--contemplative-depth",
type=float,
help="Override contemplative depth (0-1)"
)
parser.add_argument(
"--cultural-fusion",
type=float,
help="Override cultural fusion (0-1)"
)
parser.add_argument(
"--technical-precision",
type=float,
help="Override technical precision (0-1)"
)
parser.add_argument(
"--emotional-weight",
type=float,
help="Override emotional weight (0-1)"
)
parser.add_argument(
"--innovation-index",
type=float,
help="Override innovation index (0-1)"
)
parser.add_argument(
"--export",
action="store_true",
help="Export full configuration for prompt generation"
)
args = parser.parse_args()
calibrator = MoodCalibrator()
# Build overrides
overrides = {}
if args.contemplative_depth is not None:
overrides["contemplative_depth"] = args.contemplative_depth
if args.cultural_fusion is not None:
overrides["cultural_fusion"] = args.cultural_fusion
if args.technical_precision is not None:
overrides["technical_precision"] = args.technical_precision
if args.emotional_weight is not None:
overrides["emotional_weight"] = args.emotional_weight
if args.innovation_index is not None:
overrides["innovation_index"] = args.innovation_index
# Calibrate
params = calibrator.calibrate(args.preset, **overrides)
if args.export:
export = calibrator.export_for_prompt(params)
print(json.dumps(export, indent=2, ensure_ascii=False))
else:
print(f"Calibrated Parameters for '{args.preset}':")
print("-" * 50)
for key, value in params.items():
desc = calibrator.parameter_descriptions[key]
print(f"{key}: {value:.2f} - {desc}")
print("-" * 50)
print(f"Modifiers: {calibrator.generate_modifier_text(params)}")
print(f"Color Temperature: {calibrator.suggest_color_temperature(params)}")
if __name__ == "__main__":
main()