まずレオナルドaiでアバター画像を作る

その後、D IDでリップシンク動画を作る
随机应变 ABCD: Always Be Coding and … : хороший
まずレオナルドaiでアバター画像を作る

その後、D IDでリップシンク動画を作る
import os
from openai import OpenAI
from dotenv import load_dotenv
load_dotenv()
# クライアント作成
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# 2. 画像生成のリクエスト
response = client.images.generate(
model="dall-e-3",
prompt="サイバーパンクな都市を歩く柴犬",
n=1,
size="1024x1024"
)
# 3. 生成された画像のURLを表示
print(response.data[0].url)

geminiも同じようなことができる
import os
from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO
# 1. クライアントの初期化(APIキーを入力)
# client = genai.configure(api_key=os.getenv("GEMINI_API_KEY"))
client = genai.Client(api_key=os.getenv("GEMINI_API_KEY"))
# 2. 画像生成のリクエスト(Imagen 3モデルを使用)
response = client.models.generate_images(
model='imagen-4.0-generate-001',
prompt='サイバーパンクな都市を歩く柴犬',
config=types.GenerateImagesConfig(
number_of_images=1,
)
)
# 3. 生成された画像を表示・保存
for generated_image in response.generated_images:
# バイトデータから画像を開く
image = Image.open(BytesIO(generated_image.image.image_bytes))
image.show() # 標準のフォトビューアーで開く
# image.save("result.png") # ファイルとして保存する場合
### プロンプト
シンプルな「日英翻訳アプリ」を作成してください。
このアプリは、外部の翻訳APIは使用せず、内部に持たせた簡単な辞書データで翻訳処理を代替します。
### 1. 辞書データ(必須)
以下のデータを持ったオブジェクトまたは配列をコンポーネント内に定義してください。
* **日本語:** ‘こんにちは’ → **英語:** ‘Hello’
* **日本語:** ‘ありがとう’ → **英語:** ‘Thank you’
* **日本語:** ‘さようなら’ → **英語:** ‘Goodbye’
* **日本語:** ‘はい’ → **英語:** ‘Yes’
* **日本語:** ‘いいえ’ → **英語:** ‘No’
### 2. UI/機能要件(必須)
1つの画面(App.jsのみで完結)に以下の要素を配置してください。
* **入力エリア:** ユーザーが日本語の単語を入力できる `
* **翻訳ボタン:** 「翻訳する」というテキストのボタン。
* **結果表示:** 翻訳結果(英語)を表示する `
### 3. 処理ロジック
1. ユーザーが入力エリアに日本語を入力し、「翻訳する」ボタンを押します。
2. 入力された日本語が、辞書データ内に存在するかチェックします。
3. 存在する場合、対応する英語を結果表示エリアに表示します。
4. 辞書データに存在しない単語が入力された場合、「辞書に単語がありません」というメッセージを表示してください。

