캐릭터 멀티 조합기 V2.2 — 사화 연기 출력·32항목 데이터·운영 코드 원문

개요와 게임기획서에서의 위치

별 조합을 캐릭터의 존재감·시선·자세 지시문으로 변환하는 마가삼 운영 도구입니다. 게임기획서의 플레이어와 캐릭터, 아트·음악·영상, 기술·개발 영역에서 표현 출력 계층의 근거로 사용할 수 있습니다. 게임 상태 계산이나 명반 산출 엔진은 별도로 필요합니다. 이 글은 독립 원자료와 실행 결과를 보존한 조사 자료이며 최종 기획 확정은 아닙니다.

원출처와 확인 범위

(재마너아) 프롬프트 자미두수 성질특성별 분석 v2 캐릭 잘나옴. 2026-10-04 공개 화면의 본문, 페이지에 포함된 JavaScript 전체, 실제 출력·성별 전환·리셋을 직접 확인했습니다. 제목의 v2와 도구 화면의 V2.2 Professional은 구분합니다. 원대화 전체, 최초 작성자·게시 시각·설치 스니펫 ID는 이번 조사에서 확인하지 않았습니다. 출처 제목만으로 특정 AI 작성임을 확정하지 않습니다.

확인된 데이터와 동작

14주성, 보좌·길성 8개, 살성 6개, 사화 4개로 총 32항목입니다. 주성에는 남녀별 존재감 문자열이 있으며 시선·자세는 공통입니다. 나머지 항목은 공통 존재감·시선·자세를 보유합니다. selected는 Set으로 선택 ID를 저장하고, 각 항목의 문자열을 모아 중복 문자열을 Set으로 제거한 뒤 결합합니다. Grok와 Midjourney 두 출력이며 이미지·영상 생성 API는 없습니다.

원문 소개의 ‘수치적으로 결합’은 실제 코드와 구분해야 합니다. 확인 코드에는 가중치·수치 상태·상호작용 행렬이 없고 문자열을 연결합니다. ‘가장 사실적인’이라는 소개도 품질 검증 결과가 아닙니다.

실제 실행 결과

자미→파군→화권 순서로 선택해 남성 출력을 얻고, 여성으로 바꾼 뒤 전체 리셋을 확인했습니다. 사화의 존재감뿐 아니라 시선·자세도 두 플랫폼 출력에 포함됩니다. 리셋 후 출력 두 개는 빈 값입니다. 복사 버튼·외부 이미지 생성은 이번에 시험하지 않았습니다.

남성 output-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, natural skin texture, 8k, grounded realism

남성 output-mj

Portrait of a Male Korean adult, 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, hyper-realistic facial details, 85mm lens, soft cinematic lighting, --ar 4:5 --v 6.1

여성 output-grok

