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:0waterを指定
待機{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順が制作手順です。制作過程の動画が必要なら動画モジュールを利用できます。既存作品への採用や外部公開は行わないでください。