ここまで来たか… oh my goodness
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Three.js glTF アバターデモ (最終サイズ調整版)</title>
<style>
body { margin: 0; overflow: hidden; background-color: #f0f0f0; }
canvas { display: block; }
</style>
<script src="https://unpkg.com/three@0.137.0/build/three.min.js"></script>
<script src="https://unpkg.com/three@0.137.0/examples/js/loaders/GLTFLoader.js"></script>
<script src="https://unpkg.com/three@0.137.0/examples/js/controls/OrbitControls.js"></script>
</head>
<body>
<script>
// ==========================================================
// 1. シーン、カメラ、レンダラーのセットアップ
// ==========================================================
const scene = new THREE.Scene();
// カメラのクリッピング範囲を広げる (near=0.001, far=10000)
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.001, 10000);
const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setPixelRatio(window.devicePixelRatio);
renderer.outputEncoding = THREE.sRGBEncoding;
renderer.toneMapping = THREE.ACESFilmicToneMapping;
renderer.setClearColor(0xcccccc, 1);
document.body.appendChild(renderer.domElement);
// ==========================================================
// 2. ライトのセットアップ
// ==========================================================
const ambientLight = new THREE.AmbientLight(0xffffff, 2.0);
scene.add(ambientLight);
const directionalLight = new THREE.DirectionalLight(0xffffff, 1.0);
directionalLight.position.set(5, 10, 5);
scene.add(directionalLight);
const pointLight = new THREE.PointLight(0xffffff, 3.0);
pointLight.position.set(0, 3, 0);
scene.add(pointLight);
// ==========================================================
// 3. GLTFLoaderとアニメーションミキサーのセットアップ
// ==========================================================
const loader = new THREE.GLTFLoader();
let mixer;
const clock = new THREE.Clock();
// ==========================================================
// 4. モデルの読み込み
// ==========================================================
const MODEL_PATH = './ellen_joe_oncampus/scene.gltf';
loader.load(
MODEL_PATH,
function (gltf) {
const model = gltf.scene;
scene.add(model);
// 【最終修正点】モデルを 50倍に拡大し、適切なサイズで表示
model.scale.set(50, 50, 50);
// モデルの位置を強制的に原点 (0, 0, 0) に設定
model.position.set(0, 0, 0);
// アニメーションデータの処理
if (gltf.animations && gltf.animations.length > 0) {
mixer = new THREE.AnimationMixer(model);
const action = mixer.clipAction(gltf.animations[0]);
action.play();
} else {
console.log('モデルにアニメーションデータが見つかりませんでした。静止画として表示します。');
}
},
function (xhr) {
console.log('モデル読み込み中: ' + (xhr.loaded / xhr.total * 100).toFixed(2) + '%');
},
function (error) {
console.error('モデルの読み込み中にエラーが発生しました。', error);
}
);
// ==========================================================
// 5. カメラとコントロールの設定
// ==========================================================
// 【最終修正点】50倍スケールに合わせてカメラを遠ざけ、全体が見えるように調整
camera.position.set(0, 5, 10);
const controls = new THREE.OrbitControls(camera, renderer.domElement);
// 【最終修正点】注視点をモデルの中心 (Y=5m) に設定
controls.target.set(0, 5, 0);
controls.update();
// ==========================================================
// 6. アニメーションループ (毎フレームの更新処理)
// ==========================================================
function animate() {
requestAnimationFrame(animate);
const delta = clock.getDelta();
if (mixer) {
mixer.update(delta);
}
controls.update();
renderer.render(scene, camera);
}
animate();
// 画面サイズ変更時の対応
window.addEventListener('resize', () => {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
});
</script>
</body>
</html>

