Emakiで絵を描くAIへ
ユーザーが指定した題材を、新しい作品として描いてください。ソフトのソースコードは変更せず、用意された画材を操作します。このページから必要な仕様へ進めます。過去の作品や会話履歴を読む必要はありません。
製品名はEmakiです。JSONのastra-sketch-1は既存データとの互換性を保つ形式IDなので、そのまま使います。
作画の入口
このサイトと同じoriginのJavaScript対応ブラウザで、以下のモジュールを使えます。サーバーへの作画POST APIはありません。
const {validateScene} = await import('/sketch/model.js');
const {createScenePainter} = await import('/sketch/render.js');
const scene = {
version: 'astra-sketch-1', title: '自分の作品名', seed: 12345,
width: 1000, height: 1200,
material: {model: 'paper-brush-v3', resolution: 384, roughness: .64, absorbency: .42},
layers: []
};
// layersへ自分で考えた筆と待機を追加してから検証する。
const checked = validateScene(scene);
const canvas = document.createElement('canvas');
document.body.append(canvas); // 独立した紙。既存の保存作品は変更しない。
const painter = createScenePainter(checked);
// nは経過秒でなく、先頭から実行するbrush/wait命令の個数。
const n = checked.layers.flatMap(layer => layer.marks).length;
painter.paintThrough(n, canvas);
const png = canvas.toDataURL('image/png');
const replayJSON = JSON.stringify(checked, null, 2);
題材に合わせて構図・筆順・色を自分で決めてください。layersの各要素は{id, intent, marks}。idは重複させず、intentは人間が見る短い工程字幕です。
基本の画材
| 操作 | 指定 |
|---|---|
| 色筆 | {type:'brush', points:[[x,y],...], width, color:'#336699', opacity, water, duration} |
| 水筆 | 同じbrushでopacity:0、waterを指定 |
| 待機 | {type:'wait', seconds:5} |
| 筆圧 | brushのpressure:[...]。pointsと同じ個数、各値.05〜1 |
| 粒状化の強さ | brushのgranulationを0〜1で指定 |
| 乾燥停止の補助 | layerにenvironment:{drying:'hold'}。省略時は通常乾燥 |
座標は紙の左上が[0,0]、右下が[1,1]。pointsは2〜256点の筆の中心経路で、塗りつぶす輪郭ではありません。widthは紙幅に対する割合.0001〜.15。opacityとwaterは0〜1、durationは1筆の材料時間.1〜20、waitは.1〜180秒、全体の材料時間は600秒以下。画面のピクセル数を増やすだけでは材料計算は細かくなりません。
水筆、先濡らし、重ね塗り、乾燥待ち、湿った筆でのなじませを使えます。water:0は紙を乾かす命令ではなく、白色は消しゴムではありません。holdは紙全体の吸収・蒸発・定着を止めますが、水と色の移動は続きます。実物を近似した未校正の画材です。
詳しい値と追加機能はスキーマと現在の能力表で確認してください。有限の筆残量・姿勢・再湿潤などの仕様へも能力表から進めます。WebGL2のFilmは別の任意実験で、通常の作品には上記v3から始められます。
描きながら判断する
一度に完成させず、小さい試し塗りと数段階の途中画像を実際に見て、筆順・水・色・待つ時間を調整してください。数値や画像URLだけを見て画質を判定しないでください。
同じpainterは前向きに進めます。途中へ戻る、すでに描いた筆を直す、sceneに筆を追加する場合は、修正JSONから新しいpainterを作って再描画します。採用前の案も別のJSONとして残せます。paintProgress(命令番号+筆の進捗, canvas)で筆の途中も観察できます。
新しい絵は独立canvasとファイルへ保存し、既存のIndexedDBや保存作品を上書きしないでください。作画にはbrush/waitのみを使い、形状塗りつぶし、任意マスク、写真の貼り付け、描画後のぼかし・ノイズ合成、画像生成AIの代用は使いません。供給一定のconstant-v1は廃止済みです。
完成物
完成PNG、編集・再生できるscene JSON、短い制作メモを保存してユーザーへ渡してください。PNGのdata URLやJSON文字列を返すだけでなく、実際に開けるファイルにします。JSONのlayers/marks順が制作手順です。制作過程の動画が必要なら動画モジュールを利用できます。既存作品への採用や外部公開は行わないでください。