1
pen
0post
2025.12.08 20:00
:0% :0% (30代/男性)
人気のポスト ※表示されているRP数は特定時点のものです
🚫PEN-設定用語集 | 骨綿 #pixiv
自創作の設定用語集を作りました〜
世界観などわかるはずなので本編読んでない方もぜひ🙌後々追記するかも。
https://t.co/Bt6imqmd4c December 12, 2025
2RP
わたしが今年一番聴いた曲は
#朗楽屋PENI さんの
"君へ繋ぐバトン" でした!365日聴いてる
そして
🎖️PENIさんの作品を聴いた
視聴ランキングは1位だった🙌
イケボで落ち着く声での朗読
めちゃくちゃ寝れるから
是非聴いてみてね
#わたしを支えてくれた曲
https://t.co/WZDvTlCgRI… https://t.co/Fiff0fRQD7 https://t.co/6QsttfWgJH December 12, 2025
2RP
ペンハウスさんからプレゼント企画で頂いたインクが理想の黄色インクだったので書くのが楽しいです!!インク以外も素敵なセットだったのでまた紹介させてください…!
(@pen_house )
#シンフォニー #Pent #ペント #ペンハウス https://t.co/IrtvqNcn0j December 12, 2025
Penser que le depart de Harada est une perte pour juste le monde du jeux de combat c’est etre inculte...
Harada est un monument du jeu video.
原田さん、ビデオゲームへの素晴らしい貢献に感謝します。🤜🏾💥🤛🏾 https://t.co/mtSC3WjBPP December 12, 2025
私はハンターなのか?笑
ってか、 #朗楽屋PENI の曲がトップだったのは嬉しい
店長特権?使って、仕事中も聴こうっと! https://t.co/0GJWMw4x8W December 12, 2025
Amazon限定
『Wacom MovinkPad 11(TDTHA116CL0Z)』
Android14搭載の11.45インチ軽量液タブ
バッテリーフリーのPro Pen 3とオリジナルカスタムブラシセット付きで、PC不要のお絵描き・イラスト作成に最適
588gのポータブル設計で、いつでもインスピレーションを捉えられる
https://t.co/uDXpUmUp6I December 12, 2025
@AWA_official @senchan_1107 私がAWAを使い始めて1番聴いた曲は、 #朗楽屋PENI さんの "儚夏"です😊
初めてイベントに参加し、ファミリーと燃えた、一致団結したあの思い出は、忘れられません。
儚夏を聴いてると、ここにいてよかった、PENIさんの所にいてよかった、そう思えます。 December 12, 2025
英語を勉強し始めた時(それこそThis is a penな時期)に買ってました
わりかし簡単な英単語で占められている最初の曲から聴かずに、難しめの表現が出る、有名曲の英語カバーから聴き始めたのはいい思い出 https://t.co/6UtTTqCmd6 December 12, 2025
"【新時代のジャズ】「奇才ドラマー」マカヤ・マクレイヴン新作に心酔。ヒップホップ愛好家も唸る「オーガニック・ビート」の衝撃" - Pen Online #SmartNews https://t.co/CWztWsZLRq December 12, 2025
「想い出を綴る陽光」が、幸せのヒントを照らす。
12月8日「アルバムセラピーの日」。
アルバムを見ながら感じた想いや大切な記憶を、陽だまりのような暖かさを持つ軸色が魅力のPentの万年筆「想い出を綴る陽光」で書き留めてください。
https://t.co/gS6O4oxj5l
#ペンハウス #万年筆 #想い出 https://t.co/0vlVa2LcHS December 12, 2025
🍆この術式のコードはこちら↓
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>虚式「茈」滞留ver</title>
<style>
body { margin: 0; background-color: #050505; overflow: hidden; font-family: 'Helvetica Neue', Arial, sans-serif; color: white; }
#canvas-wrapper { position: relative; width: 100vw; height: 100vh; }
canvas { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
#three-canvas { z-index: 1; }
#debug-canvas { z-index: 2; pointer-events: none; opacity: 0; transition: opacity 0.3s; }
#ui {
position: absolute; top: 30px; left: 0; width: 100%; text-align: center;
z-index: 10; pointer-events: none; text-shadow: 0 0 15px black;
display: flex; flex-direction: column; align-items: center;
}
/* タイトル装飾 */
h1 { margin: 0; font-size: 28px; font-weight: 900; letter-spacing: 1px; line-height: 1.4; }
.blue { color: #0088ff; text-shadow: 0 0 10px #0088ff; }
.red { color: #ff0055; text-shadow: 0 0 10px #ff0055; }
.purple { color: #d946ef; text-shadow: 0 0 20px #d946ef; font-size: 32px; }
.connector { color: #aaa; font-weight: normal; margin: 0 10px; }
.mode-badge {
display: inline-block; padding: 8px 20px; border-radius: 30px;
background: rgba(0,0,0,0.7); border: 2px solid #555;
margin-top: 20px; font-weight: bold; transition: all 0.3s; font-size: 14px;
}
.instruction { font-size: 14px; margin-top: 10px; color: #ccc; line-height: 1.6; }
.highlight { color: #ffdd00; font-weight: bold; }
.controls { pointer-events: auto; margin-top: 20px; opacity: 0.7; hover: opacity: 1; }
button {
background: #222; color: #aaa; border: 1px solid #444;
padding: 8px 12px; cursor: pointer; border-radius: 4px;
font-size: 12px; transition: all 0.2s;
}
button:hover { background: #444; color: white; }
https://t.co/QlmO1ChYS5 { background: #4ade80; color: black; border-color: #4ade80; }
#loading {
position: absolute; inset: 0; background: #000; z-index: 100;
display: flex; flex-direction: column;
align-items: center; justify-content: center; color: #d946ef;
}
.spinner {
width: 60px; height: 60px; border: 6px solid #333;
border-top-color: #d946ef; border-radius: 50%;
animation: spin 1s linear infinite; margin-bottom: 25px;
}
@keyframes spin { to { transform: rotate(360deg); } }
</style>
<script type="importmap">
{
"imports": {
"three": "https://t.co/WCeEpWANoG",
"three/addons/": "https://t.co/bBrbg8ZTxv",
"@mediapipe/tasks-vision": "https://t.co/i0lPucFaTA"
}
}
</script>
</head>
<body>
<div id="loading">
<div class="spinner"></div>
<div style="letter-spacing: 2px; font-weight: bold;">術式展開中...</div>
</div>
<div id="ui">
<h1>
<span class="blue">術式順転「蒼」</span><span class="connector">+</span><span class="red">術式反転「赫」</span><br>
<span class="connector">=</span><span class="purple">虚式「茈」</span>
</h1>
<div id="mode-text" class="mode-badge" style="color:#aaa; border-color:#aaa;">術式対象を探索中</div>
<div class="instruction">
<div>左右の手でサイズ操作: <span class="highlight">つまむ(小)</span> / <span class="highlight">パー(大)</span></div>
<div>両手を合わせ「茈」を生成し、<span class="highlight">両手を握って</span>発動せよ</div>
</div>
<div class="controls">
<button id="btn-debug" onclick="toggleDebug()">👁 術式開示 (SKELETON)</button>
</div>
</div>
<div id="canvas-wrapper">
<canvas id="three-canvas"></canvas>
<canvas id="debug-canvas"></canvas>
</div>
<video id="webcam" autoplay playsinline style="display:none; transform: scaleX(-1);"></video>
<script type="module">
import * as THREE from 'three';
import { FilesetResolver, HandLandmarker } from '@mediapipe/tasks-vision';
// --- 設定 (物理演算を微調整) ---
const CONFIG = {
particleCount: 40000,
smoothFactor: 0.1,
mergeDist: 3.5,
// 爆発・滞留設定
explodeForce: 2.0, // 初速 (かなり強く設定して一気に広げる)
drag: 0.95, // 摩擦係数 (1未満にすることで急減速し、滞留させる)
turbulence: 0.015, // 乱気流 (フワフワ漂う動きの強さ)
explodeDuration: 10000,// 滞留時間 (10秒)
// サイズ設定
scalePinch: 0.5,
scaleNormal: 1.0,
scaleOpen: 1.5,
scaleMerge: 2.0
};
const COLOR_LEFT = new THREE.Color('#0088ff'); // 蒼
const COLOR_RIGHT = new THREE.Color('#ff0055'); // 赫
const COLOR_MERGE = new THREE.Color('#d946ef'); // 茈
// --- グローバル変数 ---
let scene, camera, renderer, particles, geometry;
let positionsOriginal;
let velocities;
let handLandmarker;
let video = document.getElementById('webcam');
let debugCanvas = document.getElementById('debug-canvas');
let debugCtx = debugCanvas.getContext('2d');
let showDebug = false;
// --- 状態管理 ---
const targetState = {
left: { x: -10, y: 0, visible: false, pinch: false, open: false },
right: { x: 10, y: 0, visible: false, pinch: false, open: false },
isMergedTrigger: false,
centerX: 0, centerY: 0
};
const currentProps = {
leftPos: new THREE.Vector3(-10, 0, 0),
rightPos: new THREE.Vector3(10, 0, 0),
leftScale: 0,
rightScale: 0,
leftColor: new THREE.Color(),
rightColor: new THREE.Color(),
};
let appMode = 'NORMAL';
async function init() {
initThree();
await initMediaPipe();
startCamera();
animate();
}
function initThree() {
const canvas = document.getElementById('three-canvas');
scene = new THREE.Scene();
scene.fog = new THREE.FogExp2(0x050505, 0.002);
camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 0.1, 100);
camera.position.z = 14;
renderer = new THREE.WebGLRenderer({ canvas: canvas, antialias: true, alpha: true });
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setPixelRatio(window.devicePixelRatio);
positionsOriginal = new Float32Array(CONFIG.particleCount * 3);
const currentPositions = new Float32Array(CONFIG.particleCount * 3);
const colors = new Float32Array(CONFIG.particleCount * 3);
velocities = new Float32Array(CONFIG.particleCount * 3);
for (let i = 0; i < CONFIG.particleCount; i++) {
const r = 2.5;
const theta = Math.random() * Math.PI * 2;
const phi = Math.acos((Math.random() * 2) - 1);
const x = r * Math.sin(phi) * Math.cos(theta);
const y = r * Math.sin(phi) * Math.sin(theta);
const z = r * Math.cos(phi);
positionsOriginal[i * 3] = x;
positionsOriginal[i * 3 + 1] = y;
positionsOriginal[i * 3 + 2] = z;
currentPositions[i] = 999;
}
geometry = new THREE.BufferGeometry();
geometry.setAttribute('position', new THREE.BufferAttribute(currentPositions, 3));
geometry.setAttribute('color', new THREE.BufferAttribute(colors, 3));
const material = new THREE.PointsMaterial({
size: 0.08, vertexColors: true, blending: THREE.AdditiveBlending,
transparent: true, opacity: 0.8, depthWrite: false
});
particles = new THREE.Points(geometry, material);
scene.add(particles);
const handleResize = () => {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
debugCanvas.width = window.innerWidth;
debugCanvas.height = window.innerHeight;
};
window.addEventListener('resize', handleResize);
handleResize();
}
async function initMediaPipe() {
const vision = await FilesetResolver.forVisionTasks("https://t.co/NVq4WOyR3D");
handLandmarker = await HandLandmarker.createFromOptions(vision, {
baseOptions: {
modelAssetPath: `https://t.co/ioKfwnOtKQ`,
delegate: "GPU"
},
runningMode: "VIDEO",
numHands: 2
});
document.getElementById('loading').style.display = 'none';
}
function startCamera() {
navigator.mediaDevices.getUserMedia({ video: { width: 640, height: 480 } })
.then(stream => video.srcObject = stream)
.catch(e => console.error(e));
}
function animate() {
requestAnimationFrame(animate);
updateHandDetection();
updatePhysics();
renderParticles();
}
// 1. 認識
function updateHandDetection() {
targetState.left.visible = false;
targetState.right.visible = false;
if (showDebug) debugCtx.clearRect(0, 0, debugCanvas.width, debugCanvas.height);
if (handLandmarker && video.readyState >= 2) {
const results = handLandmarker.detectForVideo(video, https://t.co/ZaI4dpfAMc());
if (showDebug && results.landmarks) drawSkeleton(results.landmarks);
for (let i = 0; i < results.landmarks.length; i++) {
const lm = results.landmarks[i];
const handedness = results.handedness[i][0].categoryName;
const cx = (lm[0].x + lm[9].x) / 2;
const cy = (lm[0].y + lm[9].y) / 2;
const sx = (cx - 0.5) * -18;
const sy = (cy - 0.5) * -14;
const spread = (Math.hypot(lm[8].x-lm[0].x, lm[8].y-lm[0].y) +
Math.hypot(lm[12].x-lm[0].x, lm[12].y-lm[0].y) +
Math.hypot(lm[16].x-lm[0].x, lm[16].y-lm[0].y) +
Math.hypot(lm[20].x-lm[0].x, lm[20].y-lm[0].y)) / 4;
const isOpen = spread > 0.3;
const pinchDist = Math.hypot(lm[4].x - lm[8].x, lm[4].y - lm[8].y);
const isPinch = pinchDist < 0.05;
if (handedness === "Right") {
targetState.left.x = sx; targetState.left.y = sy;
targetState.left.visible = true;
https://t.co/TndEuU47xE = isOpen;
targetState.left.pinch = isPinch;
} else {
targetState.right.x = sx; targetState.right.y = sy;
targetState.right.visible = true;
https://t.co/ILLk78UJyX = isOpen;
targetState.right.pinch = isPinch;
}
}
if (targetState.left.visible && targetState.right.visible) {
const dist = Math.hypot(targetState.left.x - targetState.right.x, targetState.left.y - targetState.right.y);
if (dist < CONFIG.mergeDist && https://t.co/TndEuU47xE && https://t.co/ILLk78UJyX) {
targetState.isMergedTrigger = true;
targetState.centerX = (targetState.left.x + targetState.right.x) / 2;
targetState.centerY = (targetState.left.y + targetState.right.y) / 2;
} else {
targetState.isMergedTrigger = false;
}
} else {
targetState.isMergedTrigger = false;
}
}
}
// 2. 物理 & ロジック
function updatePhysics() {
const lerp = (c, t) => c + (t - c) * CONFIG.smoothFactor;
if (appMode === 'EXPLODING') {
// 爆発中
} else if (targetState.isMergedTrigger) {
appMode = 'MERGED';
} else if (appMode !== 'MERGED') {
appMode = 'NORMAL';
}
if (appMode === 'MERGED') {
if (targetState.left.visible && targetState.right.visible &&
!https://t.co/TndEuU47xE && !https://t.co/ILLk78UJyX) {
startExplosion();
}
if (!targetState.left.visible || !targetState.right.visible) {
appMode = 'NORMAL';
}
}
const badge = document.getElementById('mode-text');
if (appMode === 'MERGED') {
badge.innerText = "虚式「茈」生成完了 - 発動待機";
https://t.co/ofVtm4WHxJ.color = "#d946ef"; https://t.co/ofVtm4WHxJ.borderColor = "#d946ef"; https://t.co/ofVtm4WHxJ.boxShadow = "0 0 15px #d946ef";
} else if (appMode === 'EXPLODING') {
badge.innerText = "術式発動!!";
https://t.co/ofVtm4WHxJ.color = "#ffdd00"; https://t.co/ofVtm4WHxJ.borderColor = "#ffdd00"; https://t.co/ofVtm4WHxJ.boxShadow = "0 0 25px #ffdd00";
} else {
badge.innerText = "術式対象を探索中";
https://t.co/ofVtm4WHxJ.color = "#aaa"; https://t.co/ofVtm4WHxJ.borderColor = "#555"; https://t.co/ofVtm4WHxJ.boxShadow = "none";
}
if (appMode !== 'EXPLODING') {
currentProps.leftPos.x = lerp(currentProps.leftPos.x, targetState.left.x);
currentProps.leftPos.y = lerp(currentProps.leftPos.y, targetState.left.y);
currentProps.rightPos.x = lerp(currentProps.rightPos.x, targetState.right.x);
currentProps.rightPos.y = lerp(currentProps.rightPos.y, targetState.right.y);
let tScaleL = 0;
if (targetState.left.visible) {
if (targetState.left.pinch) tScaleL = CONFIG.scalePinch;
else if (https://t.co/TndEuU47xE) tScaleL = CONFIG.scaleOpen;
else tScaleL = CONFIG.scaleNormal;
}
currentProps.leftScale = lerp(currentProps.leftScale, tScaleL);
let tScaleR = 0;
if (targetState.right.visible) {
if (targetState.right.pinch) tScaleR = CONFIG.scalePinch;
else if (https://t.co/ILLk78UJyX) tScaleR = CONFIG.scaleOpen;
else tScaleR = CONFIG.scaleNormal;
}
currentProps.rightScale = lerp(currentProps.rightScale, tScaleR);
currentProps.leftColor.lerp(COLOR_LEFT, 0.1);
currentProps.rightColor.lerp(COLOR_RIGHT, 0.1);
}
if (appMode === 'MERGED') {
currentProps.leftPos.x = lerp(currentProps.leftPos.x, targetState.centerX);
currentProps.leftPos.y = lerp(currentProps.leftPos.y, targetState.centerY);
currentProps.rightPos.x = lerp(currentProps.rightPos.x, targetState.centerX);
currentProps.rightPos.y = lerp(currentProps.rightPos.y, targetState.centerY);
currentProps.leftColor.lerp(COLOR_MERGE, 0.15);
currentProps.rightColor.lerp(COLOR_MERGE, 0.15);
currentProps.leftScale = lerp(currentProps.leftScale, CONFIG.scaleMerge);
currentProps.rightScale = lerp(currentProps.rightScale, CONFIG.scaleMerge);
}
}
function startExplosion() {
appMode = 'EXPLODING';
for(let i=0; i<CONFIG.particleCount; i++) {
const ix = i*3;
// 初速を強力に(画面全体に広げるため)
const vx = (Math.random() - 0.5) * CONFIG.explodeForce * 5;
const vy = (Math.random() - 0.5) * CONFIG.explodeForce * 5;
const vz = (Math.random() - 0.5) * CONFIG.explodeForce * 2 + 1.0;
velocities[ix] = vx; velocities[ix+1] = vy; velocities[ix+2] = vz;
}
setTimeout(() => { appMode = 'NORMAL'; }, CONFIG.explodeDuration);
}
// 3. 描画
function renderParticles() {
const positions = geometry.attributes.position.array;
const colors = geometry.attributes.color.array;
const time = https://t.co/qYkMP6pVyL() * 0.0015;
const half = CONFIG.particleCount / 2;
for (let i = 0; i < CONFIG.particleCount; i++) {
const ix = i * 3;
if (appMode === 'EXPLODING') {
// --- 爆発物理 (滞留ver) ---
positions[ix] += velocities[ix];
positions[ix+1] += velocities[ix+1];
positions[ix+2] += velocities[ix+2];
// 摩擦で減速させる(これが滞留の鍵)
velocities[ix] *= CONFIG.drag;
velocities[ix+1] *= CONFIG.drag;
velocities[ix+2] *= CONFIG.drag;
// 乱気流(フワフワさせる)
velocities[ix] += (Math.random() - 0.5) * CONFIG.turbulence;
velocities[ix+1] += (Math.random() - 0.5) * CONFIG.turbulence;
velocities[ix+2] += (Math.random() - 0.5) * CONFIG.turbulence;
continue;
}
// 通常時
const ox = positionsOriginal[ix];
const oy = positionsOriginal[ix+1];
const oz = positionsOriginal[ix+2];
const isLeft = i < half;
let tx, ty, tz, r, g, b;
if (isLeft) {
const s = currentProps.leftScale;
const rx = ox * Math.cos(time) - oz * Math.sin(time);
const rz = ox * Math.sin(time) + oz * Math.cos(time);
tx = rx * s + currentProps.leftPos.x;
ty = oy * s + currentProps.leftPos.y;
tz = rz * s;
r=currentProps.leftColor.r; g=currentProps.leftColor.g; b=currentProps.leftColor.b;
} else {
const s = currentProps.rightScale;
const rx = ox * Math.cos(-time) - oz * Math.sin(-time);
const rz = ox * Math.sin(-time) + oz * Math.cos(-time);
tx = rx * s + currentProps.rightPos.x;
ty = oy * s + currentProps.rightPos.y;
tz = rz * s;
r=currentProps.rightColor.r; g=currentProps.rightColor.g; b=currentProps.rightColor.b;
}
if (appMode === 'MERGED') {
const vib = 0.2;
tx += (Math.random()-0.5)*vib;
ty += (Math.random()-0.5)*vib;
tz += (Math.random()-0.5)*vib;
if(Math.random()>0.90) { r=1; g=1; b=1; }
}
positions[ix] = tx; positions[ix+1] = ty; positions[ix+2] = tz;
colors[ix] = r; colors[ix+1] = g; colors[ix+2] = b;
}
geometry.attributes.position.needsUpdate = true;
geometry.attributes.color.needsUpdate = true;
renderer.render(scene, camera);
}
function drawSkeleton(hands) {
debugCtx.lineWidth = 3; debugCtx.strokeStyle = "#4ade80"; debugCtx.shadowBlur = 10; debugCtx.shadowColor = "#4ade80";
const connections = [[0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[17,18],[18,19],[19,20],[0,17]];
hands.forEach(lm => {
debugCtx.beginPath();
connections.forEach(([i, j]) => {
debugCtx.moveTo((1-lm[i].x)*debugCanvas.width, lm[i].y*debugCanvas.height);
debugCtx.lineTo((1-lm[j].x)*debugCanvas.width, lm[j].y*debugCanvas.height);
});
debugCtx.stroke();
});
}
window.toggleDebug = () => {
showDebug = !showDebug;
const btn = document.getElementById('btn-debug');
if (showDebug) {
https://t.co/KjKnJymgIy.opacity = 0.6; btn.classList.add('active');
} else {
https://t.co/KjKnJymgIy.opacity = 0; btn.classList.remove('active');
}
};
init();
</script>
</body>
</html>
おまけ🎁
会社員をしながら合計9,163,797円を稼いだ僕が、
これからAI事業でマネタイズしたい人に向けて、
1本の極秘ノウハウ動画を公開しました。
また、今回はAIで累計3億円以上マネタイズしている
某アカウントの方とコラボ動画になっております。
この動画を72時間限定で配布します。
動画を見て頂いた方には総計165個の豪華プレゼントをご用意しています!
0円で見たい方はこちら↓
https://t.co/YhGwTY47ts December 12, 2025
<ポストの表示について>
本サイトではXの利用規約に沿ってポストを表示させていただいております。ポストの非表示を希望される方はこちらのお問い合わせフォームまでご連絡下さい。こちらのデータはAPIでも販売しております。