struct ChatMessage: Identifiable {
let id = UUID()
let text: String
let isMe: Bool
let avatar: String // 画像名(URLの場合もOK)
}
struct ChatRow: View {
let message: ChatMessage
var body: some View {
HStack(alignment: .bottom, spacing: 10) {
// 左側に相手のアバター
if !message.isMe {
avatarView
}
// メッセージバブル
Text(message.text)
.padding()
.background(message.isMe ? Color.blue : Color.gray.opacity(0.2))
.foregroundColor(message.isMe ? .white : .black)
.cornerRadius(12)
// 右側に自分のアバター
if message.isMe {
avatarView
}
}
.padding(.horizontal)
}
// アバター
private var avatarView: some View {
Image(message.avatar)
.resizable()
.scaledToFill()
.frame(width: 40, height: 40)
.clipShape(Circle())
}
}
struct ChatView: View {
let messages = [
ChatMessage(text: "こんにちは!", isMe: false, avatar: "avatar1"),
ChatMessage(text: "こんにちは〜!", isMe: true, avatar: "myAvatar"),
ChatMessage(text: "調子どう?", isMe: false, avatar: "avatar1")
]
var body: some View {
ScrollView {
VStack(spacing: 12) {
ForEach(messages) { msg in
ChatRow(message: msg)
}
}
}
}
}
Smashing Magazine は Web デザイン/フロントエンド関連で最も歴史があり影響力のある専門オンラインメディアの1つ です。
UI/UX、HTML/CSS、アクセシビリティ、デザインシステム、フロントエンド実装までカバーした“実務者向け”の知識が揃います。
UX Collective が「読みやすいUXマガジン」なら
Smashing Magazine は “本格的・プロ志向” のデザイン/実装メディア です。
🔷 Smashing Magazine とは?
創刊:2006年
Webデザイナー、UIデザイナー、フロントエンド開発者向け
デザイン × 技術 の交差点を深く掘り下げる
世界中の専門家が寄稿
実務レベルのナレッジが大量にある
🔶 どんな記事が多い?
他のメディアより 技術的・専門的 です。
▼ 主なカテゴリ
UI/UX デザイン
アクセシビリティ(WCAG)
レスポンシブデザイン
デザインシステム
CSS レイアウト(Grid, Flexbox)
フロントエンド(React, Next.js など)
UX リサーチ
モーションデザイン
パフォーマンス最適化
▼ 教科書級の人気記事例
Responsive Web Design Patterns
Color Contrast Best Practices
UI Components: Design + Code Examples
Creating Accessible Interfaces
Design System Essentials
UX Collective より文章量が多く、より体系的・プロフェッショナル寄り。
🔶 デザインを学ぶ上で Smashing Magazine は重要?
結論:実務レベルで UI/UX をやるなら非常に重要(特にフロント寄り)。
▼ なぜ重要か?
UIの見た目だけではなく「実装可能な設計」を学べる
→ デザインとコーディングのギャップを埋める記事が多い。
アクセシビリティやレスポンシブの正しい方法を学べる
→ 開発現場で求められる“本物のUI設計”の知識。
デザインシステム(Figma + コード)の総合的知識が得られる
→ フロント実装+UI構造+Figma運用を連携して解説。
NN/g(ニールセンノーマン)より技術寄りで実践的
→ Webプロダクトの実装との相性がよい。
🔶 UX Collective と Smashing Magazine の違い
項目 UX Collective Smashing Magazine
難易度 初級〜中級 中級〜上級
傾向 UX・UIの読み物 デザイン+実装+システム
スタイル 読みやすくライト 専門的で体系的
学べる範囲 体験デザインやUI改善 レスポンシブ、実装、デザインシステム
向いている人 まずUXを理解したい人 UIをコードとつなぐ実務者
あなたのように
開発現場でFigmaを扱いつつ、UI/UX を本格的に学びたいエンジニア寄りの方
には Smashing Magazine はかなり相性がよいです。
🔷 どう使うべき?
もし今後こういうレベルを目指すなら確実に役立ちます:
デザインシステムを構築したい
フロントとFigmaの連携をよくしたい
アクセシビリティに強くなりたい
UIの「正しい構造」「正しい余白」「レスポンシブ基礎」を知りたい
コンポーネントをコード側でどう実装するかを理解したい
🔶 学習の進め方(超シンプル版)
Smashing の記事は長いので、次の順序で読むと効率的:
① Layout(グリッド・レスポンシブ)
② Color & Accessibility(コントラスト)
③ UI Components(ボタン・カード・フォーム)
④ Design Systems(構造化)
⑤ Motion / Micro-interactions(動き)
この順番で読むと、デザインの全体像がつながります。
Smashing Magazine
https://www.smashingmagazine.com/
VAE(Variational Autoencoder)や Autoencoder も、Text-to-Image / Text-to-Video における“補助的な技術”として重要な役割を担っています。
ただし、**役割は GAN とは異なり、画像を「圧縮・展開するための土台」**として使われることが多いです。
⭐ VAE / Autoencoder は「画像を扱いやすくするための変換装置」
最新の Text-to-Image(Stable Diffusion など)では、
**画像をいきなりピクセルで扱わず、
一度「潜在空間(latent space)」に圧縮してから処理します。**
ここで使われるのが VAE や Autoencoder。
⭐ 1. Stable Diffusion を例にすると、VAE は「圧縮と復元」を担当
Stable Diffusion の大まかな流れ:
1️⃣ VAE Encoder:
画像 → 低次元の潜在表現(latent)
2️⃣ Diffusion (U-Net):
潜在空間でノイズ除去 / 生成処理
(ここが Text-to-Image のメイン)
3️⃣ VAE Decoder:
潜在 → 最終画像(512×512 など高解像度)
つまり VAE は、
Diffusion が扱う“潜在空間”を作るための重要モジュール。
⭐ 2. なぜ Autoencoder が必要なのか?
理由は3つ。
✔ 理由①:計算量を激減させる(高速化)
画像を直接生成すると 512×512×3 = 786,432 ピクセル
これは非常に重い。
潜在空間は 1/8〜1/16のサイズなので
Diffusion の計算が一気に軽くなる。
✔ 理由②:高解像度の構造を少ない次元で表現できる
Autoencoder は
色
形
質感
などの情報を「圧縮しても失われにくい形」に変換できる。
GAN や Diffusion だけではこの圧縮が難しいので Autoencoder が必要。
✔ 理由③:潜在空間はノイズ処理と相性が良い
Diffusion の“ノイズ除去プロセス”は、
潜在空間の方がやりやすい。
⭐ 3. Text-to-Video でも Autoencoder が使われる
動画の場合は、
“空間だけでなく時間方向にも圧縮”が必要。
そこで登場するのが:
Video Autoencoder
Temporal VAE
3D VAE(空間+時間)
これらは
動画 → 潜在動画
に変換してから Diffusion で生成します。
Sora など最新モデルでは
専用の Video Autoencoder が重要な基盤技術として使われています。
⭐ 4. まとめ:VAE / Autoencoder は「補助」だけど“めちゃ重要な基盤”
技術 主な役割
Diffusion 画像・動画そのものを生成する“エンジン”
GAN 仕上げの高解像化・質感改善・時間的一貫性補正
Autoencoder / VAE 画像や動画を扱いやすい潜在空間に変換
要するに、
🔹 Diffusion(生成の本体)
+
🔹 Autoencoder(圧縮/展開の基盤)
+
🔹 GAN(質感や解像度を補強)
という構成が最新モデルの一般形です。
$ pip3 install librosa soundfile numpy
import numpy as np
import librosa
import soundfile as sf
# ---- 1. ダミーのMelスペクトログラムを作る ----
mel = np.random.rand(80, 100).astype(np.float32)
# ---- 2. Mel → 線形スペクトログラムに逆変換 ----
sr = 22050
n_fft = 1024
hop_length = 256
win_length = 1024
mel_basis = librosa.filters.mel(
sr=sr,
n_fft=n_fft,
n_mels=80
)
inv_mel_basis = np.linalg.pinv(mel_basis)
S = np.dot(inv_mel_basis, mel)
# ---- 3. Griffin-Limで波形へ ----
audio = librosa.griffinlim(
S,
n_iter=60,
hop_length=hop_length,
win_length=win_length
)
# ---- 4. WAVとして保存 ----
sf.write("output.wav", audio, sr)
print("output.wav を生成しました!")
Melスペクトログラムこそが、TTS(Text-to-Speech)の “声の元” です。
以下で「なぜ Mel が TTS の中心なのか」をわかりやすく説明します。
🔊 結論:TTS の音声生成は『Melスペクトログラム → Vocoder → 音声』です
TTS(特に Tacotron2 / FastSpeech2 / VITS などの Neural TTS)は、
次の2段階で音声を作っています:
① Acoustic Model(Tacotron2 / FastSpeech)
→ メルスペクトログラムを生成
② Vocoder(WaveGlow / HiFi-GAN / WaveRNN)
→ メルスペクトログラムを音声波形に変換
つまり…
🎤 TTS が作るのは “直接の音声” ではなく Melスペクトログラム
✔️ TTS の本体(Acoustic Model)が出力するもの
“音声波形(wav)” ではない
Melスペクトログラム(80次元 × フレーム数)
理由:
人間の声の特徴をコンパクトに持てる
音声波形に比べて扱いやすい(次元が小さく学習が安定)
周波数分解能が人間の聴覚特性に近い
👂 Melスペクトログラムは “声の写真”
イメージとしては:
横:時間
縦:周波数(低音 → 高音)
色:音の強さ
写真のように「音の特徴が平面にまとまっている」。
だから AI が学習しやすい。
📘 なぜ Mel を使うのか?(技術理由)
① 音声波形(時系列)は扱いにくい
1秒で 22,050 サンプル → 学習には巨大すぎる
⇒ 変動が激しく、局所性が弱い
② Melスペクトログラムは圧縮され学習しやすい
22,050サンプル → 約80次元に圧縮
しかも
音の高さ(フォルマント)
強さ
リズム
声質の特徴
が明瞭になるため 学習のターゲットとして最高。
③ 聴覚特性に合う(メルスケール)
人間の耳は
低音に敏感
高音に鈍い
→ Mel スケールはこの特性に合わせている
→ 音質向上につながる
🎛 Vocoder が Melスペクトログラムを“音声”に変換する
代表的なvocoder:
Vocoder 特徴
WaveGlow 高音質、高速
HiFi-GAN いま最も使われる、軽量&高品質
WaveRNN 高品質、軽量だがやや遅い
DiffWave 拡散モデルで高品質
Vocoder があるからこそ、
「絵(mel)」→「声(wav)」が成立する。
TTS の7〜8割は「いかに自然な Mel を作るか」にかかっています。
概念 一番わかりやすい比喩
LLM 予測変換の超強化版
RAG 賢い友人に資料を渡す
LoRA 専門家パッチを貼る
プロンプト 優秀な部下への指示書
hallucination 知ったかぶり
マルチモーダル 五感を持ったAI
エージェント AI秘書
🟦 1. LLM とは何か?
■ 比喩:LLM は「超巨大な辞書付きの予測文章マシン」
「LLM は “知識を持った予測変換” です。
スマホの予測変換が “次の1語” を出すのに対し、
LLM は “次の1000語” を意味の通る形で生成できます。」
🟧 2. LLM の仕組み
■ 比喩:LLM は「圧縮された世界知識 ZIP ファイル」
「インターネットの大量テキストを読み込んで、
知識を“圧縮”した巨大ZIPファイルみたいなものです。
解凍(推論)すると回答が出ます。」
図:
Web情報 ──→ 「圧縮」学習 ──→ LLMモデル(圧縮知識)
↓ 解凍
回答を生成する
🟩 3. RAG(検索拡張生成)
■ 比喩:LLM は「物知りだけど記憶力が曖昧な友人」
「LLM は賢いけど“最新情報や社内情報は知らない”。
そこで RAG を使うと、
『友人に社内の資料を渡して、読んだ上で答えてもらう』
ような動きになります。」
図:
質問 → まず資料検索 → LLM に渡す → 正確な回答
🟥 4. ファインチューニング(LoRA / PEFT)
■ 比喩:LLM に「専門家の名刺を貼り付ける」
「LoRAは大規模な脳を作り直すのではなく、
小規模な“専門性パッチ”を貼り付けて性能を変える技術です。」
図:
[巨大モデル] + [小さな追加レイヤー(専門性)] = カスタムLLM
🟦 5. プロンプトエンジニアリング
■ 比喩:LLM は「高性能な部下」
「優秀だけど指示があいまいだと迷う部下」。
だから prompt(指示)を丁寧に書くほど結果が良くなる。
例)
NG:『資料まとめて』
OK:『3点に要約して、最後に要改善ポイントを出して』
🟨 6. LLM の hallucination(幻覚)
■ 比喩:自信満々で間違ったことを言う「知ったかぶり」
「LLM は時々“もっともらしい嘘”を作ります。
理由は『文章の続きを予測する仕組み』だから。」
図:
❌:事実を理解しているわけではない
⭕:もっともらしい文章を生成する
🟧 7. モデルデプロイ(運用)
■ 比喩:料理の“厨房”
「レストランで料理を出すように、
モデルもお客さん(ユーザー)のリクエストを処理する厨房が必要。」
厨房 = inference server
ウェイター = API
客 = ユーザーアプリ
🟪 8. 推論コスト
■ 比喩:文章生成の“電気代”
「長い文章を生成すると、その分だけ電気(GPU)が必要。
つまり『よくしゃべるほど高い』。」
例:
入力1,000 tokens → 数円
長文生成5,000 tokens → 数十円になることも
🟩 9. マルチモーダル LLM
■ 比喩:人間の「五感」を持ち始めたAI
「文字だけでなく、画像・音声・動画など
いろんな感覚を“読める・理解できる”モデルです。」
図:
画像 → 説明
音声 → 文字起こし
ファイル → 要約
🟦 10. エージェント型 LLM
■ 比喩:自律的に動く「AI秘書」
「LLM がツール操作(検索・計算・翻訳)を組み合わせて、
自動で目的を達成します。」
例:
Slack メッセージを読んで → 要約して → カレンダー調整
Web検索して → レポート作成
🔷 UX Collectiveとは何か?
UX Collective(ユエックス・コレクティブ)は
Medium(ミディアム)というプラットフォームで運営されている UX/UIデザイン専門のメディア です。
▼ 特徴
世界中のデザイナーが記事を書いている
実務で役立つUI/UXの話が多い
最新デザイントレンドを追える
ケーススタディ(改善例)が豊富
▼ よくある記事テーマ
UI改善のBefore/After
情報設計のコツ
アプリのUX分析
アニメーション/モーションデザイン
AI × UI/UX の最新動向
デザインシステムの作り方
色/タイポグラフィのベストプラクティス
👉 NN/g(ニールセンノーマングループ)より分かりやすく実務寄り
👉 Smashing Magazine よりライトで読みやすい
🔶 デザインで学ぶべきこと(UI/UXの基礎ロードマップ)
デザイン学習はこんな流れで理解していくと最短で上達します。
① UX(体験)を作るための基礎
UX = 「ユーザーが目的を達成するまでの体験」
ここを理解しないと UI をいくら綺麗にしても意味がない。
UXで学ぶべきこと
ユーザーとは誰か?(Persona)
何を達成したいのか?(Jobs To Be Done)
どんなシナリオで使うか?(User Journey)
どの場面でユーザーは困るか?
摩擦(フリクション)を減らす設計
② UI(画面)の基礎
UI = 「見た目・操作のわかりやすさ」
ここは Figma を使って実践で身に付ける部分。
UIで学ぶべきこと
レイアウト(グリッド、余白、視線誘導)
コンポーネント(再利用可能なUI)
テキスト(タイポグラフィ)
アイコン、ボタン、フォーム
配色(色の心理、コントラト)
モーション(ホバー/遷移)
③ デザイン原則(法則)の理解
これらは UX Collective でも頻繁に紹介されます。
UI/UX で超重要な法則
ゲシュタルトの法則(まとまり、近接、整列)
ミニマリズム(不要なものは排除)
ヒッカムの法則(選択肢が多いと迷う)
フィッツの法則(ボタンの距離とサイズ最適化)
ミラーの法則(記憶できるのは7つまで)
Jakobの法則(ユーザーは慣れたUIが好き)
👉 これらを知ると「なぜそのUIが正しいか」を説明できるようになる。
④ アクセシビリティ(誰でも使えるUI)
現場でめちゃ重要。
コントラスト比
フォントサイズ
読み上げ対応(ARIA)
色だけに依存しないデザイン
UX Collective でもよく記事が出ます。
⑤ デザインシステム(プロジェクトで使うUIの辞書)
プロの現場で特に重要。
色スタイル
テキスト(フォント見出し〜本文)
ボタンのバリアント
フォームコンポーネント
アイコンルール
グリッド・レスポンシブ
👉 Figmaのコンポーネントとセットで理解する必要がある。
⑥ プロトタイピング(動くUIの作成)
Figmaで作る “操作可能なUI” のこと。
遷移
ホバー
カーソル変化
ページ遷移アニメーション
フローヒント
UXフェーズとのつながりも理解しやすくなる。
⑦ ユーザビリティテスト
作ったUIは必ずテストする。
やることは簡単:
使ってもらう
観察する
つまずいた場所を改善する
UX Collective ではこの実例が多い。
📘 まとめ:UX Collective と学習の位置付け
UX Collective は
→ 実務で役に立つ UI/UX の知識を短時間で吸収できる無料教材。
あなたが学ぶべき順序
UXの基礎(ユーザー理解)
UIの基礎(レイアウト・色・タイポ・コンポーネント)
デザイン原則の理解
アクセシビリティ
デザインシステム
プロトタイピング
ユーザビリティテスト
UX Collective は ①〜⑦すべての記事が揃っていて、実務者の視点で学べるのがメリットです。