직접 사용하는 캐릭터 멀티 조합기 V2.3
별을 선택하면 Grok·Midjourney 프롬프트가 생성됩니다. 마가삼 운영본의 별 데이터와 조합 로직을 옮겼습니다.
복원·연관 분석 v0.2 · 확인일 2026-10-04
무엇을 만들던 자료인가
자미두수의 별과 조합을 캐릭터의 존재감·시선·자세로 바꾸고, 이미지 캐스팅과 영상 연기를 위한 프롬프트를 생성하는 작업입니다. 현재 확인한 자료에는 세 층이 있습니다. 원대화의 간단한 조합 코드, 마가삼에서 실제 작동하는 캐릭터 멀티 조합기, 그리고 느낌의 원인·표현·선택을 다룬 연구 설계입니다.
마가삼의 캐릭터 멀티 조합기 V2.3은 실제 프롬프트 생성이 확인됩니다. 원대화 마지막의 짧은 HTML·JS만 보고 이 작업 전체를 실패·폐기·미완성으로 분류했던 판단을 바로잡습니다. 다만 이 짧은 코드가 운영 도구의 직접 전신인지, 어느 코드가 설치되어 있는지는 별도 확인이 필요합니다.
복원 흐름과 현재 단계
원자료/출처 → 검색·분석 → 복원·정리 → 이론·구조 → 수식·코드·데이터 → 게임 엔진/기능 → 시나리오·음악·이미지·영상 → 실제 콘텐츠/플레이
이번 문서는 원자료를 대조하고 기능을 확인한 복원·분석 자료입니다. 별 조합→프롬프트 생성 기능은 운영 화면에서 확인했습니다. 수식·캐릭터 DB·법 게이트는 연구 설계로 남아 있습니다. 이미지·영상 생성 결과, LoRA 학습 파일, 게임 엔진 연결과 실제 플레이까지 완료된 것으로 표시하지 않습니다.
실제 운영 도구에서 확인한 것
마가삼 글 제목은 ‘(gpt) 프롬프트 자미두수 성질특성별 분석 v3 ( Cloned )’, 도구 화면의 버전은 ‘V2.3 Professional’입니다. 글 버전과 도구 버전을 구분합니다.
- 주성 14개, 보좌·길성 8개, 살성 6개, 사화 4개를 선택하는 UI가 존재합니다.
- 자미·파군·화권을 선택하자 조합 목록과 Grok·Midjourney 두 결과가 생성됐습니다.
- 여성으로 전환하자 Female/Korean woman 및 여성 존재감으로 결과가 바뀌었습니다.
- 전체 리셋 후 두 결과가 빈 값으로 돌아갔습니다.
- 이미지·영상 생성, 모든 별 조합, 복사 버튼, 피부 모드의 출력 변경은 이번 실행 검증 범위에 포함하지 않았습니다.
실제 생성된 Grok 결과 — 남성
[Scene: Male | Identity: 자미+파군+화권]
Presence: calm authoritative emperor, rebellious innovator, dominant power
Eyes: direct judge-like gaze + unstable disruptive gaze + dominating sharp gaze
Posture: perfectly upright stillness + dynamic asymmetric pose + commanding firm stance
Field: cinematic realistic portrait, grounded realism실제 생성된 Midjourney 결과 — 남성
Portrait of a Korean man, embodying 자미 & 파군 & 화권 Stars, calm authoritative emperor, rebellious innovator, dominant power, direct judge-like gaze + unstable disruptive gaze + dominating sharp gaze, perfectly upright stillness + dynamic asymmetric pose + commanding firm stance, clean high-quality skin, even complexion, subtle pores, matte finish, 85mm lens, soft cinematic lighting, --ar 4:5 --v 6.1여성 전환 결과
[Scene: Female | Identity: 자미+파군+화권]
Presence: elegant empress dignity, bold rule-breaker, dominant power
Eyes: direct judge-like gaze + unstable disruptive gaze + dominating sharp gaze
Posture: perfectly upright stillness + dynamic asymmetric pose + commanding firm stance
Field: cinematic realistic portrait, grounded realism이 결과는 직접 누른 화면의 출력 원문입니다. ‘가장 사실적인 연기’라는 소개 문구는 도구의 주장이고, 프롬프트가 생성된 사실과 영상 품질 검증은 별개입니다.
원대화의 코드 세 버전은 무엇이 다른가
직접 출처: 자미 14주 성별 구별. 확인한 구간은 2월 7일의 조합 구현 요청부터 마지막 작업 중단까지입니다. 그보다 앞선 메시지는 화면에서 ‘이전 메시지 불러오는 중’으로 남아 전체를 읽었다고 표시하지 않습니다.
| 코드 자료 | 들어 있는 기능 | 완성도 판단 |
|---|---|---|
| 첫 PHP 쇼트코드 | 자미·칠살·천기·탐랑 4계열, 9모듈, 시선·자세 공통 슬롯, 복사·초기화 | AI 제안. 사용자가 뒤에 코드 깨짐을 보고. 전체 별 데이터와 성별 선택은 없음. |
| 수정 PHP | 쇼트코드 유지, 스크립트 enqueue·data-* JSON 전달·루트 단위 이벤트 처리 | AI 수정 제안. 실제 설치·정상 실행 증거는 이 구간에 없음. 한글 누락·미완성 지적이 이어짐. |
| 한글 HTML·JS | 3계열·4옵션을 한 문장으로 합치고 공통 시선·자세 추가·복사 | 한글 최소 예시. 앞선 4계열·9모듈보다 범위 축소. 마가삼 V2.3의 전체 기능과 동일하지 않음. |
마지막 HTML·JS에는 전체 input에 onchange를 할당하고 고정 ID·전역 build/copy 함수를 사용하는 구조가 있습니다. 기존 페이지의 다른 입력과 여러 조합기에 함께 넣을 때 충돌 가능성을 검토해야 합니다. 14주성 전체·보좌·살성·사화 전체·성별·플랫폼별 출력·LoRA 파일 로딩 및 학습은 이 코드에 없습니다. 이는 원문을 읽은 분석이며 실행 성공이나 실패 테스트를 대신하지 않습니다.
사용자 원리·AI 제안·수정과 중단을 구분
확인한 사용자 요구: 조합의 다양성을 연기에 활용할 수 있는지 묻고 코드 구현을 요구했습니다. 깨짐, 한글 누락과 미완성을 지적했습니다. 현재 복원 작업에서는 관련 버전과 마가삼 운영 여부까지 추적하라고 지시했습니다.
AI 제안: 계열+모듈+시선/자세 합성, PHP 두 버전, 한글 HTML·JS. ‘깨질 요소 0’, ‘로라 덮어쓰기 안 됨’, ‘현실에 수렴’ 같은 당시 AI의 단정은 검증된 결론으로 채택하지 않습니다.
중단의 범위: 마지막에 사용자가 추가 작업 중단을 말한 것은 확인됩니다. 이 발언 하나로 관련 도구 전체가 실패했거나 폐기됐다고 결론내리지 않습니다. 마가삼 V2.3에서는 실제 출력이 확인됐습니다. 최초 성공 시점과 사용자가 채택한 정확한 설치본은 미확인입니다.
관련 자료를 대조한 결과
아래 14개 마가삼 자료의 공개 본문을 실제로 읽었습니다. 제목이 비슷하다는 이유만으로 같은 자료로 합치지 않고, 글 버전·도구 버전·연구 역할을 구분했습니다. 확정된 직접 코드 계보와 기능·주제가 연관된 자료를 혼동하지 않습니다.
| 실제 원자료 | 내용·연관·확인 범위 |
|---|---|
| (gpt) 자미두수 캐릭 64개 분석 느낌에 원인을 둔 행동 이전 프롬프트 의 알고리즘 연구 v5 | 수(受) 5성분·10입력, 법 게이트, 5가지 성요 분류, 갈등의 동의·용량·피드백, Suno 10곡 전체 가사와 스타일. 연구 확장 자료이며 조합기 실행 코드와 동일하지 않음. |
| (gpt) 자미두수 캐릭 64개 분석 느낌에 원인을 둔 행동 이전 프롬프트 의 알고리즘 연구 v4 ( Cloned ) | 통합본. 수 생성·법 게이트·갈등 루프·성요 분류와 10곡 목록. 가사는 첫 곡 중략 샘플이므로 v5 전체 가사와 구분. |
| (gpt) 자미두수 캐릭 64개 분석 느낌에 원인을 둔 행동 이전 프롬프트 의 알고리즘 연구 v3 | 촉의 내부 합성, 6가지 접촉 출처, 투사·트라우마·공감 전염·위협 편향, 법 게이트 의사코드. 실행 프로그램이 아닌 설계 자료. |
| (gpt) 자미두수 캐릭 64개 분석 느낌에 원인을 둔 행동 이전 프롬프트 의 알고리즘 연구 v2 | 수 출력 = φ(Wbody·xin + bbias) × γANS 모델과 JSON 형식 예시. 실제 가중치 행렬·함수·전체 캐릭터 데이터 및 계산 실행은 제시되지 않음. |
| (gpt) 자미두수 캐릭 64개 분석 느낌에 원인을 둔 행동 이전 프롬프트 연구 | 입력10→출력5→Eye4·Effort4·PG 표현, character_id·star_base·수 입력/출력·표면표현·한영 프롬프트 규격. 자미·천기·파군 예시와 살성 적용 규칙. |
| (제미나이) 자미두수 캐릭 64개 분석 프롬프트 실례 | 32성요 남녀 64프롬프트 + 사화 남녀 8오버레이 = 화면에 72문장. 조합기에 들어갈 외형·조명 데이터 후보. 별의 실제 신체 결정 법칙으로 확정된 자료는 아님. |
| (클로드) 자미두수 캐릭 분석 프롬프트 v1 | 신수심법 프롬프트 생성기 UI. 14주성·성별·살성 최대3·사화 선택과 물리적 좌표 원칙. 본 조사에서는 버튼 출력 미검증. |
| (gpt) 프롬프트 자미두수 성질특성별 분석 v4 | v4라는 제목은 있으나 공개 본문에 도구가 표시되지 않음. 빈 화면만으로 개발 실패나 폐기를 판정하지 않음. |
| (gpt) 프롬프트 자미두수 성질특성별 분석 v3 ( Cloned ) | 공개 화면은 V2.3 Professional. 주성14·보좌8·살성6·사화4, 성별, 피부모드, 두 플랫폼 출력. 자미+파군+화권 생성·성별 전환·리셋 직접 확인. |
| (재마너아) 프롬프트 자미두수 성질특성별 분석 v2 캐릭 잘나옴 | 글 제목에 캐릭 잘나옴이라는 기록. 공개 도구는 V2.2 Professional이며 주성·보좌·살성·사화와 두 플랫폼 출력이 표시됨. 이미지 품질의 독립 재검증은 없음. |
| (재마너아) 프롬프트 자미두수 성질특성별 분석 | 공개 도구는 V2.1. 여러 별 조합·성별·초기화·Grok/Midjourney 출력 UI가 남아 있음. |
| (클라우드) 프롬프트 설계 가이드 v4.4 | v4.4 가이드 글의 공개 본문에는 도구가 표시되지 않음. 별도로 서버의 PROMPT DIRECTOR V4.4 파일이 열림. 해당 파일이 이 글에 설치된 동일본인지는 미확인. |
| (gpt) 프롬프트 설계 가이드 v1 | 주제·행동·배경·카메라·조명·스타일·제약, Identity Lock, 레퍼런스 고정, 한 컷 한 동작과 영상 전환 템플릿. 조합기의 결과를 실제 제작 프롬프트에 연결하는 가이드. |
| (제미나이) 이미지 프롬프트만 옵션 프롬프트 별도 개발버전 v5 | PROMPT DIRECTOR UI. 기본정보·신체·장소·의상·구도·행동·카메라·조명·네거티브, Grok/MJ/Flux/SDXL/Gemini 출력 선택. 이 자료는 별 조합기와 용도가 다름. |
실제로 연결할 수 있는 데이터와 구조
‘행동 이전 프롬프트 연구’ 본문은 10입력→5느낌 성분→3표면 표현을 제안합니다. 입력은 접촉·신체 기준선·ANS 게인·주의·예측·학습·욕구·환경·사회 신호·행동 준비이고, 출력은 쾌불쾌·각성·긴장·방향·시간 질감입니다. 표면 표현은 Eye4(빛·감정·초점·에너지), Effort4(공간·무게·시간·흐름), PG 동사입니다.
원자료의 필드는 character_id, star_base, su_input_settings, su_output_values, surface_expression, prompt_modules. 자미 예시는 중심을 고정하는 시선·지속적인 정지, 천기는 스캔과 빠른 변화, 파군은 돌파와 비틀린 긴장을 제시합니다. 이는 캐릭터 데이터 설계로 사용할 수 있지만, 이번에 확인한 짧은 HTML·JS에는 이 계산이 들어 있지 않습니다.
v2는 가중치·편향·ANS 증폭의 수식 모델을 추가하지만 전체 행렬과 실제 계산 코드가 없습니다. ANS가 입력 항목이면서 외부 증폭 계수이기도 하므로 구현 시 중복 적용 여부를 결정해야 합니다. 예시 JSON에는 설명용 문자열과 주석이 섞여 있어 완성 DB로 바로 가져오지 않습니다.
충돌과 중복 — 그대로 합치면 안 되는 것
- 신수심법 생성기는 ‘Noble man’ 같은 형용사 대신 물리적 좌표를 쓰라는 원칙을 표시합니다. 실제 V2.3은 authoritative emperor 같은 존재감 형용사를 출력합니다. 서로 다른 표현 규칙이므로 채택 기준이 필요합니다.
- 행동 이전 연구는 살성을 시선의 잔혹함 대신 긴장·각성·시간 질감으로 반영하라고 합니다. 프롬프트 전집에는 살성의 외형·위협 시선 묘사가 남아 있어 같은 규칙으로 확정할 수 없습니다.
- V2.1·V2.2·V2.3은 비슷한 UI지만 피부 모드와 출력 차이가 있습니다. 버전명만 보고 동일 자료로 삭제하거나 통합하지 않습니다.
- 연구 v4는 가사 중략 샘플, v5는 10곡의 전체 가사를 담습니다. 완전성과 버전 차이를 보존합니다.
- 별 조합기, 범용 PROMPT DIRECTOR, 신수심법 생성기, 느낌 수식 연구는 관련되지만 같은 프로그램이 아닙니다.
별도로 남아 있는 PROMPT DIRECTOR
서버의 PROMPT DIRECTOR V4.4 파일이 실제로 열립니다. 장면 설명에 ‘A calm character stands in a garden’을 입력하자 출력에 해당 문장과 품질·인체 보정 문구가 반영됐습니다. 한글 UI의 문자 깨짐은 실제 화면에 남아 있습니다. 플랫폼 전환 클릭은 브라우저 조작 오류로 검증하지 못했으므로 성공으로 기록하지 않습니다. LoRA 캐릭터 추가 UI는 있지만 학습 모델 자체의 존재나 로딩 성공을 증명하지 않습니다.
원문 코드 보관 — 세 버전 각각 보존
첫 PHP 쇼트코드 원문
자료 키: 69869a5b-ae44-83aa-bfd1-e737e049a3d9:code-1. 원대화 코드 블록 그대로이며 운영 설치본으로 판정하지 않습니다.
<?php
/**
* Shortcode: [ziwei_prompt_builder]
* Paste into WPCode (PHP snippet) or your plugin.
*/
add_shortcode('ziwei_prompt_builder', function () {
// 1) Base modes (choose ONE)
$bases = [
'ziwei' => 'calm authoritative presence, composed dominance, stabilizing the space',
'qisha' => 'dangerous predatory presence, controlled violence, decisive pressure',
'tianji' => 'analytical calculating presence, constant assessment, strategic awareness',
'tanlang'=> 'seductive expressive presence, emotional engagement, magnetic pull',
// 필요하면 계속 추가
];
// 2) Modules (choose MANY) : star combos / modifiers
$modules = [
// 자미 라인 예시
'ziwei_pojun' => 'rebellious edge, breaking established order',
'ziwei_huaquan' => 'commanding intensity, authority under tension',
'ziwei_qingyang' => 'piercing pressure, unspoken threat',
'ziwei_tianyao' => 'distant noble detachment, unreal atmosphere',
// 칠살 라인 예시
'qisha_huo' => 'explosive aggression barely restrained',
'qisha_wuqu' => 'cold ruthless efficiency',
// 천기 라인 예시
'tianji_jumen' => 'skeptical probing mindset',
// 공용/확장 예시
'soft_realism' => 'realistic human face, minimal background, no exaggeration, grounded realism',
'cinematic' => 'cinematic character portrait',
];
// 3) Always-on slots
$slot_eye = 'focused gaze reacting to the situation';
$slot_pose = 'body language aligned with the current intent';
ob_start();
?>
<div class="ziwei-prompt-builder" style="font-family:system-ui,-apple-system,Segoe UI,Roboto,'Apple SD Gothic Neo','Noto Sans KR',sans-serif; max-width:980px; padding:16px; border:1px solid #ddd; border-radius:12px;">
<h3 style="margin:0 0 10px 0;">자미두수 프롬프트 조합기</h3>
<div style="display:grid; grid-template-columns: 1fr 1fr; gap:16px;">
<div style="padding:12px; border:1px solid #eee; border-radius:10px;">
<div style="font-weight:700; margin-bottom:8px;">1) 계열 선택 (1개)</div>
<?php foreach ($bases as $k => $v): ?>
<label style="display:flex; gap:8px; align-items:flex-start; margin:8px 0; cursor:pointer;">
<input type="radio" name="zw_base" value="<?php echo esc_attr($k); ?>" <?php echo ($k==='ziwei')?'checked':''; ?> />
<span>
<div style="font-weight:600;"><?php echo esc_html($k); ?></div>
<div style="color:#666; font-size:13px;"><?php echo esc_html($v); ?></div>
</span>
</label>
<?php endforeach; ?>
</div>
<div style="padding:12px; border:1px solid #eee; border-radius:10px;">
<div style="font-weight:700; margin-bottom:8px;">2) 모듈 선택 (여러 개)</div>
<div style="display:grid; grid-template-columns: 1fr 1fr; gap:8px;">
<?php foreach ($modules as $k => $v): ?>
<label style="display:flex; gap:8px; align-items:flex-start; padding:8px; border:1px solid #f0f0f0; border-radius:10px; cursor:pointer;">
<input type="checkbox" class="zw_mod" value="<?php echo esc_attr($k); ?>" />
<span>
<div style="font-weight:600;"><?php echo esc_html($k); ?></div>
<div style="color:#666; font-size:12px;"><?php echo esc_html($v); ?></div>
</span>
</label>
<?php endforeach; ?>
</div>
<div style="margin-top:10px; color:#666; font-size:12px;">
팁: “cinematic”, “soft_realism” 같이 결과 안정화 모듈을 1~2개 포함하면 테스트가 빨라집니다.
</div>
</div>
</div>
<div style="margin-top:14px; padding:12px; border:1px solid #eee; border-radius:10px;">
<div style="font-weight:700; margin-bottom:8px;">3) 결과 프롬프트 (한 문장)</div>
<textarea id="zw_out" rows="4" style="width:100%; padding:10px; border:1px solid #ddd; border-radius:10px; font-size:14px; line-height:1.4;"></textarea>
<div style="display:flex; gap:10px; margin-top:10px; flex-wrap:wrap;">
<button type="button" id="zw_copy" style="padding:10px 12px; border:1px solid #222; background:#222; color:#fff; border-radius:10px; cursor:pointer;">복사</button>
<button type="button" id="zw_clear" style="padding:10px 12px; border:1px solid #ddd; background:#fff; color:#111; border-radius:10px; cursor:pointer;">모듈 초기화</button>
<span id="zw_status" style="color:#666; align-self:center; font-size:13px;"></span>
</div>
<div style="margin-top:10px; color:#666; font-size:12px;">
자동 포함 슬롯: <b><?php echo esc_html($slot_eye); ?></b> / <b><?php echo esc_html($slot_pose); ?></b>
</div>
</div>
</div>
<script>
(function(){
const BASES = <?php echo wp_json_encode($bases, JSON_UNESCAPED_UNICODE); ?>;
const MODS = <?php echo wp_json_encode($modules, JSON_UNESCAPED_UNICODE); ?>;
const SLOT_EYE = <?php echo wp_json_encode($slot_eye, JSON_UNESCAPED_UNICODE); ?>;
const SLOT_POSE = <?php echo wp_json_encode($slot_pose, JSON_UNESCAPED_UNICODE); ?>;
const out = document.getElementById('zw_out');
const status = document.getElementById('zw_status');
function buildPrompt(){
const baseKey = document.querySelector('input[name="zw_base"]:checked')?.value || 'ziwei';
const baseText = BASES[baseKey] || '';
const modKeys = Array.from(document.querySelectorAll('.zw_mod:checked')).map(x => x.value);
const modTexts = modKeys.map(k => MODS[k]).filter(Boolean);
// 규칙: 한 문장, 쉼표로 연결. cinematic/realism 모듈을 앞쪽에 두면 더 안정적이라 우선 정렬.
const priority = ['cinematic','soft_realism'];
modTexts.sort((a,b)=>{
const ak = modKeys[modTexts.indexOf(a)];
const bk = modKeys[modTexts.indexOf(b)];
return (priority.includes(bk)?1:0) - (priority.includes(ak)?1:0);
});
const parts = [];
// cinematic 모듈이 선택되면 base 앞에 두는 게 Grok에서 안정적
if (modKeys.includes('cinematic')) parts.push(MODS['cinematic']);
parts.push(baseText);
// 나머지 모듈(중복 제거)
const seen = new Set();
for (const t of modTexts){
if (!t || seen.has(t)) continue;
// cinematic은 이미 넣었으면 중복 방지
if (t === MODS['cinematic']) continue;
seen.add(t);
parts.push(t);
}
// always-on slots
parts.push(SLOT_EYE);
parts.push(SLOT_POSE);
// 한 문장 출력
const prompt = parts
.map(s => String(s).trim())
.filter(Boolean)
.join(', ')
.replace(/\s+/g,' ')
.trim();
out.value = prompt;
status.textContent = `계열: ${baseKey} / 모듈: ${modKeys.length}개`;
}
document.querySelectorAll('input[name="zw_base"]').forEach(el => el.addEventListener('change', buildPrompt));
document.querySelectorAll('.zw_mod').forEach(el => el.addEventListener('change', buildPrompt));
document.getElementById('zw_copy').addEventListener('click', async () => {
try{
await navigator.clipboard.writeText(out.value);
status.textContent = '복사 완료 ✅';
setTimeout(buildPrompt, 900);
}catch(e){
out.select();
document.execCommand('copy');
status.textContent = '복사 완료 ✅';
setTimeout(buildPrompt, 900);
}
});
document.getElementById('zw_clear').addEventListener('click', () => {
document.querySelectorAll('.zw_mod:checked').forEach(el => el.checked = false);
buildPrompt();
});
buildPrompt();
})();
</script>
<?php
return ob_get_clean();
});수정 PHP 원문
자료 키: 69869a5b-ae44-83aa-bfd1-e737e049a3d9:code-2. 원대화 코드 블록 그대로이며 운영 설치본으로 판정하지 않습니다.
<?php
/**
* WPCode PHP Snippet
* Shortcode: [ziwei_prompt_builder]
* JS는 wp_enqueue_scripts로 로드(본문에 <script> 삽입 안 함) → 아바다/에디터 깨짐 방지
*/
add_action('wp_enqueue_scripts', function () {
// 프론트에서만 로드
if (is_admin()) return;
// 빈 핸들 등록 후 인라인으로 JS/CSS 넣기
wp_register_script('ziwei-prompt-builder', '', [], null, true);
wp_enqueue_script('ziwei-prompt-builder');
$js = <<<JS
(function(){
function qs(sel, root){ return (root||document).querySelector(sel); }
function qsa(sel, root){ return Array.from((root||document).querySelectorAll(sel)); }
function initBuilder(root){
if(!root || root.__ziwei_inited) return;
root.__ziwei_inited = true;
const BASES = JSON.parse(root.dataset.bases || "{}");
const MODS = JSON.parse(root.dataset.mods || "{}");
const SLOT_EYE = root.dataset.slotEye || "";
const SLOT_POSE = root.dataset.slotPose || "";
const out = qs('[data-zw-out]', root);
const status = qs('[data-zw-status]', root);
function build(){
const baseKey = (qs('input[name="zw_base"]:checked', root) || {}).value || 'ziwei';
const baseText = BASES[baseKey] || '';
const modKeys = qsa('.zw_mod:checked', root).map(x => x.value);
const parts = [];
// cinematic/soft_realism 같은 안정화 모듈을 앞쪽에 두고 싶으면 여기서 우선 배치
if (modKeys.includes('cinematic') && MODS['cinematic']) parts.push(MODS['cinematic']);
parts.push(baseText);
// 나머지 모듈들
const seen = new Set();
for (const k of modKeys){
const t = MODS[k];
if(!t) continue;
if (k === 'cinematic') continue; // 이미 넣었으면 중복 방지
if(seen.has(t)) continue;
seen.add(t);
parts.push(t);
}
// 항상 포함 슬롯
if (SLOT_EYE) parts.push(SLOT_EYE);
if (SLOT_POSE) parts.push(SLOT_POSE);
const prompt = parts.map(s => String(s).trim()).filter(Boolean).join(', ').replace(/\\s+/g,' ').trim();
out.value = prompt;
status.textContent = `계열: ${baseKey} / 모듈: ${modKeys.length}개`;
}
qsa('input[name="zw_base"]', root).forEach(el => el.addEventListener('change', build));
qsa('.zw_mod', root).forEach(el => el.addEventListener('change', build));
qs('[data-zw-copy]', root).addEventListener('click', async () => {
try{
await navigator.clipboard.writeText(out.value);
status.textContent = '복사 완료 ✅';
setTimeout(build, 800);
}catch(e){
out.focus(); out.select();
document.execCommand('copy');
status.textContent = '복사 완료 ✅';
setTimeout(build, 800);
}
});
qs('[data-zw-clear]', root).addEventListener('click', () => {
qsa('.zw_mod:checked', root).forEach(el => el.checked = false);
build();
});
build();
}
// 페이지 내 여러 빌더도 지원
document.addEventListener('DOMContentLoaded', function(){
qsa('[data-ziwei-builder]').forEach(initBuilder);
});
})();
JS;
wp_add_inline_script('ziwei-prompt-builder', $js);
// 간단 CSS(원하시면 더 예쁘게 확장 가능)
$css = <<<CSS
.ziwei-wrap{font-family:system-ui,-apple-system,Segoe UI,Roboto,'Apple SD Gothic Neo','Noto Sans KR',sans-serif;max-width:980px;padding:16px;border:1px solid #ddd;border-radius:12px}
.ziwei-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.ziwei-card{padding:12px;border:1px solid #eee;border-radius:10px}
.ziwei-title{font-weight:800;margin:0 0 10px 0}
.ziwei-sub{font-weight:800;margin:0 0 8px 0}
.ziwei-opt{display:flex;gap:8px;align-items:flex-start;margin:8px 0;cursor:pointer}
.ziwei-key{font-weight:700}
.ziwei-desc{color:#666;font-size:12px}
.ziwei-modgrid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.ziwei-mod{display:flex;gap:8px;align-items:flex-start;padding:8px;border:1px solid #f0f0f0;border-radius:10px;cursor:pointer}
.ziwei-out{width:100%;padding:10px;border:1px solid #ddd;border-radius:10px;font-size:14px;line-height:1.4}
.ziwei-btn{padding:10px 12px;border-radius:10px;cursor:pointer;border:1px solid #ddd;background:#fff}
.ziwei-btn.primary{border-color:#222;background:#222;color:#fff}
.ziwei-row{display:flex;gap:10px;margin-top:10px;flex-wrap:wrap;align-items:center}
.ziwei-hint{margin-top:10px;color:#666;font-size:12px}
CSS;
wp_register_style('ziwei-prompt-builder-style', false);
wp_enqueue_style('ziwei-prompt-builder-style');
wp_add_inline_style('ziwei-prompt-builder-style', $css);
});
add_shortcode('ziwei_prompt_builder', function () {
// 1) Base modes (choose ONE)
$bases = [
'ziwei' => 'calm authoritative presence, composed dominance, stabilizing the space',
'qisha' => 'dangerous predatory presence, controlled violence, decisive pressure',
'tianji' => 'analytical calculating presence, constant assessment, strategic awareness',
'tanlang'=> 'seductive expressive presence, emotional engagement, magnetic pull',
];
// 2) Modules (choose MANY)
$modules = [
'cinematic' => 'cinematic character portrait',
'soft_realism' => 'realistic human face, minimal background, no exaggeration, grounded realism',
'ziwei_pojun' => 'rebellious edge, breaking established order',
'ziwei_huaquan' => 'commanding intensity, authority under tension',
'ziwei_qingyang' => 'piercing pressure, unspoken threat',
'ziwei_tianyao' => 'distant noble detachment, unreal atmosphere',
'qisha_huo' => 'explosive aggression barely restrained',
'qisha_wuqu' => 'cold ruthless efficiency',
'tianji_jumen' => 'skeptical probing mindset',
];
$slot_eye = 'focused gaze reacting to the situation';
$slot_pose = 'body language aligned with the current intent';
// data-*로 JSON 전달(본문 스크립트 금지)
$data_bases = esc_attr(wp_json_encode($bases, JSON_UNESCAPED_UNICODE));
$data_mods = esc_attr(wp_json_encode($modules, JSON_UNESCAPED_UNICODE));
ob_start();
?>
<div class="ziwei-wrap" data-ziwei-builder
data-bases="<?php echo $data_bases; ?>"
data-mods="<?php echo $data_mods; ?>"
data-slot-eye="<?php echo esc_attr($slot_eye); ?>"
data-slot-pose="<?php echo esc_attr($slot_pose); ?>">
<h3 class="ziwei-title">자미두수 프롬프트 조합기</h3>
<div class="ziwei-grid">
<div class="ziwei-card">
<div class="ziwei-sub">1) 계열 선택 (1개)</div>
<?php foreach ($bases as $k => $v): ?>
<label class="ziwei-opt">
<input type="radio" name="zw_base" value="<?php echo esc_attr($k); ?>" <?php echo ($k==='ziwei')?'checked':''; ?> />
<span>
<div class="ziwei-key"><?php echo esc_html($k); ?></div>
<div class="ziwei-desc"><?php echo esc_html($v); ?></div>
</span>
</label>
<?php endforeach; ?>
</div>
<div class="ziwei-card">
<div class="ziwei-sub">2) 모듈 선택 (여러 개)</div>
<div class="ziwei-modgrid">
<?php foreach ($modules as $k => $v): ?>
<label class="ziwei-mod">
<input type="checkbox" class="zw_mod" value="<?php echo esc_attr($k); ?>" />
<span>
<div class="ziwei-key"><?php echo esc_html($k); ?></div>
<div class="ziwei-desc"><?php echo esc_html($v); ?></div>
</span>
</label>
<?php endforeach; ?>
</div>
<div class="ziwei-hint">팁: cinematic / soft_realism 모듈을 1~2개 체크하면 결과가 안정화됩니다.</div>
</div>
</div>
<div class="ziwei-card" style="margin-top:14px;">
<div class="ziwei-sub">3) 결과 프롬프트 (한 문장)</div>
<textarea class="ziwei-out" data-zw-out rows="4"></textarea>
<div class="ziwei-row">
<button type="button" class="ziwei-btn primary" data-zw-copy>복사</button>
<button type="button" class="ziwei-btn" data-zw-clear>모듈 초기화</button>
<span class="ziwei-desc" data-zw-status></span>
</div>
<div class="ziwei-hint">
자동 포함 슬롯: <b><?php echo esc_html($slot_eye); ?></b> / <b><?php echo esc_html($slot_pose); ?></b>
</div>
</div>
</div>
<?php
return ob_get_clean();
});한글 HTML·JS 원문
자료 키: 69869a5b-ae44-83aa-bfd1-e737e049a3d9:code-3. 원대화 코드 블록 그대로이며 운영 설치본으로 판정하지 않습니다.
<div id="zw" style="font-family:Apple SD Gothic Neo,Noto Sans KR,sans-serif;max-width:900px;border:1px solid #ccc;padding:16px;border-radius:12px">
<h3>자미두수 캐릭 프롬프트 조합기</h3>
<h4>① 계열 선택 (1개)</h4>
<label><input type="radio" name="base" value="자미계열" checked> 자미계열(통솔·중심)</label><br>
<label><input type="radio" name="base" value="칠살계열"> 칠살계열(위협·결단)</label><br>
<label><input type="radio" name="base" value="천기계열"> 천기계열(계산·책략)</label><br>
<h4>② 옵션 선택 (여러 개)</h4>
<label><input type="checkbox" class="opt" value="파군적 반항성과 질서 파괴"> 파군</label><br>
<label><input type="checkbox" class="opt" value="화권의 권위와 압도감"> 화권</label><br>
<label><input type="checkbox" class="opt" value="경양의 압박과 날선 기운"> 경양</label><br>
<label><input type="checkbox" class="opt" value="천요의 비현실적 거리감"> 천요</label><br>
<h4>③ 결과 프롬프트 (한 문장)</h4>
<textarea id="out" rows="4" style="width:100%"></textarea><br><br>
<button onclick="copy()">복사</button>
</div>
<script>
function build(){
const base = document.querySelector('input[name="base"]:checked').value;
const opts = [...document.querySelectorAll('.opt:checked')].map(o=>o.value);
const result = [
base,
...opts,
"상황에 반응하는 집중된 시선",
"의도에 맞춰 변하는 신체 태도"
].join(", ");
document.getElementById("out").value = result;
}
document.querySelectorAll("input").forEach(i=>i.onchange=build);
build();
function copy(){
const o=document.getElementById("out");
o.select(); document.execCommand("copy");
}
</script>미확인과 다음 연결 작업
- V2.3 운영 도구의 설치 코드·WPCode ID·정확한 수정 이력과 원대화의 직접 연결은 미확인입니다. 정상 실행 사실과 코드 출처 확인을 구분합니다.
- 공개 본문이 빈 v4와 가이드 v4.4의 실제 저장 코드·미디어 연결은 관리자 자료 확인이 필요합니다.
- 원대화 앞부분의 전체 요구와 다른 후속 대화는 아직 전부 확보되지 않았습니다.
- LoRA 모델·학습 데이터·캐릭터 ID·참조 이미지·가사/영상 결과는 확인된 원자료와 매칭한 뒤 개별 문서로 연결해야 합니다.
- GPT는 이 글의 기능 분석·원문 코드·실제 생성 결과와 공개 연구 원자료를 읽고 설계에 사용할 수 있습니다. 연구 가설을 확정 코드나 사용자 최종 채택으로 바꾸지 않습니다.
이 글은 기존 코드 원문을 보존하며 개요·운영 검증·관련 자료·충돌·미확인 사항을 추가한 복원 문서입니다. 문서 식별자는 기존 글 876, 버전 v0.2입니다.