[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, natural skin texture, 8k, grounded realism

여성 output-mj

Portrait of a Female Korean adult, embodying 자미 & 파군 & 화권 Stars, elegant empress dignity, bold rule-breaker, dominant power, direct judge-like gaze + unstable disruptive gaze + dominating sharp gaze, perfectly upright stillness + dynamic asymmetric pose + commanding firm stance, hyper-realistic facial details, 85mm lens, soft cinematic lighting, --ar 4:5 --v 6.1

관련 자료와 중복·차이

조합기 운영·계보 복원의 V2.3과 같은 표현 조합 계열입니다. 새 게임 시스템으로 중복 계산하지 않고 버전별 근거로 연결합니다. V2.2는 natural skin texture·8k 및 hyper-realistic facial details를 고정 출력합니다. V2.3의 피부 디테일 모드와 같은 UI는 이 화면에서 확인되지 않았습니다. 수(受) 기반 상태 연구의 입력10→느낌5 계산안과 동일 구현이 아닙니다.

사용자 확정·제안·거부·미확인

사용자 확정: 관련 작업을 추적하고 실제 원문·코드·분석을 독립 글로 보존하라는 현재 작업 지시입니다. 과거 V2.2의 별별 표현 문자열과 기획 규칙에 대한 사용자 채택 원문은 이번 공개 글에서 확보하지 못했습니다. AI 제안: 구체적인 원대화 제안 주체는 미확인입니다. 운영 코드의 표현 사전과 원문 소개를 사용자 확정 이론으로 승격하지 않습니다. 거부·폐기: 이 버전의 직접 거부·폐기 발언은 미확보이며, 이전 대화의 코드 실패가 이 운영본 폐기를 의미하지 않습니다.

게임 적용 분석(Sol 제안): 게임에서 계산된 성향·상황 상태를 표현 ID로 변환하는 연결부를 두고 존재감/시선/자세 프롬프트를 내보내는 후보입니다. 현재 코드만으로는 perfectly upright stillness와 dynamic asymmetric pose 같은 상충 지시의 우선순위가 결정되지 않습니다. 선택 순서에 따라 출력 순서가 바뀌므로 정렬·가중치·충돌 해결 규칙을 기획에서 별도로 결정해야 합니다. 학습 LoRA, 얼굴 일관성, 플레이 연결, 실제 영상 품질은 미확인입니다.

공개 화면 원문

Your Content Goes Here
자미두수 캐릭터 멀티-조합기 V2.2 Professional

14주성, 길살성, 사화의 음양을 즉시 조합합니다. '동궁(同宮)'하는 별들의 데이터를 수치적으로 결합하여 가장 사실적인 연기 지시문을 생성합니다.

남성(陽)
여성(陰)
14주성 (기본 기질/배우 캐스팅)
자미
천기
태양
무곡
천동
염정
천부
태음
탐랑
거문
천상
천량
칠살
파군
길성 및 보좌성 (녹존, 천마, 문창/문곡 등)
좌보
우필
천괴
천월
문창
문곡
녹존
천마
살성 및 장애성 (긴장도 및 파괴적 연기)
경양
타라
화성
영성
지공
지겁
사화 (상태의 극적인 변화)
화록
화권
화과
화기
조합 리스트
전체 리셋

명반의 별들을 클릭하세요.

GROK (영상/연기 BIG3)
복사
MIDJOURNEY (이미지 캐스팅)
복사
Leave A Comment
Comment

Save my name, email, and website in this browser for the next time I comment.

운영 JavaScript 원문 전체

페이지의 data:text/javascript;base64 스크립트를 디코딩해 원문 그대로 보존했습니다. 아래 코드는 보관용으로 표시하며 이 글에서 실행하지 않습니다.

    const starsData = {
        main: [
            { id: 'ziwei', name: '자미', male: 'calm authoritative emperor', female: 'elegant empress dignity', eye: 'direct judge-like gaze', posture: 'perfectly upright stillness' },
            { id: 'tianji', name: '천기', male: 'intellectual strategist', female: 'clever agile counselor', eye: 'sharp scanning observant eyes', posture: 'quick responsive posture' },
            { id: 'taiyang', name: '태양', male: 'heroic righteous leader', female: 'radiant confident queen', eye: 'bright open passionate eyes', posture: 'open-handed bold stance' },
            { id: 'wuqu', name: '무곡', male: 'stern practical warrior', female: 'capable disciplined manager', eye: 'cold focused metallic gaze', posture: 'rigid disciplined posture' },
            { id: 'tiandong', name: '천동', male: 'warm benevolent scholar', female: 'lovely pure soul', eye: 'soft smiling gentle eyes', posture: 'relaxed comfortable stance' },
            { id: 'lianzhen', name: '염정', male: 'disciplined seductive officer', female: 'sophisticated mysterious lady', eye: 'intense gaze with secrets', posture: 'sleek controlled posture' },
            { id: 'tianfu', name: '천부', male: 'stable generous lord', female: 'graceful stable matriarch', eye: 'relaxed deep calm eyes', posture: 'solid grounded posture' },
            { id: 'taiyin', name: '태음', male: 'sensitive moonlike artist', female: 'mysterious moon goddess', eye: 'dewy soft reflective gaze', posture: 'graceful slender stance' },
            { id: 'tanlang', name: '탐랑', male: 'magnetic charismatic entertainer', female: 'glamorous alluring temptress', eye: 'magnetic assertive gaze', posture: 'dynamic seductive pose' },
            { id: 'jumen', name: '거문', male: 'skeptical sharp critic', female: 'logical articulate observer', eye: 'probing analytical eyes', posture: 'guarded closed posture' },
            { id: 'tianxiang', name: '천상', male: 'refined diplomatic official', female: 'poised elegant diplomat', eye: 'balanced polite gaze', posture: 'formal aligned stance' },
            { id: 'tianliang', name: '천량', male: 'wise guardian mentor', female: 'mature protective sister', eye: 'watchful benevolent eyes', posture: 'stable upright posture' },
            { id: 'qisha', name: '칠살', male: 'fierce commander', female: 'lethal female general', eye: 'sharp piercing killing intent', posture: 'tense body ready to strike' },
            { id: 'pojun', name: '파군', male: 'rebellious innovator', female: 'bold rule-breaker', eye: 'unstable disruptive gaze', posture: 'dynamic asymmetric pose' }
        ],
        lucky: [
            { id: 'zuofu', name: '좌보', presence: 'supportive reliable aid', eye: 'steady helpful gaze', posture: 'leaning in to assist' },
            { id: 'youbi', name: '우필', presence: 'flexible clever helper', eye: 'witty resourceful eyes', posture: 'agile and adaptable stance' },
            { id: 'tiankui', name: '천괴', presence: 'noble elder influence', eye: 'guiding authoritative gaze', posture: 'tall dignified presence' },
            { id: 'tianyue', name: '천월', presence: 'secret benefactor aura', eye: 'gentle protective gaze', posture: 'quiet supportive posture' },
            { id: 'wenchang', name: '문창', presence: 'scholarly literary grace', eye: 'refined artistic eyes', posture: 'graceful and poised' },
            { id: 'wenqu', name: '문곡', presence: 'eloquent creative flair', eye: 'sparkling intelligent gaze', posture: 'expressive and rhythmic body' },
            { id: 'nokjon', name: '녹존', presence: 'prosperous stable abundance', eye: 'heavy satisfied gaze', posture: 'solid and unshakeable' },
            { id: 'cheonma', name: '천마', presence: 'active restless mobility', eye: 'quick moving eyes', posture: 'leaning forward for motion' }
        ],
        cruel: [
            { id: 'qingyang', name: '경양', presence: 'sharp metallic tension', eye: 'piercing blade-like gaze', posture: 'aggressive forward-leaning' },
            { id: 'tuoluo', name: '타라', presence: 'heavy dragging shadow', eye: 'stubborn lingering gaze', posture: 'stagnant and weighted' },
            { id: 'huoxing', name: '화성', presence: 'blazing sudden temper', eye: 'flaming intense eyes', posture: 'explosive energy' },
            { id: 'lingxing', name: '영성', presence: 'chilling silent vibration', eye: 'cold ringing gaze', posture: 'hidden internal tension' },
            { id: 'digong', name: '지공', presence: 'hollow spectral void', eye: 'empty detached gaze', posture: 'weightless floating feel' },
            { id: 'dijie', name: '지겁', presence: 'shattered energy aura', eye: 'unpredictable broken gaze', posture: 'fractured and unstable' }
        ],
        trans: [
            { id: 'hualu', name: '화록', presence: 'flourishing prosperity', eye: 'bright hopeful gaze', posture: 'relaxed abundant stance' },
            { id: 'huaquan', name: '화권', presence: 'dominant power', eye: 'dominating sharp gaze', posture: 'commanding firm stance' },
            { id: 'huake', name: '화과', presence: 'honorable fame', eye: 'clear honorable gaze', posture: 'elegant refined stance' },
            { id: 'huaji', name: '화기', presence: 'dark obsession', eye: 'fixated deep gaze', posture: 'stiff tensed posture' }
        ]
    };

    let state = {
        gender: 'Male',
        selected: new Set()
    };

    function renderOptions() {
        const renderSet = (containerId, data) => {
            const container = document.getElementById(containerId);
            container.innerHTML = data.map(star => `
                <div class="relative">
                    <input type="checkbox" id="${star.id}" class="star-checkbox hidden" 
                           onchange="toggleStar('${star.id}')" ${state.selected.has(star.id) ? 'checked' : ''}>
                    <label for="${star.id}" class="star-label block p-2.5 border border-slate-200 rounded-xl text-center cursor-pointer text-[11px] font-bold transition-all hover:bg-slate-50 select-none">
                        ${star.name}
                    </label>
                </div>
            `).join('');
        };

        renderSet('main-container', starsData.main);
        renderSet('lucky-container', starsData.lucky);
        renderSet('cruel-container', starsData.cruel);
        renderSet('trans-container', starsData.trans);
    }

    function toggleStar(starId) {
        if (state.selected.has(starId)) state.selected.delete(starId);
        else state.selected.add(starId);
        updateUI();
    }

    function setGender(g) {
        state.gender = g;
        const maleBtn = document.getElementById('gen-male');
        const femaleBtn = document.getElementById('gen-female');
        if (g === 'Male') {
            maleBtn.className = 'px-8 py-2.5 rounded-xl font-bold transition-all bg-indigo-600 text-white shadow-lg border-none';
            femaleBtn.className = 'px-8 py-2.5 rounded-xl font-bold transition-all text-slate-400 border-none hover:text-white';
        } else {
            femaleBtn.className = 'px-8 py-2.5 rounded-xl font-bold transition-all bg-pink-600 text-white shadow-lg border-none';
            maleBtn.className = 'px-8 py-2.5 rounded-xl font-bold transition-all text-slate-400 border-none hover:text-white';
        }
        updateUI();
    }

    function resetAll() {
        state.selected.clear();
        document.querySelectorAll('.star-checkbox').forEach(cb => cb.checked = false);
        updateUI();
    }

    function updateUI() {
        renderSelectedChips();
        generatePrompts();
    }

    function renderSelectedChips() {
        const container = document.getElementById('selected-list');
        if (state.selected.size === 0) {
            container.innerHTML = '<p class="text-slate-400 text-xs italic">명반의 별들을 클릭하세요.</p>';
            return;
        }
        const allStars = [...starsData.main, ...starsData.lucky, ...starsData.cruel, ...starsData.trans];
        container.innerHTML = Array.from(state.selected).map(id => {
            const star = allStars.find(s => s.id === id);
            return `<span class="bg-slate-800 text-white text-[10px] px-2.5 py-1 rounded-lg flex items-center gap-1.5 animate-in fade-in zoom-in duration-200">
                ${star.name} <button onclick="toggleStar('${id}')" class="bg-transparent border-none text-white hover:text-red-400 cursor-pointer p-0 leading-none">×</button>
            </span>`;
        }).join('');
    }

    function generatePrompts() {
        const grokArea = document.getElementById('output-grok');
        const mjArea = document.getElementById('output-mj');

        if (state.selected.size === 0) {
            grokArea.value = "";
            mjArea.value = "";
            return;
        }

        let presences = [], eyes = [], postures = [], names = [];
        const genderKey = state.gender.toLowerCase();
        const allStars = [...starsData.main, ...starsData.lucky, ...starsData.cruel, ...starsData.trans];

        state.selected.forEach(id => {
            const s = allStars.find(x => x.id === id);
            if (!s) return;
            names.push(s.name);
            
            if (s[genderKey]) presences.push(s[genderKey]);
            else if (s.presence) presences.push(s.presence);
            
            if (s.eye) eyes.push(s.eye);
            if (s.posture) postures.push(s.posture);
        });

        const combinedPresence = [...new Set(presences)].join(", ");
        const combinedEyes = [...new Set(eyes)].join(" + ");
        const combinedPostures = [...new Set(postures)].join(" + ");

        const grokOutput = `[Scene: ${state.gender} | Identity: ${names.join("+")}]
Presence: ${combinedPresence}
Eyes: ${combinedEyes}
Posture: ${combinedPostures}
Field: cinematic realistic portrait, natural skin texture, 8k, grounded realism`;

        const mjOutput = `Portrait of a ${state.gender} Korean adult, embodying ${names.join(" & ")} Stars, ${combinedPresence}, ${combinedEyes}, ${combinedPostures}, hyper-realistic facial details, 85mm lens, soft cinematic lighting, --ar 4:5 --v 6.1`;

        grokArea.value = grokOutput;
        mjArea.value = mjOutput;
    }

    function copyToClipboard(id) {
        const text = document.getElementById(id).value;
        if (!text) return;
        
        const tempElem = document.createElement('textarea');
        tempElem.value = text;
        document.body.appendChild(tempElem);
        tempElem.select();
        document.execCommand('copy');
        document.body.removeChild(tempElem);

        const btn = document.querySelector(`button[onclick="copyToClipboard('${id}')"]`);
        const originalText = btn.innerText;
        btn.innerText = "복사됨!";
        btn.className = "text-[10px] bg-indigo-600 text-white px-3 py-1.5 rounded-lg border-none cursor-pointer animate-pulse";
        setTimeout(() => {
            btn.innerText = originalText;
            btn.className = "text-[10px] bg-slate-900 text-white px-3 py-1.5 rounded-lg hover:bg-indigo-600 transition-colors border-none cursor-pointer";
        }, 1200);
    }

    window.onload = renderOptions;

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다