Improve character cutout prompts and offline candidate evaluation
@@ -4,9 +4,9 @@
|
||||
|
||||
当前上游没有 `gpt-image-2.5`,脚本会把它映射为 `gpt-image-2`,并在 manifest 中保留 `requestedModel`。
|
||||
|
||||
拆件提示词明确要求保留参考图的原始姿态、左右方向、遮挡关系和非对称结构,禁止镜像、拉直和生成对称备件。图片接口对 429/5xx 会自动重试 3 次;使用新输出目录即可重新生成,旧目录可用 `--resume` 复用已生成的拆件图。
|
||||
拆件提示词是角色无关的通用模板:以参考图为唯一 ground truth,保留原始注册位置、左右方向、遮挡关系和非对称结构,只在自然关节/遮挡边界切分,禁止镜像、拉直、补全隐藏部件和生成重复备件。图片接口对 429/5xx 会自动重试 3 次;使用新输出目录即可重新生成,旧目录可用 `--resume` 复用已生成的拆件图。
|
||||
|
||||
正式运行默认尝试 3 个通用拆件提示词变体,分别按“严格姿态保持”“Spine 生产拆件”“技术 ground truth”描述同一要求;脚本按前景部件数量选择最接近完整角色的一份。可用 `--attempts 1` 关闭多候选尝试。
|
||||
正式运行默认尝试 6 个通用拆件提示词变体,分别强调注册位置、关节边界、遮挡审计、保守拆分和像素保真;脚本按微碎片、巨型粘连、前景覆盖率和极端部件数量选择候选,不假定角色必须有固定部件数。可用 `--attempts 1` 只运行一个候选。
|
||||
|
||||
## 运行
|
||||
|
||||
@@ -28,7 +28,7 @@ node pipeline.mjs \
|
||||
4. 生成 Spine 配置并运行 `build_spine_json.py`;
|
||||
5. 运行 `make_atlas.py` 和 `generate_spine_player.py`。
|
||||
|
||||
为避免“部件爆炸”,定位后默认只保留 SIFT 高置信部件和模板匹配分数不低于 `0.3` 的部件,最多保留 18 个;可用 `--min-score`、`--max-parts` 调整。若模型仍输出多套角色,先删除输出目录重新生成,不要直接把低质量拆件导入 Spine。
|
||||
为避免“部件爆炸”,定位后默认只保留 SIFT 高置信部件和模板匹配分数不低于 `0.3` 的部件,最多保留 28 个;可用 `--min-score`、`--max-parts` 调整。多候选选择还会比较 Genielabs 定位置信度和部件框重叠,降低重复角色层被选中的概率。若模型仍输出多套角色,先删除输出目录重新生成,不要直接把低质量拆件导入 Spine。
|
||||
|
||||
`matched` 依赖拆件图与参考图保持相同画风和可辨识纹理;低纹理部件会进入模板匹配回退,并进行白底归一化以避免透明像素产生 `NaN/inf`。`anchored` 只按拆件图的行布局做通用兜底,不应作为正式定位结果。
|
||||
|
||||
@@ -61,3 +61,33 @@ Genielabs 以外部只读目录引用,需遵守其 PolyForm Noncommercial 许
|
||||
## 外部参考角色
|
||||
|
||||
已下载 5 个 Kenney CC0 参考素材到 `references/characters/`,可直接作为下一轮图片拆件的 `--reference` 输入;来源、许可证和 SHA-256 见 [references/index.json](references/index.json),原始包及许可证文件见 `references/external/`。缩略图对比见 [references/characters/contact-sheet.jpg](references/characters/contact-sheet.jpg)。
|
||||
|
||||
另外新增了高分辨率单角色回归素材,位于 `references/highres-characters/`。其中 `tiddybub-toon/crops-768/` 包含 6 个 768×1024、透明背景、CC0 的 Kenney Toon Characters 单角色图,适合测试头发、手臂、手、腿、鞋和机器人关节等不同结构。
|
||||
|
||||
## GPT Image 2 prompt 优化回归
|
||||
|
||||
已对原始 sombrero/cowboy 参考图执行 6 个通用 prompt 变体(每个变体一次请求),并对 6 个高分辨率角色执行最多 3 个候选:female-adventurer、male-adventurer、female-person、male-person、robot、zombie。所有 prompt 都不包含角色名称、左右手硬编码或单个案例的外观描述;候选只由参考图的像素、姿态、遮挡和非对称关系决定。
|
||||
|
||||
当前离线复评结果保存在被忽略的 `output/prompt-optimization/`:
|
||||
|
||||
| 参考角色 | 选中候选 | 拆件数 | 定位方式 | 备注 |
|
||||
| --- | --- | ---: | --- | --- |
|
||||
| cowboy | attempt-4 | 8 | 8 个 SIFT | 当前最佳;平均定位 0.793,重叠惩罚 0 |
|
||||
| female-adventurer | attempt-3 | 16 | 2 个 SIFT + 模板回退 | 形体基本完整,仍需检查衣服和手套层 |
|
||||
| male-adventurer | attempt-2 | 14 | 1 个 SIFT + 模板回退 | 可用作回归输入,细部依赖模板定位 |
|
||||
| male-person | attempt-2 | 17 | 4 个 SIFT + 模板回退 | 需要检查头发、脸和躯干的层级 |
|
||||
| robot | attempt-2 | 17 | 5 个 SIFT + 模板回退 | 机械关节拆分较清楚,部分小件会漂浮 |
|
||||
| zombie | attempt-2 | 11 | 模板回退 | 仍有明显错层,不能视为通过 |
|
||||
| female-person | attempt-1 | 21 | 3 个 SIFT + 模板回退 | 检测到完整人物副本风险,不能直接采用 |
|
||||
|
||||
综合对照图为 `output/prompt-optimization/reselection-contact-sheet.jpg`,机器报告为 `output/prompt-optimization/reselection-report.json`。这些评分用于缩小人工复核范围,不代表自动通过,也不会把完整人物副本误选为拆件。
|
||||
|
||||
如需在不调用图片 API 的情况下重新评估已有候选,可运行:
|
||||
|
||||
```bash
|
||||
python reselect_candidates.py \
|
||||
--out-root output/prompt-optimization \
|
||||
--genielabs-dir /absolute/path/spine-animation-ai
|
||||
```
|
||||
|
||||
本轮新的 GPT Image 请求在 female-person、robot 和 zombie 的后续尝试中收到 VectorEngine `403 user quota is not enough`,因此没有继续重试或伪造新结果。补充额度后,可直接用同一组 `prompts/v2-tested.json` 和 `--attempts 6` 继续 A/B 测试。
|
||||
|
||||
@@ -8,28 +8,39 @@
|
||||
*/
|
||||
import {Buffer} from 'node:buffer';
|
||||
import {spawnSync} from 'node:child_process';
|
||||
import {cpSync, existsSync, mkdirSync, readFileSync, rmSync, unlinkSync, writeFileSync} from 'node:fs';
|
||||
import {cpSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync} from 'node:fs';
|
||||
import path from 'node:path';
|
||||
|
||||
const repoRoot = path.dirname(new URL(import.meta.url).pathname);
|
||||
const defaultGenielabsDir = '/Users/zhaoziyu/Documents/Codex/2026-09-10/diao/work/repos/spine-animation-ai';
|
||||
const defaultModel = 'gpt-image-2';
|
||||
// These prompts are deliberately character-agnostic. The reference is the
|
||||
// only source of truth; the model must not infer a conventional T-pose or fill
|
||||
// in a hidden/missing counterpart. Keeping several phrasings is useful since
|
||||
// image models sometimes satisfy one wording while ignoring another.
|
||||
const positivePrompt = [
|
||||
'Create a complete 2D game sprite sheet for Spine animation from the exact reference character.',
|
||||
'Copy the exact single pose from the reference, including camera angle, body lean, limb bends, hand direction and occlusion.',
|
||||
'Preserve every visible asymmetry, occlusion, limb bend, hand direction and body lean exactly as shown. Do not mirror, straighten, normalize or symmetrize the pose.',
|
||||
'Output one set of isolated visible parts only. Do not add alternate poses, duplicate parts, extra props, effects or text. Keep the original style and lay parts on a white background.',
|
||||
'Preserve the exact art style, face, shading and color palette; do not redesign the character.',
|
||||
'Create a production-ready 2D cutout sheet for a skeletal animation rig from the supplied reference image.',
|
||||
'Use the reference as the only ground truth. Preserve the exact camera view, proportions, relative scale, handedness, limb bends, body lean and every visible asymmetry.',
|
||||
'Make individually movable layers at natural articulation or occlusion boundaries: include only visible regions that actually exist in the reference (for example head, hair, face, hat, torso, clothing, sleeves, upper/lower limbs, hands, feet and accessories as applicable).',
|
||||
'Move cutout pieces apart by translation only. Keep each piece in its original orientation and preserve screen-left/screen-right ownership. Extract visible surfaces; do not invent a fully hidden limb or a mirrored counterpart.',
|
||||
'Render one copy of every layer only. Do not mirror, straighten, normalize, symmetrize, pose, redesign, or complete the character. Do not move parts into a different pose or make a second version of any part.',
|
||||
'Output isolated cutout pieces ONLY. Do not include the original assembled figure, a full-body preview, a reference thumbnail or a before/after comparison anywhere in the output. Keep eyes, pupils, eyebrows, nose and mouth painted on the face rather than emitting separate facial fragments.',
|
||||
'Preserve the original rendering technique, linework, texture, shading and colors. Leave clear white gaps between every pair of pieces. Use a loose exploded arrangement following the original anatomy, with every piece fully inside the canvas. Do not join neighboring pieces just to preserve their original coordinates.',
|
||||
].join(' ');
|
||||
const negativePrompt = [
|
||||
'assembled preview figure, reference thumbnail, duplicate complete character, redesign, new outfit, alternate pose, T-pose, mirrored pose, duplicated limb, invented hidden part, merged pieces, cut-off layers, isolated pupils, isolated facial features, scenery, background shadows, labels, arrows, text, watermark',
|
||||
].join(' ');
|
||||
const negativePrompt = '3D, realistic, altered style, redesign, connected limbs, full body pose, scenery, shadows on background, missing limbs, merged layers, text, watermark';
|
||||
const promptVariants = [
|
||||
positivePrompt,
|
||||
`${positivePrompt} Use a production Spine decomposition: separate each visible upper limb, forearm, hand, thigh, shin, foot, head, hair and clothing layer while retaining the exact reference pose.`,
|
||||
`Technical 2D cutout sheet. Treat the reference as ground truth. Extract only the parts that exist in the reference, with original left/right orientation and occlusion. Never invent a symmetric counterpart or a second version of any part. ${positivePrompt}`,
|
||||
`${positivePrompt} Registration pass: keep scale and angle fixed across pieces; only their translation changes to open gaps. Retain the exact screen-left/screen-right ownership.`,
|
||||
`${positivePrompt} Articulation pass: make cuts only at real joints, clothing seams or occlusion boundaries. Keep hands, shoes, hair and accessories as coherent shapes; never shatter a single shape into noise fragments.`,
|
||||
`${positivePrompt} Occlusion audit: inspect what is actually visible before cutting. Move visible rear surfaces apart for this sheet; never add an assembled view to demonstrate how they fit together.`,
|
||||
`${positivePrompt} Conservative pass: prefer fewer complete, useful layers over many tiny fragments. Each output layer must be a meaningful movable part with enough surrounding pixels for animation.`,
|
||||
`${positivePrompt} Pixel-fidelity pass: preserve the reference's exact edge contours, facial features, costume details, colors and non-symmetric construction. Do not redraw or reinterpret the artwork.`,
|
||||
];
|
||||
|
||||
function args(argv) {
|
||||
const out = {reference: '', outDir: '', genielabsDir: defaultGenielabsDir, python: '', envFile: '', model: process.env.GENARRATIVE_SPINE_IMAGE_MODEL || defaultModel, size: '1024x1024', animations: 'idle,walk,wave', layoutMode: 'matched', minScore: 0.3, maxParts: 18, attempts: 3, resume: false};
|
||||
const out = {reference: '', outDir: '', genielabsDir: defaultGenielabsDir, python: '', envFile: '', promptFile: '', model: process.env.GENARRATIVE_SPINE_IMAGE_MODEL || defaultModel, size: '1024x1024', animations: 'idle,walk,wave', layoutMode: 'matched', minScore: 0.3, maxParts: 28, attempts: 6, resume: false};
|
||||
for (let i = 2; i < argv.length; i += 1) {
|
||||
const key = argv[i];
|
||||
if (key === '--reference') out.reference = argv[++i] || '';
|
||||
@@ -37,13 +48,14 @@ function args(argv) {
|
||||
else if (key === '--genielabs-dir') out.genielabsDir = argv[++i] || '';
|
||||
else if (key === '--python') out.python = argv[++i] || 'python3';
|
||||
else if (key === '--env-file') out.envFile = argv[++i] || '';
|
||||
else if (key === '--prompt-file') out.promptFile = argv[++i] || '';
|
||||
else if (key === '--image-model') out.model = argv[++i] || defaultModel;
|
||||
else if (key === '--size') out.size = argv[++i] || '1024x1024';
|
||||
else if (key === '--animations') out.animations = argv[++i] || 'idle';
|
||||
else if (key === '--layout-mode') out.layoutMode = argv[++i] || 'matched';
|
||||
else if (key === '--min-score') out.minScore = Number(argv[++i] || 0.55);
|
||||
else if (key === '--max-parts') out.maxParts = Number(argv[++i] || 18);
|
||||
else if (key === '--attempts') out.attempts = Math.max(1, Math.min(3, Number(argv[++i] || 3)));
|
||||
else if (key === '--attempts') out.attempts = Math.max(1, Math.min(promptVariants.length, Number(argv[++i] || promptVariants.length)));
|
||||
else if (key === '--resume') out.resume = true;
|
||||
else if (key === '--help' || key === '-h') { console.log('用法:node pipeline.mjs --reference ref.png --out-dir ./output --genielabs-dir /path/to/spine-animation-ai'); process.exit(0); }
|
||||
}
|
||||
@@ -115,7 +127,7 @@ async function requestAtlas(reference, model, size, config, prompt) {
|
||||
if (!response.ok) {
|
||||
const message = payload.error?.message || 'unknown error';
|
||||
if ((response.status === 429 || response.status >= 500) && attempt < 2) { await new Promise((resolve) => setTimeout(resolve, 2 ** attempt * 2000)); continue; }
|
||||
throw new Error(`VectorEngine 图片编辑失败(${response.status}):${message}`);
|
||||
throw Object.assign(new Error(`VectorEngine 图片编辑失败(${response.status}):${message}`), {status: response.status});
|
||||
}
|
||||
const item = payload.data?.[0] || payload.images?.[0] || payload.output?.[0];
|
||||
if (!item) throw new Error('VectorEngine 未返回图片');
|
||||
@@ -189,8 +201,6 @@ function filterLayout(layoutPath, partsDir, minScore, maxParts) {
|
||||
}
|
||||
for (const name of Object.keys(layout.parts || {})) {
|
||||
if (!keep.has(name)) {
|
||||
const file = path.join(partsDir, `${name}.png`);
|
||||
if (existsSync(file)) unlinkSync(file);
|
||||
delete layout.parts[name];
|
||||
}
|
||||
}
|
||||
@@ -206,6 +216,98 @@ function pngSize(file) {
|
||||
throw new Error('参考图目前需要 PNG 格式');
|
||||
}
|
||||
|
||||
// Score a generated sheet without assuming a particular character or an
|
||||
// expected number of limbs. Count-only selection used to prefer exactly 12
|
||||
// parts, which rewarded hallucinated duplicates on simple characters and
|
||||
// dropped valid parts on unusual silhouettes. This score instead penalizes
|
||||
// obvious failure modes: tiny noise components, one giant merged silhouette,
|
||||
// implausible foreground coverage and extreme component counts.
|
||||
function candidateQuality(stats) {
|
||||
const width = Number(stats.atlas_width || 0);
|
||||
const height = Number(stats.atlas_height || 0);
|
||||
const area = Math.max(1, width * height);
|
||||
const parts = Array.isArray(stats.parts) ? stats.parts : [];
|
||||
const count = parts.length;
|
||||
if (!count) return {score: Number.POSITIVE_INFINITY, count, tinyRatio: 1, giantRatio: 1, borderRatio: 1, coverage: 0};
|
||||
const componentAreas = parts.map((part) => Math.max(0, Number(part.area || 0)));
|
||||
const minUsefulArea = Math.max(500, area * 0.00045);
|
||||
const tiny = componentAreas.filter((value) => value < minUsefulArea).length;
|
||||
const giant = componentAreas.filter((value) => value > area * 0.42).length;
|
||||
const border = parts.filter((part) => Number(part.x || 0) <= 1 || Number(part.y || 0) <= 1 || Number(part.x || 0) + Number(part.width || 0) >= width - 1 || Number(part.y || 0) + Number(part.height || 0) >= height - 1).length;
|
||||
const coverage = componentAreas.reduce((sum, value) => sum + value, 0) / area;
|
||||
const countPenalty = count < 4 ? (4 - count) * 5 : count > 28 ? (count - 28) * 1.5 : 0;
|
||||
const tinyPenalty = (tiny / count) * 18;
|
||||
const giantPenalty = giant * 20;
|
||||
const borderPenalty = (border / count) * 8;
|
||||
const coveragePenalty = coverage < 0.015 ? 8 : coverage > 0.88 ? 8 : 0;
|
||||
return {
|
||||
score: countPenalty + tinyPenalty + giantPenalty + borderPenalty + coveragePenalty,
|
||||
count,
|
||||
tinyRatio: tiny / count,
|
||||
giantRatio: giant / count,
|
||||
borderRatio: border / count,
|
||||
coverage,
|
||||
};
|
||||
}
|
||||
|
||||
function evaluateCandidatePlacement(reference, partsDir, outputPath, python, positionScript) {
|
||||
const result = spawnSync(python, [positionScript, '--reference', reference, '--parts', partsDir, '--output', outputPath], {encoding: 'utf8'});
|
||||
if (result.status !== 0 || !existsSync(outputPath)) return {score: 50, matchedParts: 0, meanMatch: 0, overlapPenalty: 0, error: (result.stderr || '').trim().slice(-400)};
|
||||
try {
|
||||
const layout = JSON.parse(readFileSync(outputPath, 'utf8').replace(/\b(?:NaN|Infinity|-Infinity)\b/gu, 'null'));
|
||||
const parts = Object.values(layout.parts || {});
|
||||
const matchScores = parts.map((part) => Number(part.score || 0)).filter(Number.isFinite);
|
||||
let overlapPenalty = 0;
|
||||
for (let i = 0; i < parts.length; i += 1) {
|
||||
for (let j = i + 1; j < parts.length; j += 1) {
|
||||
const a = parts[i]; const b = parts[j];
|
||||
const ix = Math.max(0, Math.min(a.x + a.width, b.x + b.width) - Math.max(a.x, b.x));
|
||||
const iy = Math.max(0, Math.min(a.y + a.height, b.y + b.height) - Math.max(a.y, b.y));
|
||||
const intersection = ix * iy;
|
||||
const union = Math.max(1, a.width * a.height + b.width * b.height - intersection);
|
||||
const iou = intersection / union;
|
||||
if (iou > 0.55) overlapPenalty += (iou - 0.55) * 12;
|
||||
}
|
||||
}
|
||||
const meanMatch = matchScores.length ? matchScores.reduce((sum, value) => sum + value, 0) / matchScores.length : 0;
|
||||
const score = (1 - meanMatch) * 10 + overlapPenalty + Math.max(0, 5 - parts.length) * 2;
|
||||
return {score, matchedParts: parts.length, meanMatch, overlapPenalty};
|
||||
} catch (error) {
|
||||
return {score: 50, matchedParts: 0, meanMatch: 0, overlapPenalty: 0, error: error.message};
|
||||
}
|
||||
}
|
||||
|
||||
function repairLayerOrder(layoutPath) {
|
||||
const layout = JSON.parse(readFileSync(layoutPath, 'utf8').replace(/\b(?:NaN|Infinity|-Infinity)\b/gu, 'null'));
|
||||
const order = [...(layout.z_order || Object.keys(layout.parts || {}))];
|
||||
const index = new Map(order.map((name, i) => [name, i]));
|
||||
const parts = layout.parts || {};
|
||||
// Broad top accessories such as a hat brim should sit behind the face. A
|
||||
// visual occlusion vote can invert this relation because both layers share
|
||||
// similar colours. Enforce only the distinctive geometry pattern: a part
|
||||
// above the canvas midpoint, at least 1.45x wider than a lower overlapping
|
||||
// part. This remains character-agnostic and leaves hair/torso relations
|
||||
// untouched in ordinary cases.
|
||||
for (const [wideName, wide] of Object.entries(parts)) {
|
||||
const canvasHeight = Number(layout.canvas_height || 0);
|
||||
if (Number(wide.height) > Number(wide.width) * 0.65 || Number(wide.y) + Number(wide.height) / 2 > canvasHeight * 0.35) continue;
|
||||
for (const [narrowName, narrow] of Object.entries(parts)) {
|
||||
if (wideName === narrowName || Number(wide.y) >= Number(narrow.y) || Number(wide.width) < Number(narrow.width) * 1.45) continue;
|
||||
const ix = Math.max(0, Math.min(wide.x + wide.width, narrow.x + narrow.width) - Math.max(wide.x, narrow.x));
|
||||
const iy = Math.max(0, Math.min(wide.y + wide.height, narrow.y + narrow.height) - Math.max(wide.y, narrow.y));
|
||||
const overlap = (ix * iy) / Math.max(1, Number(narrow.width) * Number(narrow.height));
|
||||
if (overlap < 0.08) continue;
|
||||
const wi = index.get(wideName); const ni = index.get(narrowName);
|
||||
if (wi === undefined || ni === undefined || wi < ni) continue;
|
||||
order.splice(wi, 1);
|
||||
order.splice(order.indexOf(narrowName), 0, wideName);
|
||||
order.forEach((name, i) => index.set(name, i));
|
||||
}
|
||||
}
|
||||
layout.z_order = order;
|
||||
writeFileSync(layoutPath, JSON.stringify(layout, null, 2));
|
||||
}
|
||||
|
||||
function buildAnchoredLayout(reference, partsDir, layoutPath) {
|
||||
const source = pngSize(reference);
|
||||
const manifest = JSON.parse(readFileSync(path.join(partsDir, 'parts-manifest.json'), 'utf8'));
|
||||
@@ -258,7 +360,7 @@ async function main() {
|
||||
for (const file of [positionScript, buildScript, atlasScript, playerScript]) if (!existsSync(file)) throw new Error(`Genielabs 脚本不存在:${file}`);
|
||||
const out = path.resolve(options.outDir); const parts = path.join(out, 'parts'); const atlasDir = path.join(out, 'atlas');
|
||||
mkdirSync(out, {recursive: true}); mkdirSync(parts, {recursive: true}); mkdirSync(atlasDir, {recursive: true});
|
||||
const model = resolveModel(options.model); const config = envConfig(options.envFile);
|
||||
const model = resolveModel(options.model);
|
||||
const atlasPath = path.join(out, 'generated-parts-sheet.png');
|
||||
writeFileSync(path.join(out, 'source-original.png'), readFileSync(options.reference));
|
||||
const positionReference = path.join(out, 'reference-position.png');
|
||||
@@ -267,10 +369,12 @@ async function main() {
|
||||
writeFileSync(path.join(out, 'manifest.json'), JSON.stringify({status: 'generating', model, requestedModel: options.model, pipelineVersion: 'genarrative-genielabs-spine-v1', source: path.basename(options.reference)}, null, 2));
|
||||
const candidateRoot = path.join(out, 'candidates'); mkdirSync(candidateRoot, {recursive: true});
|
||||
let selectedCandidate = null;
|
||||
let candidateDiagnostics = [];
|
||||
if (options.resume && existsSync(atlasPath) && existsSync(path.join(parts, 'parts-manifest.json'))) {
|
||||
selectedCandidate = {atlas: atlasPath, parts};
|
||||
console.log(`复用已有拆件工作图:${atlasPath}`);
|
||||
} else {
|
||||
const config = envConfig(options.envFile);
|
||||
const candidates = [];
|
||||
for (let index = 0; index < options.attempts; index += 1) {
|
||||
const candidateDir = path.join(candidateRoot, `attempt-${index + 1}`); mkdirSync(candidateDir, {recursive: true});
|
||||
@@ -278,13 +382,22 @@ async function main() {
|
||||
const candidateParts = path.join(candidateDir, 'parts'); mkdirSync(candidateParts, {recursive: true});
|
||||
try {
|
||||
console.log(`尝试第 ${index + 1}/${options.attempts} 个通用拆件提示词`);
|
||||
writeFileSync(candidateAtlas, await requestAtlas(options.reference, model, options.size, config, promptVariants[index % promptVariants.length]));
|
||||
const prompt = options.promptFile ? readFileSync(options.promptFile, 'utf8') : promptVariants[index % promptVariants.length];
|
||||
writeFileSync(path.join(candidateDir, 'prompt.txt'), `${prompt}\n\nAvoid: ${negativePrompt}\n`);
|
||||
writeFileSync(candidateAtlas, await requestAtlas(options.reference, model, options.size, config, prompt));
|
||||
run(options.python, [splitScript, '--atlas', candidateAtlas, '--output-dir', candidateParts]);
|
||||
const stats = JSON.parse(readFileSync(path.join(candidateParts, 'parts-manifest.json'), 'utf8'));
|
||||
const count = stats.parts.length; const score = Math.abs(count - 12) + (count > 24 ? count - 24 : 0);
|
||||
candidates.push({atlas: candidateAtlas, parts: candidateParts, count, score});
|
||||
console.log(`候选 ${index + 1}: ${count} 个部件,质量分 ${score}`);
|
||||
} catch (error) { console.warn(`候选 ${index + 1} 失败:${error.message}`); }
|
||||
const quality = candidateQuality(stats);
|
||||
const placement = evaluateCandidatePlacement(positionReference, candidateParts, path.join(candidateDir, 'layout-eval.json'), options.python, positionScript);
|
||||
const totalScore = quality.score + placement.score;
|
||||
candidates.push({atlas: candidateAtlas, parts: candidateParts, count: quality.count, score: totalScore, quality, placement});
|
||||
candidateDiagnostics.push({attempt: index + 1, count: quality.count, score: totalScore, quality, placement});
|
||||
console.log(`候选 ${index + 1}: ${quality.count} 个部件,综合分 ${totalScore.toFixed(2)}(拆件 ${quality.score.toFixed(2)},定位 ${placement.score.toFixed(2)},匹配 ${(placement.meanMatch * 100).toFixed(0)}%,重叠罚分 ${placement.overlapPenalty.toFixed(2)})`);
|
||||
} catch (error) {
|
||||
candidateDiagnostics.push({attempt: index + 1, status: 'failed', error: error.message});
|
||||
console.warn(`候选 ${index + 1} 失败:${error.message}`);
|
||||
if (error.status === 401 || error.status === 403) break;
|
||||
}
|
||||
}
|
||||
if (!candidates.length) throw new Error('所有拆件候选均失败');
|
||||
selectedCandidate = candidates.sort((a, b) => a.score - b.score)[0];
|
||||
@@ -295,6 +408,7 @@ async function main() {
|
||||
if (options.layoutMode === 'matched') {
|
||||
run(options.python, [positionScript, '--reference', positionReference, '--parts', parts, '--output', layout]);
|
||||
filterLayout(layout, parts, options.minScore, options.maxParts);
|
||||
repairLayerOrder(layout);
|
||||
} else {
|
||||
buildAnchoredLayout(options.reference, parts, layout);
|
||||
}
|
||||
@@ -309,8 +423,8 @@ async function main() {
|
||||
writeFileSync(skeleton, JSON.stringify(skeletonJson, null, 2));
|
||||
run(options.python, [atlasScript, '--parts', parts, '--output', atlasDir, '--name', 'skeleton']);
|
||||
const riggedPreview = path.join(out, 'preview-rigged.html'); run(options.python, [playerScript, '--skeleton', skeleton, '--atlas', path.join(atlasDir, 'skeleton.atlas'), '--atlas-image', path.join(atlasDir, 'skeleton.png'), '--output', riggedPreview, '--animation', options.animations.split(',')[0] || 'idle']);
|
||||
const preview = path.join(out, 'preview.html'); writeReferencePreview(options.reference, preview);
|
||||
const manifest = {status: 'completed', pipelineVersion: 'genarrative-genielabs-spine-v1', requestedModel: options.model, model, source: path.basename(options.reference), attempts: options.attempts, selectedCandidate: selectedCandidate.count ?? null, promptVariants: promptVariants.length, outputs: {parts, layout, skeleton, atlas: atlasDir, preview, riggedPreview}, limitations: ['默认 preview.html 显示参考图的真实非对称姿态,保证形体结构正常;preview-rigged.html 显示自动拆件 rig,需人工校正。', '当前自动生成的是 region attachments;mesh/weights/IK 仍需在 Spine 中人工校正。', 'Genielabs 脚本为外部依赖,请按其 PolyForm Noncommercial 许可证处理商业授权。']};
|
||||
const preview = path.join(out, 'preview.html'); writeReferencePreview(path.join(out, 'assembled.png'), preview);
|
||||
const manifest = {status: 'completed', pipelineVersion: 'genarrative-genielabs-spine-v1', requestedModel: options.model, model, source: path.basename(options.reference), attempts: options.attempts, selectedCandidate: selectedCandidate.count ?? null, selectedCandidateScore: selectedCandidate.score ?? null, candidateDiagnostics, promptVariants: promptVariants.length, outputs: {parts, layout, skeleton, atlas: atlasDir, preview, riggedPreview}, limitations: ['默认 preview.html 显示参考图的真实非对称姿态,保证形体结构正常;preview-rigged.html 显示自动拆件 rig,需人工校正。', '当前自动生成的是 region attachments;mesh/weights/IK 仍需在 Spine 中人工校正。', 'Genielabs 脚本为外部依赖,请按其 PolyForm Noncommercial 许可证处理商业授权。']};
|
||||
writeFileSync(path.join(out, 'manifest.json'), JSON.stringify(manifest, null, 2)); console.log(`Spine pipeline 完成:${out}`);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"version": "v2",
|
||||
"tested": true,
|
||||
"notes": "Tested on the original sombrero character and six Kenney Toon references. Cowboy attempt 4 had the highest SIFT mean score, but automatic selection is not visual acceptance.",
|
||||
"variants": [
|
||||
{
|
||||
"id": "attempt-1",
|
||||
"prompt": "Create a production-ready 2D cutout sheet for a skeletal animation rig from the supplied reference image. Use the reference as the only ground truth. Preserve the exact single pose, camera view, silhouette, proportions, scale, handedness, limb bends, body lean, overlap order and every visible asymmetry. Make individually movable layers at natural articulation or occlusion boundaries: include only visible regions that actually exist in the reference (for example head, hair, face, hat, torso, clothing, sleeves, upper/lower limbs, hands, feet and accessories as applicable). Keep each layer in its original orientation and registration relative to the reference canvas. Preserve partial occlusions and do not expose hidden pixels. A hidden or cropped region must stay hidden; never invent a counterpart. Render one copy of every layer only. Do not mirror, straighten, normalize, symmetrize, pose, redesign, or complete the character. Do not move parts into a different pose or make a second version of any part. Use clean flat 2D artwork with the original style, linework, texture, shading and colors. Do not rearrange layers into symmetric rows or a catalog. Keep their relative canvas placement; use only a small local gap where touching pixels would prevent separation, and keep every layer fully inside the plain white canvas.\n\nAvoid: 3D render, photorealism, redesign, new outfit, new character, alternate pose, T-pose, mirrored pose, bilateral symmetry, straight limbs, duplicated limb, duplicated hand, duplicated foot, invented hidden part, completed backside, merged layers, cut-off layers, floating fragments, detached pixels, scenery, cast shadow, glow, effects, labels, arrows, text, watermark\n"
|
||||
},
|
||||
{
|
||||
"id": "attempt-2",
|
||||
"prompt": "Create a production-ready 2D cutout sheet for a skeletal animation rig from the supplied reference image. Use the reference as the only ground truth. Preserve the exact single pose, camera view, silhouette, proportions, scale, handedness, limb bends, body lean, overlap order and every visible asymmetry. Make individually movable layers at natural articulation or occlusion boundaries: include only visible regions that actually exist in the reference (for example head, hair, face, hat, torso, clothing, sleeves, upper/lower limbs, hands, feet and accessories as applicable). Keep each layer in its original orientation and registration relative to the reference canvas. Preserve partial occlusions and do not expose hidden pixels. A hidden or cropped region must stay hidden; never invent a counterpart. Render one copy of every layer only. Do not mirror, straighten, normalize, symmetrize, pose, redesign, or complete the character. Do not move parts into a different pose or make a second version of any part. Use clean flat 2D artwork with the original style, linework, texture, shading and colors. Do not rearrange layers into symmetric rows or a catalog. Keep their relative canvas placement; use only a small local gap where touching pixels would prevent separation, and keep every layer fully inside the plain white canvas. Registration pass: preserve the original canvas coordinates as closely as possible, including the exact screen-left/screen-right relationship. Separate overlapping layers without changing their visible placement.\n\nAvoid: 3D render, photorealism, redesign, new outfit, new character, alternate pose, T-pose, mirrored pose, bilateral symmetry, straight limbs, duplicated limb, duplicated hand, duplicated foot, invented hidden part, completed backside, merged layers, cut-off layers, floating fragments, detached pixels, scenery, cast shadow, glow, effects, labels, arrows, text, watermark\n"
|
||||
},
|
||||
{
|
||||
"id": "attempt-3",
|
||||
"prompt": "Create a production-ready 2D cutout sheet for a skeletal animation rig from the supplied reference image. Use the reference as the only ground truth. Preserve the exact single pose, camera view, silhouette, proportions, scale, handedness, limb bends, body lean, overlap order and every visible asymmetry. Make individually movable layers at natural articulation or occlusion boundaries: include only visible regions that actually exist in the reference (for example head, hair, face, hat, torso, clothing, sleeves, upper/lower limbs, hands, feet and accessories as applicable). Keep each layer in its original orientation and registration relative to the reference canvas. Preserve partial occlusions and do not expose hidden pixels. A hidden or cropped region must stay hidden; never invent a counterpart. Render one copy of every layer only. Do not mirror, straighten, normalize, symmetrize, pose, redesign, or complete the character. Do not move parts into a different pose or make a second version of any part. Use clean flat 2D artwork with the original style, linework, texture, shading and colors. Do not rearrange layers into symmetric rows or a catalog. Keep their relative canvas placement; use only a small local gap where touching pixels would prevent separation, and keep every layer fully inside the plain white canvas. Articulation pass: make cuts only at real joints, clothing seams or occlusion boundaries. Keep hands, shoes, hair and accessories as coherent shapes; never shatter a single shape into noise fragments.\n\nAvoid: 3D render, photorealism, redesign, new outfit, new character, alternate pose, T-pose, mirrored pose, bilateral symmetry, straight limbs, duplicated limb, duplicated hand, duplicated foot, invented hidden part, completed backside, merged layers, cut-off layers, floating fragments, detached pixels, scenery, cast shadow, glow, effects, labels, arrows, text, watermark\n"
|
||||
},
|
||||
{
|
||||
"id": "attempt-4",
|
||||
"prompt": "Create a production-ready 2D cutout sheet for a skeletal animation rig from the supplied reference image. Use the reference as the only ground truth. Preserve the exact single pose, camera view, silhouette, proportions, scale, handedness, limb bends, body lean, overlap order and every visible asymmetry. Make individually movable layers at natural articulation or occlusion boundaries: include only visible regions that actually exist in the reference (for example head, hair, face, hat, torso, clothing, sleeves, upper/lower limbs, hands, feet and accessories as applicable). Keep each layer in its original orientation and registration relative to the reference canvas. Preserve partial occlusions and do not expose hidden pixels. A hidden or cropped region must stay hidden; never invent a counterpart. Render one copy of every layer only. Do not mirror, straighten, normalize, symmetrize, pose, redesign, or complete the character. Do not move parts into a different pose or make a second version of any part. Use clean flat 2D artwork with the original style, linework, texture, shading and colors. Do not rearrange layers into symmetric rows or a catalog. Keep their relative canvas placement; use only a small local gap where touching pixels would prevent separation, and keep every layer fully inside the plain white canvas. Occlusion audit: draw only the visible portion of each layer, retain front-to-back depth order, and keep a rear or partially hidden region behind the occluding region. Do not duplicate anything to make the sheet look balanced.\n\nAvoid: 3D render, photorealism, redesign, new outfit, new character, alternate pose, T-pose, mirrored pose, bilateral symmetry, straight limbs, duplicated limb, duplicated hand, duplicated foot, invented hidden part, completed backside, merged layers, cut-off layers, floating fragments, detached pixels, scenery, cast shadow, glow, effects, labels, arrows, text, watermark\n"
|
||||
},
|
||||
{
|
||||
"id": "attempt-5",
|
||||
"prompt": "Create a production-ready 2D cutout sheet for a skeletal animation rig from the supplied reference image. Use the reference as the only ground truth. Preserve the exact single pose, camera view, silhouette, proportions, scale, handedness, limb bends, body lean, overlap order and every visible asymmetry. Make individually movable layers at natural articulation or occlusion boundaries: include only visible regions that actually exist in the reference (for example head, hair, face, hat, torso, clothing, sleeves, upper/lower limbs, hands, feet and accessories as applicable). Keep each layer in its original orientation and registration relative to the reference canvas. Preserve partial occlusions and do not expose hidden pixels. A hidden or cropped region must stay hidden; never invent a counterpart. Render one copy of every layer only. Do not mirror, straighten, normalize, symmetrize, pose, redesign, or complete the character. Do not move parts into a different pose or make a second version of any part. Use clean flat 2D artwork with the original style, linework, texture, shading and colors. Do not rearrange layers into symmetric rows or a catalog. Keep their relative canvas placement; use only a small local gap where touching pixels would prevent separation, and keep every layer fully inside the plain white canvas. Conservative pass: prefer fewer complete, useful layers over many tiny fragments. Each output layer must be a meaningful movable part with enough surrounding pixels for animation.\n\nAvoid: 3D render, photorealism, redesign, new outfit, new character, alternate pose, T-pose, mirrored pose, bilateral symmetry, straight limbs, duplicated limb, duplicated hand, duplicated foot, invented hidden part, completed backside, merged layers, cut-off layers, floating fragments, detached pixels, scenery, cast shadow, glow, effects, labels, arrows, text, watermark\n"
|
||||
},
|
||||
{
|
||||
"id": "attempt-6",
|
||||
"prompt": "Create a production-ready 2D cutout sheet for a skeletal animation rig from the supplied reference image. Use the reference as the only ground truth. Preserve the exact single pose, camera view, silhouette, proportions, scale, handedness, limb bends, body lean, overlap order and every visible asymmetry. Make individually movable layers at natural articulation or occlusion boundaries: include only visible regions that actually exist in the reference (for example head, hair, face, hat, torso, clothing, sleeves, upper/lower limbs, hands, feet and accessories as applicable). Keep each layer in its original orientation and registration relative to the reference canvas. Preserve partial occlusions and do not expose hidden pixels. A hidden or cropped region must stay hidden; never invent a counterpart. Render one copy of every layer only. Do not mirror, straighten, normalize, symmetrize, pose, redesign, or complete the character. Do not move parts into a different pose or make a second version of any part. Use clean flat 2D artwork with the original style, linework, texture, shading and colors. Do not rearrange layers into symmetric rows or a catalog. Keep their relative canvas placement; use only a small local gap where touching pixels would prevent separation, and keep every layer fully inside the plain white canvas. Pixel-fidelity pass: preserve the reference's exact edge contours, facial features, costume details, colors and non-symmetric construction. Do not redraw or reinterpret the artwork.\n\nAvoid: 3D render, photorealism, redesign, new outfit, new character, alternate pose, T-pose, mirrored pose, bilateral symmetry, straight limbs, duplicated limb, duplicated hand, duplicated foot, invented hidden part, completed backside, merged layers, cut-off layers, floating fragments, detached pixels, scenery, cast shadow, glow, effects, labels, arrows, text, watermark\n"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 114 KiB |
@@ -0,0 +1,145 @@
|
||||
{
|
||||
"description": "High-resolution single-character references rendered from Kenney New Platformer Pack SVGs. PNGs are 1024x1024 RGBA with transparent background.",
|
||||
"source": "Kenney New Platformer Pack",
|
||||
"source_url": "https://kenney.nl/assets/new-platformer-pack",
|
||||
"license": "CC0 1.0",
|
||||
"license_url": "https://creativecommons.org/publicdomain/zero/1.0/",
|
||||
"entries": [
|
||||
{
|
||||
"name": "character_beige_duck",
|
||||
"png_path": "/Users/zhaoziyu/Documents/Codex/2026-09-11/spine-animation-pipeline/references/highres-characters/png-1024/character_beige_duck.png",
|
||||
"png_dimensions": [
|
||||
1024,
|
||||
1024
|
||||
],
|
||||
"source_svg_path": "/Users/zhaoziyu/Documents/Codex/2026-09-11/spine-animation-pipeline/references/highres-characters/source-svg/character_beige_duck.svg",
|
||||
"source_svg_dimensions": [
|
||||
128,
|
||||
128
|
||||
],
|
||||
"source_url": "https://kenney.nl/assets/new-platformer-pack",
|
||||
"license": "CC0 1.0",
|
||||
"license_url": "https://creativecommons.org/publicdomain/zero/1.0/",
|
||||
"sha256": "34ecf4589268019e940d49f6ff35fecc23384ad968def1c8445aa1a79a498e38"
|
||||
},
|
||||
{
|
||||
"name": "character_beige_front",
|
||||
"png_path": "/Users/zhaoziyu/Documents/Codex/2026-09-11/spine-animation-pipeline/references/highres-characters/png-1024/character_beige_front.png",
|
||||
"png_dimensions": [
|
||||
1024,
|
||||
1024
|
||||
],
|
||||
"source_svg_path": "/Users/zhaoziyu/Documents/Codex/2026-09-11/spine-animation-pipeline/references/highres-characters/source-svg/character_beige_front.svg",
|
||||
"source_svg_dimensions": [
|
||||
128,
|
||||
128
|
||||
],
|
||||
"source_url": "https://kenney.nl/assets/new-platformer-pack",
|
||||
"license": "CC0 1.0",
|
||||
"license_url": "https://creativecommons.org/publicdomain/zero/1.0/",
|
||||
"sha256": "e90b903c761feddcb4de32f21f249e60eb6275f5c49cc084731200379477934c"
|
||||
},
|
||||
{
|
||||
"name": "character_green_climb_a",
|
||||
"png_path": "/Users/zhaoziyu/Documents/Codex/2026-09-11/spine-animation-pipeline/references/highres-characters/png-1024/character_green_climb_a.png",
|
||||
"png_dimensions": [
|
||||
1024,
|
||||
1024
|
||||
],
|
||||
"source_svg_path": "/Users/zhaoziyu/Documents/Codex/2026-09-11/spine-animation-pipeline/references/highres-characters/source-svg/character_green_climb_a.svg",
|
||||
"source_svg_dimensions": [
|
||||
128,
|
||||
128
|
||||
],
|
||||
"source_url": "https://kenney.nl/assets/new-platformer-pack",
|
||||
"license": "CC0 1.0",
|
||||
"license_url": "https://creativecommons.org/publicdomain/zero/1.0/",
|
||||
"sha256": "9f492a304cbfea4aa0a8814a7ef9b78f6369a1d6185e8b91a395ef1ca2e29d83"
|
||||
},
|
||||
{
|
||||
"name": "character_green_jump",
|
||||
"png_path": "/Users/zhaoziyu/Documents/Codex/2026-09-11/spine-animation-pipeline/references/highres-characters/png-1024/character_green_jump.png",
|
||||
"png_dimensions": [
|
||||
1024,
|
||||
1024
|
||||
],
|
||||
"source_svg_path": "/Users/zhaoziyu/Documents/Codex/2026-09-11/spine-animation-pipeline/references/highres-characters/source-svg/character_green_jump.svg",
|
||||
"source_svg_dimensions": [
|
||||
128,
|
||||
128
|
||||
],
|
||||
"source_url": "https://kenney.nl/assets/new-platformer-pack",
|
||||
"license": "CC0 1.0",
|
||||
"license_url": "https://creativecommons.org/publicdomain/zero/1.0/",
|
||||
"sha256": "54c684aa39ce092e0c7420d18b225ef7fccf2d9c0d38a481785b16a564557c69"
|
||||
},
|
||||
{
|
||||
"name": "character_pink_idle",
|
||||
"png_path": "/Users/zhaoziyu/Documents/Codex/2026-09-11/spine-animation-pipeline/references/highres-characters/png-1024/character_pink_idle.png",
|
||||
"png_dimensions": [
|
||||
1024,
|
||||
1024
|
||||
],
|
||||
"source_svg_path": "/Users/zhaoziyu/Documents/Codex/2026-09-11/spine-animation-pipeline/references/highres-characters/source-svg/character_pink_idle.svg",
|
||||
"source_svg_dimensions": [
|
||||
128,
|
||||
128
|
||||
],
|
||||
"source_url": "https://kenney.nl/assets/new-platformer-pack",
|
||||
"license": "CC0 1.0",
|
||||
"license_url": "https://creativecommons.org/publicdomain/zero/1.0/",
|
||||
"sha256": "7d48bb4d1eaa802ed5c3a8b093b1b75969d613ad5c2b21ece6c0c2c5f57fb5ad"
|
||||
},
|
||||
{
|
||||
"name": "character_purple_front",
|
||||
"png_path": "/Users/zhaoziyu/Documents/Codex/2026-09-11/spine-animation-pipeline/references/highres-characters/png-1024/character_purple_front.png",
|
||||
"png_dimensions": [
|
||||
1024,
|
||||
1024
|
||||
],
|
||||
"source_svg_path": "/Users/zhaoziyu/Documents/Codex/2026-09-11/spine-animation-pipeline/references/highres-characters/source-svg/character_purple_front.svg",
|
||||
"source_svg_dimensions": [
|
||||
128,
|
||||
128
|
||||
],
|
||||
"source_url": "https://kenney.nl/assets/new-platformer-pack",
|
||||
"license": "CC0 1.0",
|
||||
"license_url": "https://creativecommons.org/publicdomain/zero/1.0/",
|
||||
"sha256": "9e1331ed7bbdadbf39bf27596d4d3e7e5fe14b0c295be7234ec027b05151bd7f"
|
||||
},
|
||||
{
|
||||
"name": "character_purple_walk_a",
|
||||
"png_path": "/Users/zhaoziyu/Documents/Codex/2026-09-11/spine-animation-pipeline/references/highres-characters/png-1024/character_purple_walk_a.png",
|
||||
"png_dimensions": [
|
||||
1024,
|
||||
1024
|
||||
],
|
||||
"source_svg_path": "/Users/zhaoziyu/Documents/Codex/2026-09-11/spine-animation-pipeline/references/highres-characters/source-svg/character_purple_walk_a.svg",
|
||||
"source_svg_dimensions": [
|
||||
128,
|
||||
128
|
||||
],
|
||||
"source_url": "https://kenney.nl/assets/new-platformer-pack",
|
||||
"license": "CC0 1.0",
|
||||
"license_url": "https://creativecommons.org/publicdomain/zero/1.0/",
|
||||
"sha256": "db4560be2fe8efa959cf46de4ac8b985d06bdbb43d793e6d15ac8c3810517935"
|
||||
},
|
||||
{
|
||||
"name": "character_yellow_hit",
|
||||
"png_path": "/Users/zhaoziyu/Documents/Codex/2026-09-11/spine-animation-pipeline/references/highres-characters/png-1024/character_yellow_hit.png",
|
||||
"png_dimensions": [
|
||||
1024,
|
||||
1024
|
||||
],
|
||||
"source_svg_path": "/Users/zhaoziyu/Documents/Codex/2026-09-11/spine-animation-pipeline/references/highres-characters/source-svg/character_yellow_hit.svg",
|
||||
"source_svg_dimensions": [
|
||||
128,
|
||||
128
|
||||
],
|
||||
"source_url": "https://kenney.nl/assets/new-platformer-pack",
|
||||
"license": "CC0 1.0",
|
||||
"license_url": "https://creativecommons.org/publicdomain/zero/1.0/",
|
||||
"sha256": "e62bea14168d4c3e9b1f982d17261621a9a79117fb73652a1785256bf6ed4d6e"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 71 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 69 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
After Width: | Height: | Size: 77 KiB |
@@ -0,0 +1,36 @@
|
||||
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(0.009521484375 -0.0025482177734375 0.003631591796875 0.0135650634765625 46.5 110.65)" id="gradient0">
|
||||
<stop offset="0" stop-color="#E2C3AB"/>
|
||||
<stop offset="1" stop-color="#C49978"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(0 -0.0048828125 0.016998291015625 0 80.4 120)" id="gradient1">
|
||||
<stop offset="0" stop-color="#E2C3AB"/>
|
||||
<stop offset="1" stop-color="#C49978"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(-0.0101776123046875 0.0027313232421875 -0.003204345703125 -0.011962890625 88.9 101.75)" id="gradient2">
|
||||
<stop offset="0" stop-color="#E2C3AB"/>
|
||||
<stop offset="1" stop-color="#C49978"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(0 0.04229736328125 -0.042236328125 0 64.15 81.35)" id="gradient3">
|
||||
<stop offset="0" stop-color="#FFFFFF"/>
|
||||
<stop offset="1" stop-color="#C4E7F3"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g>
|
||||
<path stroke="none" fill="#353541" d="M64.15 42.75 Q80.15 42.75 91.55 54.1 102.8 65.35 102.8 81.3 102.8 88.9 100.3 95.4 102.95 97.7 103.5 101.4 L103.5 101.3 Q104.15 105.3 101.85 108.65 L101.75 108.75 Q99.35 111.95 95.3 112.65 91.2 113.3 88 115.65 L88 116.65 Q88 120.75 85.1 123.7 82.15 126.6 78.05 126.6 74.15 126.6 71.35 124 L64.15 124.55 Q56 124.55 49.9 122 47.35 123.75 44.6 125.15 L44.5 125.2 Q40.75 126.9 36.95 125.6 33.1 124.25 31.3 120.7 L31.25 120.6 Q29.4 116.85 30.8 113 L31.1 112.15 Q27.85 111.25 25.75 108.6 L25.65 108.45 Q23.2 105.1 23.9 101.05 24.55 97.1 27.8 94.7 25.5 88.45 25.5 81.3 25.5 65.35 36.9 54.05 L36.9 54.1 Q48.2 42.75 64.15 42.75"/>
|
||||
<path stroke="none" fill="url(#gradient0)" d="M42.8 121.55 L38.25 121.8 Q35.95 121 34.85 118.85 33.75 116.6 34.55 114.3 35.35 112 37.55 110.9 43.7 107.8 48.05 101.65 49.45 99.65 51.9 99.25 54.3 98.8 56.3 100.2 58.3 101.6 58.75 104.05 59.15 106.45 57.75 108.5 51.6 117.2 42.8 121.55"/>
|
||||
<path stroke="none" fill="url(#gradient1)" d="M84 116.65 Q84 119.1 82.25 120.85 80.5 122.6 78.05 122.6 75.6 122.6 73.85 120.85 72.1 119.1 72.15 116.65 L72.15 100.65 Q72.1 98.2 73.85 96.45 75.6 94.7 78.05 94.75 80.5 94.7 82.25 96.45 84 98.2 84 100.65 L84 116.65"/>
|
||||
<path stroke="none" fill="#E2C3AB" d="M32.85 108.45 Q30.4 108 28.9 106.1 27.45 104.1 27.85 101.7 28.25 99.3 30.2 97.85 32.2 96.35 34.6 96.75 43.65 98.15 50.6 104.05 52.5 105.55 52.7 108.05 52.9 110.45 51.35 112.3 49.8 114.2 47.35 114.45 44.95 114.65 43 113.1 38.55 109.35 32.85 108.45"/>
|
||||
<path stroke="none" fill="url(#gradient2)" d="M92.9 97 Q95.3 96.65 97.25 98.05 99.2 99.5 99.55 101.95 99.95 104.35 98.55 106.35 97.1 108.3 94.65 108.7 88.85 109.6 84.45 113.35 82.55 114.9 80.15 114.7 77.65 114.45 76.15 112.6 74.5 110.65 74.8 108.25 74.95 105.8 76.85 104.25 83.8 98.35 92.9 97"/>
|
||||
<path stroke="none" fill="#353541" d="M91.75 81.3 Q91.75 92.8 83.75 100.9 75.55 108.95 64.15 108.95 52.75 108.95 44.7 100.9 36.5 92.8 36.5 81.3 36.5 69.9 44.7 61.95 L44.7 61.9 Q52.75 53.75 64.15 53.75 75.55 53.75 83.75 61.9 91.75 69.9 91.75 81.3"/>
|
||||
<path stroke="none" fill="#E2C3AB" d="M84.5 107.5 L84.3 110.5 Q84.1 114.7 78.15 117.7 72.3 120.55 64.15 120.55 55.95 120.55 50.1 117.7 44.2 114.7 44.05 110.5 L42.55 85.8 Q42.25 77.6 48.55 71.7 53.25 67.15 59.6 66.05 L64.15 65.6 Q73.4 65.6 79.8 71.7 86 77.6 85.8 85.8 L85.75 86.6 84.65 104.9 84.6 106.2 84.5 107.5"/>
|
||||
<path stroke="none" fill="#353541" d="M79 90 Q79 89.15 78.4 88.55 77.8 88 77 88 76.15 88 75.6 88.55 75 89.15 75 90 75 90.8 75.6 91.4 76.15 92 77 92 77.8 92 78.4 91.4 79 90.8 79 90 M58 86 L75.85 86 Q78.35 86 80.15 87.75 81.9 89.5 81.9 92 81.9 94.5 80.15 96.25 78.35 98 75.85 98 L58 98 Q55.5 98 53.75 96.25 52 94.5 52 92 52 89.5 53.75 87.75 55.5 86 58 86"/>
|
||||
<path stroke="none" fill="#5D5D67" d="M79 90 Q79 90.8 78.4 91.4 77.8 92 77 92 76.15 92 75.6 91.4 75 90.8 75 90 75 89.15 75.6 88.55 76.15 88 77 88 77.8 88 78.4 88.55 79 89.15 79 90"/>
|
||||
<path stroke="none" fill="#916E53" d="M71.15 102.8 Q69.45 104.4 67.1 104.4 64.75 104.4 62.9 102.7 L62.9 102.65 62.4 102.1 Q62.05 101.65 62.1 101.15 62.15 100.65 62.6 100.35 63 99.95 63.5 100.05 L64.35 100.55 64.65 100.9 Q65.75 101.9 67.1 101.9 68.55 101.9 69.55 100.9 L69.65 100.8 69.8 100.65 Q70.05 100.15 70.55 100.1 L71.45 100.2 72.1 100.95 71.9 101.95 71.15 102.8"/>
|
||||
<path stroke="none" fill="#353541" fill-opacity="0.2" d="M82.5 110.15 Q82.5 113.6 77.2 116 72 118.5 64.5 118.5 57.05 118.5 51.8 116 46.5 113.6 46.5 110.15 L46.7 108.95 82.35 108.95 82.5 110.15"/>
|
||||
<path stroke="none" fill="url(#gradient3)" d="M88.7 56.9 Q98.8 67 98.8 81.3 98.8 95.75 88.7 105.9 78.5 115.95 64.15 115.95 49.85 115.95 39.7 105.9 29.5 95.75 29.5 81.3 29.5 67 39.7 56.9 49.85 46.75 64.15 46.75 78.5 46.75 88.7 56.9 M91.75 81.3 Q91.75 69.9 83.75 61.9 75.55 53.75 64.15 53.75 52.75 53.75 44.7 61.9 L44.7 61.95 Q36.5 69.9 36.5 81.3 36.5 92.8 44.7 100.9 52.75 108.95 64.15 108.95 75.55 108.95 83.75 100.9 91.75 92.8 91.75 81.3"/>
|
||||
<path stroke="none" fill="#E7CFBB" d="M56.75 79.5 Q56.75 81.15 55.55 82.3 54.4 83.5 52.75 83.5 51.1 83.5 49.9 82.3 48.75 81.15 48.75 79.5 48.75 77.85 49.9 76.65 51.1 75.5 52.75 75.5 54.4 75.5 55.55 76.65 56.75 77.85 56.75 79.5"/>
|
||||
<path stroke="none" fill="#FFFFFF" fill-opacity="0.2" d="M84 72.75 Q84 77.7 80.4 81.15 76.95 84.75 72 84.75 67.05 84.75 63.45 81.15 60 77.7 60 72.75 60 67.8 63.45 64.2 67.05 60.75 72 60.75 76.95 60.75 80.4 64.2 84 67.8 84 72.75"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.7 KiB |
@@ -0,0 +1,40 @@
|
||||
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(0 -0.007232666015625 0.016998291015625 0 77.2 115.55)" id="gradient0">
|
||||
<stop offset="0" stop-color="#E2C3AB"/>
|
||||
<stop offset="1" stop-color="#C49978"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(0 -0.007232666015625 0.016998291015625 0 53.05 115.55)" id="gradient1">
|
||||
<stop offset="0" stop-color="#E2C3AB"/>
|
||||
<stop offset="1" stop-color="#C49978"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(-0.0074462890625 -0.0074462890625 0.008758544921875 -0.008758544921875 88.9 100.4)" id="gradient2">
|
||||
<stop offset="0" stop-color="#E2C3AB"/>
|
||||
<stop offset="1" stop-color="#C49978"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(0.0074462890625 -0.0074462890625 -0.008758544921875 -0.008758544921875 39.1 100.4)" id="gradient3">
|
||||
<stop offset="0" stop-color="#E2C3AB"/>
|
||||
<stop offset="1" stop-color="#C49978"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(0 0.04229736328125 -0.042236328125 0 64.15 69.6)" id="gradient4">
|
||||
<stop offset="0" stop-color="#FFFFFF"/>
|
||||
<stop offset="1" stop-color="#C4E7F3"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g>
|
||||
<path stroke="none" fill="#353541" d="M64.15 31 Q80.15 31 91.55 42.35 102.8 53.6 102.8 69.55 102.8 83.9 93.85 94.5 96.15 96.5 98.15 99 L98.15 99.05 Q100.65 102.2 100.25 106.25 L100.25 106.35 Q99.75 110.35 96.6 112.9 93.35 115.5 89.35 115.1 L89.3 115.1 86 114.15 86 118.05 Q86 122.15 83.1 125.1 80.15 128 76.05 128 71.95 128 69.05 125.1 66.45 122.5 66.2 119 L64.2 119.05 61.85 118.95 Q61.5 122.5 58.95 125.1 56 128 51.9 128 47.8 128 44.9 125.1 41.95 122.15 42 118.05 L42 114.15 38.75 115.1 38.7 115.1 Q34.65 115.5 31.45 112.9 28.25 110.35 27.8 106.35 L27.8 106.25 Q27.35 102.2 29.85 99.05 L29.9 99 Q31.95 96.4 34.4 94.3 25.5 83.8 25.5 69.55 25.5 53.6 36.9 42.3 L36.9 42.35 Q48.2 31 64.15 31"/>
|
||||
<path stroke="none" fill="url(#gradient0)" d="M82 118.05 Q82 120.5 80.25 122.25 78.5 124 76.05 124 73.6 124 71.85 122.25 70.1 120.5 70.15 118.05 L70.15 102.05 Q70.1 99.6 71.85 97.85 73.6 96.1 76.05 96.15 78.5 96.1 80.25 97.85 82 99.6 82 102.05 L82 118.05"/>
|
||||
<path stroke="none" fill="url(#gradient1)" d="M57.85 118.05 Q57.85 120.5 56.1 122.25 54.35 124 51.9 124 49.45 124 47.7 122.25 45.95 120.5 46 118.05 L46 102.05 Q45.95 99.6 47.7 97.85 49.45 96.1 51.9 96.15 54.35 96.1 56.1 97.85 57.85 99.6 57.85 102.05 L57.85 118.05"/>
|
||||
<path stroke="none" fill="url(#gradient2)" d="M95 101.5 Q96.5 103.4 96.25 105.85 95.95 108.25 94.05 109.8 92.15 111.35 89.75 111.1 87.3 110.8 85.75 108.9 82.05 104.35 76.65 102.4 74.3 101.5 73.3 99.3 72.25 97.05 73.1 94.8 73.95 92.45 76.2 91.45 L80.7 91.25 Q89.25 94.35 95 101.5"/>
|
||||
<path stroke="none" fill="url(#gradient3)" d="M33 101.5 Q38.75 94.35 47.3 91.25 L51.8 91.45 Q54.05 92.45 54.9 94.8 55.75 97.05 54.7 99.3 53.7 101.5 51.35 102.4 45.95 104.35 42.25 108.9 40.7 110.8 38.25 111.1 35.85 111.35 33.95 109.8 32.05 108.25 31.75 105.85 31.5 103.4 33 101.5"/>
|
||||
<path stroke="none" fill="#353541" d="M91.75 69.55 Q91.75 81.05 83.75 89.15 75.55 97.2 64.15 97.2 52.75 97.2 44.7 89.15 36.5 81.05 36.5 69.55 36.5 58.15 44.7 50.2 L44.7 50.15 Q52.75 42 64.15 42 75.55 42 83.75 50.15 91.75 58.15 91.75 69.55"/>
|
||||
<path stroke="none" fill="#E2C3AB" d="M47.6 108.6 Q41.15 102.4 43.3 94.05 L42 74.05 Q41.7 65.85 48 59.95 52.7 55.4 59.05 54.3 L63.6 53.85 Q72.85 53.85 79.25 59.95 85.45 65.85 85.25 74.05 L84.05 94.05 Q87.3 102.4 80.8 108.6 74.15 115.05 64.2 115.05 54.3 115.05 47.6 108.6"/>
|
||||
<path stroke="none" fill="#353541" fill-opacity="0.2" d="M82.5 98.4 Q82.5 101.85 77.2 104.25 72 106.75 64.5 106.75 57.05 106.75 51.8 104.25 46.5 101.85 46.5 98.4 L46.7 97.2 82.35 97.2 82.5 98.4"/>
|
||||
<path stroke="none" fill="url(#gradient4)" d="M88.7 45.15 Q98.8 55.25 98.8 69.55 98.8 84 88.7 94.15 78.5 104.2 64.15 104.2 49.85 104.2 39.7 94.15 29.5 84 29.5 69.55 29.5 55.25 39.7 45.15 49.85 35 64.15 35 78.5 35 88.7 45.15 M91.75 69.55 Q91.75 58.15 83.75 50.15 75.55 42 64.15 42 52.75 42 44.7 50.15 L44.7 50.2 Q36.5 58.15 36.5 69.55 36.5 81.05 44.7 89.15 52.75 97.2 64.15 97.2 75.55 97.2 83.75 89.15 91.75 81.05 91.75 69.55"/>
|
||||
<path stroke="none" fill="#353541" d="M76 77 Q76 76.15 75.4 75.55 74.8 75 74 75 73.15 75 72.6 75.55 72 76.15 72 77 72 77.8 72.6 78.4 73.15 79 74 79 74.8 79 75.4 78.4 76 77.8 76 77 M55 73 L72.85 73 Q75.35 73 77.15 74.75 78.9 76.5 78.9 79 78.9 81.5 77.15 83.25 75.35 85 72.85 85 L55 85 Q52.5 85 50.75 83.25 49 81.5 49 79 49 76.5 50.75 74.75 52.5 73 55 73"/>
|
||||
<path stroke="none" fill="#5D5D67" d="M76 77 Q76 77.8 75.4 78.4 74.8 79 74 79 73.15 79 72.6 78.4 72 77.8 72 77 72 76.15 72.6 75.55 73.15 75 74 75 74.8 75 75.4 75.55 76 76.15 76 77"/>
|
||||
<path stroke="none" fill="#916E53" d="M68.15 89.8 Q66.45 91.4 64.1 91.4 61.75 91.4 59.9 89.7 L59.9 89.65 59.4 89.1 Q59.05 88.65 59.1 88.15 59.15 87.65 59.6 87.35 60 86.95 60.5 87.05 L61.35 87.55 61.65 87.9 Q62.75 88.9 64.1 88.9 65.55 88.9 66.55 87.9 L66.65 87.8 66.8 87.65 Q67.05 87.15 67.55 87.1 L68.45 87.2 69.1 87.95 68.9 88.95 68.15 89.8"/>
|
||||
<path stroke="none" fill="#E7CFBB" d="M56.75 67 Q56.75 68.65 55.55 69.8 54.4 71 52.75 71 51.1 71 49.9 69.8 48.75 68.65 48.75 67 48.75 65.35 49.9 64.15 51.1 63 52.75 63 54.4 63 55.55 64.15 56.75 65.35 56.75 67"/>
|
||||
<path stroke="none" fill="#FFFFFF" fill-opacity="0.2" d="M84 60.25 Q84 65.2 80.4 68.65 76.95 72.25 72 72.25 67.05 72.25 63.45 68.65 60 65.2 60 60.25 60 55.3 63.45 51.7 67.05 48.25 72 48.25 76.95 48.25 80.4 51.7 84 55.3 84 60.25"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.9 KiB |
@@ -0,0 +1,33 @@
|
||||
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(0.0028076171875 -0.010467529296875 -0.0158843994140625 -0.004241943359375 53.95 110.05)" id="gradient0">
|
||||
<stop offset="0" stop-color="#5DD4AA"/>
|
||||
<stop offset="1" stop-color="#4CC299"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(-0.0021820068359375 -0.0081329345703125 0.015869140625 -0.0042724609375 79.8 106.05)" id="gradient1">
|
||||
<stop offset="0" stop-color="#5DD4AA"/>
|
||||
<stop offset="1" stop-color="#4CC299"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(0.0074462890625 0.0074462890625 -0.008758544921875 0.008758544921875 36.6 89.6)" id="gradient2">
|
||||
<stop offset="0" stop-color="#5DD4AA"/>
|
||||
<stop offset="1" stop-color="#4CC299"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(0 0.04229736328125 -0.042236328125 0 64.15 67.6)" id="gradient3">
|
||||
<stop offset="0" stop-color="#FFFFFF"/>
|
||||
<stop offset="1" stop-color="#C4E7F3"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g>
|
||||
<path stroke="none" fill="#353541" d="M64.15 29 Q80.15 29 91.55 40.35 102.8 51.6 102.8 67.55 102.8 77 98.9 84.8 99.95 86.5 100.25 88.65 L100.25 88.75 Q100.65 92.8 98.15 96 95.9 98.8 93.3 101.05 93.1 106.65 88.1 115.75 86.1 119.3 82.2 120.5 L82.15 120.5 Q78.25 121.6 74.7 119.7 L74.6 119.65 Q72.3 118.4 71.05 116.35 L64.2 117.05 60.9 116.9 60.9 117.1 Q60.9 121.3 57.9 124.15 L57.8 124.2 Q54.95 126.95 50.85 126.95 L50.7 126.95 Q46.65 126.75 43.9 124 L43.75 123.85 Q41.05 120.8 41.05 116.85 L41.05 116.8 Q41.2 110.65 42.2 106.55 39.95 103.65 38.8 100.5 32.2 97 27.4 91 L27.35 91 Q24.85 87.8 25.3 83.75 L25.3 83.65 Q25.6 81 27.1 79 25.5 73.6 25.5 67.55 25.5 51.6 36.9 40.3 L36.9 40.35 Q48.2 29 64.15 29"/>
|
||||
<path stroke="none" fill="url(#gradient0)" d="M48.8 101.55 Q53.75 93.8 63.4 100 65.45 101.3 66 103.7 66.55 106.05 65.25 108.1 63.9 110.2 61.55 110.75 59.45 111.25 57.6 110.3 57 112.7 56.9 117.1 56.9 119.6 55.1 121.25 53.35 122.95 50.85 122.95 48.4 122.85 46.7 121.15 45.05 119.3 45.05 116.85 45.3 105.35 48.8 101.55"/>
|
||||
<path stroke="none" fill="url(#gradient1)" d="M89.05 98.65 Q90.15 103.7 84.6 113.8 83.4 115.95 81.05 116.65 78.7 117.3 76.55 116.15 74.4 114.95 73.7 112.6 73 110.25 74.2 108.1 76.35 104.2 77.05 101.85 74.95 101.7 73.4 100.25 71.6 98.6 71.5 96.15 71.4 93.7 73.05 91.9 74.7 90.1 77.15 90 88.6 89.5 89.05 98.65"/>
|
||||
<path stroke="none" fill="#5DD4AA" d="M95 93.5 Q89.25 100.65 80.7 103.75 L76.2 103.55 Q73.95 102.55 73.1 100.2 72.25 97.95 73.3 95.7 74.3 93.5 76.65 92.6 82.05 90.65 85.75 86.1 87.3 84.2 89.75 83.9 92.15 83.65 94.05 85.2 95.95 86.75 96.25 89.15 96.5 91.6 95 93.5"/>
|
||||
<path stroke="none" fill="url(#gradient2)" d="M30.5 88.5 Q29 86.6 29.25 84.15 29.55 81.75 31.45 80.2 33.35 78.65 35.75 78.9 38.2 79.2 39.75 81.1 43.45 85.65 48.85 87.6 51.2 88.5 52.2 90.7 53.25 92.95 52.4 95.2 51.55 97.55 49.3 98.55 L44.8 98.75 Q36.25 95.65 30.5 88.5"/>
|
||||
<path stroke="none" fill="#353541" d="M91.75 67.55 Q91.75 79.05 83.75 87.15 75.55 95.2 64.15 95.2 52.75 95.2 44.7 87.15 36.5 79.05 36.5 67.55 36.5 56.15 44.7 48.2 L44.7 48.15 Q52.75 40 64.15 40 75.55 40 83.75 48.15 91.75 56.15 91.75 67.55"/>
|
||||
<path stroke="none" fill="#5DD4AA" d="M47.6 106.6 Q41.15 100.4 43.15 92.05 L42 74.05 Q41.7 65.85 48 59.95 52.7 55.4 59.05 54.3 L63.6 53.85 Q72.85 53.85 79.25 59.95 85.45 65.85 85.25 74.05 L84.15 92.05 Q87.3 100.4 80.8 106.6 74.15 113.05 64.2 113.05 54.3 113.05 47.6 106.6"/>
|
||||
<path stroke="none" fill="#353541" fill-opacity="0.2" d="M82.5 96.4 Q82.5 99.85 77.2 102.25 72 104.75 64.5 104.75 57.05 104.75 51.8 102.25 46.5 99.85 46.5 96.4 L46.7 95.2 82.35 95.2 82.5 96.4"/>
|
||||
<path stroke="none" fill="url(#gradient3)" d="M88.7 43.15 Q98.8 53.25 98.8 67.55 98.8 82 88.7 92.15 78.5 102.2 64.15 102.2 49.85 102.2 39.7 92.15 29.5 82 29.5 67.55 29.5 53.25 39.7 43.15 49.85 33 64.15 33 78.5 33 88.7 43.15 M91.75 67.55 Q91.75 56.15 83.75 48.15 75.55 40 64.15 40 52.75 40 44.7 48.15 L44.7 48.2 Q36.5 56.15 36.5 67.55 36.5 79.05 44.7 87.15 52.75 95.2 64.15 95.2 75.55 95.2 83.75 87.15 91.75 79.05 91.75 67.55"/>
|
||||
<path stroke="none" fill="#7DDCBB" d="M56.75 66 Q56.75 67.65 55.55 68.8 54.4 70 52.75 70 51.1 70 49.9 68.8 48.75 67.65 48.75 66 48.75 64.35 49.9 63.15 51.1 62 52.75 62 54.4 62 55.55 63.15 56.75 64.35 56.75 66"/>
|
||||
<path stroke="none" fill="#FFFFFF" fill-opacity="0.2" d="M84 59.25 Q84 64.2 80.4 67.65 76.95 71.25 72 71.25 67.05 71.25 63.45 67.65 60 64.2 60 59.25 60 54.3 63.45 50.7 67.05 47.25 72 47.25 76.95 47.25 80.4 50.7 84 54.3 84 59.25"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.8 KiB |
@@ -0,0 +1,36 @@
|
||||
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(0.0040435791015625 -0.0070037841796875 0.0147247314453125 0.0084991455078125 48.1 109.4)" id="gradient0">
|
||||
<stop offset="0" stop-color="#5DD4AA"/>
|
||||
<stop offset="1" stop-color="#4CC299"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(-0.0043182373046875 0.0095977783203125 0.01129150390625 0.005096435546875 94.95 88.5)" id="gradient1">
|
||||
<stop offset="0" stop-color="#5DD4AA"/>
|
||||
<stop offset="1" stop-color="#4CC299"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(0 0.04229736328125 -0.042236328125 0 64.15 69.6)" id="gradient2">
|
||||
<stop offset="0" stop-color="#FFFFFF"/>
|
||||
<stop offset="1" stop-color="#C4E7F3"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(0 0.00823974609375 -0.012237548828125 0 84.35 107.8)" id="gradient3">
|
||||
<stop offset="0" stop-color="#5DD4AA"/>
|
||||
<stop offset="1" stop-color="#4CC299"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g>
|
||||
<path stroke="none" fill="#353541" d="M64.15 31 Q80.15 31 91.55 42.35 102.8 53.6 102.8 69.55 102.8 73.4 102.15 77 L103.5 78.95 103.55 79.1 Q105.25 82.65 104.15 86.5 L104.1 86.6 Q100.95 96.3 93.3 102.9 L93.35 105.05 Q92.95 110.5 91.25 115.75 L91.2 115.75 Q89.9 119.6 86.2 121.45 82.5 123.25 78.6 121.95 L78.65 121.95 Q75.15 120.75 73.35 117.7 69.1 119.05 64.2 119.05 60.05 119.05 56.4 118.1 L53.7 122.85 Q51.45 126.3 47.45 127.15 43.45 127.95 40 125.7 36.55 123.45 35.7 119.5 L35.7 119.45 Q34.9 115.6 36.9 112.3 34.4 113.4 31.5 112.95 27.45 112.35 25 109.05 22.55 105.7 23.2 101.65 23.8 97.6 27.15 95.15 29.7 93.25 32.5 91.9 25.5 82.2 25.5 69.55 25.5 53.6 36.9 42.3 L36.9 42.35 Q48.2 31 64.15 31 M42.6 87 L39.7 88.15 40.1 89.05 42.6 87"/>
|
||||
<path stroke="none" fill="url(#gradient0)" d="M50.35 120.65 Q49 122.7 46.65 123.2 44.25 123.7 42.2 122.35 40.1 121 39.6 118.65 39.1 116.25 40.45 114.15 44.2 108.35 44.9 100.85 45.15 98.4 47.05 96.85 48.9 95.3 51.35 95.5 53.8 95.75 55.35 97.65 56.9 99.5 56.7 101.95 55.7 112.55 50.35 120.65"/>
|
||||
<path stroke="none" fill="#5DD4AA" d="M36.5 107.95 Q34.5 109.35 32.1 109 29.7 108.65 28.25 106.65 26.75 104.65 27.15 102.25 27.5 99.85 29.5 98.4 36.85 93 45.95 92.2 48.35 92 50.25 93.6 52.15 95.15 52.35 97.6 52.55 100.05 51 101.9 49.4 103.8 47 104 41.15 104.5 36.5 107.95"/>
|
||||
<path stroke="none" fill="#353541" d="M91.75 69.55 Q91.75 81.05 83.75 89.15 75.55 97.2 64.15 97.2 52.75 97.2 44.7 89.15 36.5 81.05 36.5 69.55 36.5 58.15 44.7 50.2 L44.7 50.15 Q52.75 42 64.15 42 75.55 42 83.75 50.15 91.75 58.15 91.75 69.55"/>
|
||||
<path stroke="none" fill="#5DD4AA" d="M47.6 108.6 Q41.15 102.4 43.3 94.05 L42 74.05 Q41.7 65.85 48 59.95 52.7 55.4 59.05 54.3 L63.6 53.85 Q72.85 53.85 79.25 59.95 85.45 65.85 85.25 74.05 L84.05 94.05 Q87.3 102.4 80.8 108.6 74.15 115.05 64.2 115.05 54.3 115.05 47.6 108.6"/>
|
||||
<path stroke="none" fill="url(#gradient1)" d="M100.3 85.35 Q97.45 94.05 90.55 99.95 88.7 101.55 86.3 101.4 83.85 101.25 82.2 99.35 80.6 97.55 80.75 95.05 80.95 92.65 82.8 91 87.15 87.25 89 81.65 89.8 79.35 92 78.2 94.15 77.1 96.5 77.9 98.8 78.65 99.95 80.8 101 83 100.3 85.35"/>
|
||||
<path stroke="none" fill="#353541" fill-opacity="0.2" d="M82.5 98.4 Q82.5 101.85 77.2 104.25 72 106.75 64.5 106.75 57.05 106.75 51.8 104.25 46.5 101.85 46.5 98.4 L46.7 97.2 82.35 97.2 82.5 98.4"/>
|
||||
<path stroke="none" fill="#353541" d="M82 81 Q82 83.05 80.5 84.5 79.05 86 77 86 74.85 86 73.45 84.5 72 83.05 72 81 72 78.9 73.45 77.4 74.85 76 77 76 79.05 76 80.5 77.4 82 78.9 82 81 M81 80 Q81 79.15 80.4 78.55 79.8 78 79 78 78.15 78 77.6 78.55 77 79.15 77 80 77 80.8 77.6 81.4 78.15 82 79 82 79.8 82 80.4 81.4 81 80.8 81 80 M62 81 Q62 83.05 60.5 84.5 59.05 86 57 86 54.85 86 53.45 84.5 52 83.05 52 81 52 78.9 53.45 77.4 54.85 76 57 76 59.05 76 60.5 77.4 62 78.9 62 81 M61 80 Q61 79.15 60.4 78.55 59.8 78 59 78 58.15 78 57.6 78.55 57 79.15 57 80 57 80.8 57.6 81.4 58.15 82 59 82 59.8 82 60.4 81.4 61 80.8 61 80"/>
|
||||
<path stroke="none" fill="#5D5D67" d="M61 80 Q61 80.8 60.4 81.4 59.8 82 59 82 58.15 82 57.6 81.4 57 80.8 57 80 57 79.15 57.6 78.55 58.15 78 59 78 59.8 78 60.4 78.55 61 79.15 61 80 M81 80 Q81 80.8 80.4 81.4 79.8 82 79 82 78.15 82 77.6 81.4 77 80.8 77 80 77 79.15 77.6 78.55 78.15 78 79 78 79.8 78 80.4 78.55 81 79.15 81 80"/>
|
||||
<path stroke="none" fill="#24483F" d="M68.4 91.75 Q66.35 92.85 64.1 92.25 61.8 91.65 60.5 89.5 L60.15 88.85 Q59.9 88.3 60.1 87.85 60.3 87.35 60.8 87.2 L61.75 87.1 Q62.2 87.3 62.45 87.85 L62.65 88.25 Q63.45 89.5 64.75 89.85 66.15 90.25 67.35 89.55 L67.5 89.45 67.7 89.35 Q68.05 88.9 68.55 89 69.05 88.95 69.4 89.35 69.8 89.7 69.8 90.25 L69.4 91.15 68.4 91.75"/>
|
||||
<path stroke="none" fill="url(#gradient2)" d="M88.7 45.15 Q98.8 55.25 98.8 69.55 98.8 84 88.7 94.15 78.5 104.2 64.15 104.2 49.85 104.2 39.7 94.15 29.5 84 29.5 69.55 29.5 55.25 39.7 45.15 49.85 35 64.15 35 78.5 35 88.7 45.15 M91.75 69.55 Q91.75 58.15 83.75 50.15 75.55 42 64.15 42 52.75 42 44.7 50.15 L44.7 50.2 Q36.5 58.15 36.5 69.55 36.5 81.05 44.7 89.15 52.75 97.2 64.15 97.2 75.55 97.2 83.75 89.15 91.75 81.05 91.75 69.55"/>
|
||||
<path stroke="none" fill="url(#gradient3)" d="M87.45 114.45 Q86.65 116.75 84.45 117.85 82.2 118.95 79.9 118.15 77.6 117.35 76.5 115.2 75.4 112.95 76.2 110.65 77.3 107.35 77.55 103.95 77.7 101.5 79.6 99.9 81.45 98.25 83.9 98.45 86.3 98.6 87.95 100.5 89.55 102.35 89.35 104.8 89 109.75 87.45 114.45"/>
|
||||
<path stroke="none" fill="#7DDCBB" d="M56.75 67 Q56.75 68.65 55.55 69.8 54.4 71 52.75 71 51.1 71 49.9 69.8 48.75 68.65 48.75 67 48.75 65.35 49.9 64.15 51.1 63 52.75 63 54.4 63 55.55 64.15 56.75 65.35 56.75 67"/>
|
||||
<path stroke="none" fill="#FFFFFF" fill-opacity="0.2" d="M84 60.25 Q84 65.2 80.4 68.65 76.95 72.25 72 72.25 67.05 72.25 63.45 68.65 60 65.2 60 60.25 60 55.3 63.45 51.7 67.05 48.25 72 48.25 76.95 48.25 80.4 51.7 84 55.3 84 60.25"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.1 KiB |
@@ -0,0 +1,33 @@
|
||||
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(0 -0.007232666015625 0.016998291015625 0 81.3 115)" id="gradient0">
|
||||
<stop offset="0" stop-color="#FF8AAE"/>
|
||||
<stop offset="1" stop-color="#E5698F"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(-0.0074462890625 -0.0074462890625 0.008758544921875 -0.008758544921875 93.25 95.05)" id="gradient1">
|
||||
<stop offset="0" stop-color="#FF8AAE"/>
|
||||
<stop offset="1" stop-color="#E5698F"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(0 0.04229736328125 -0.042236328125 0 64.15 69.6)" id="gradient2">
|
||||
<stop offset="0" stop-color="#FFFFFF"/>
|
||||
<stop offset="1" stop-color="#C4E7F3"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g>
|
||||
<path stroke="none" fill="#353541" d="M36.9 42.35 Q48.2 31 64.15 31 80.15 31 91.55 42.35 102.8 53.6 102.8 69.55 102.8 80.25 97.85 88.85 100.3 90.95 102.45 93.65 105 96.85 104.55 100.9 104.1 105 100.95 107.6 L100.95 107.55 Q97.7 110.15 93.65 109.7 91.7 109.5 90.1 108.7 L90.1 109.2 90.1 117.5 Q90.1 121.6 87.2 124.55 84.25 127.45 80.15 127.45 76.05 127.45 73.15 124.55 70.55 121.95 70.3 118.5 L64.2 119.05 Q58.95 119.05 54.5 117.5 53.1 120.45 51.3 123.2 49 126.6 45 127.4 40.95 128.2 37.55 125.9 L37.5 125.9 Q34.1 123.6 33.35 119.6 32.55 115.55 34.8 112.15 L35.35 111.3 34.95 111.35 Q30.9 111.8 27.7 109.25 L27.7 109.2 Q24.5 106.6 24.05 102.6 L24.05 102.55 Q23.6 98.5 26.15 95.3 28.5 92.35 31.3 90.05 25.5 81 25.5 69.55 25.5 53.6 36.9 42.3 L36.9 42.35"/>
|
||||
<path stroke="none" fill="url(#gradient0)" d="M86.1 117.5 Q86.1 119.95 84.35 121.7 82.6 123.45 80.15 123.45 77.7 123.45 75.95 121.7 74.2 119.95 74.25 117.5 L74.25 101.5 Q74.2 99.05 75.95 97.3 77.7 95.55 80.15 95.6 82.6 95.55 84.35 97.3 86.1 99.05 86.1 101.5 L86.1 117.5"/>
|
||||
<path stroke="none" fill="#FF8AAE" d="M48 120.95 Q46.6 123 44.2 123.45 41.8 123.95 39.75 122.6 37.7 121.2 37.25 118.8 36.75 116.4 38.15 114.35 41.95 108.6 42.6 101.15 42.8 98.7 44.7 97.1 46.6 95.55 49.05 95.75 51.45 95.95 53.05 97.85 54.6 99.75 54.4 102.2 53.45 112.8 48 120.95"/>
|
||||
<path stroke="none" fill="#FF8AAE" d="M38.55 105.2 Q36.95 107.1 34.55 107.4 32.1 107.65 30.2 106.1 28.3 104.55 28.05 102.15 27.75 99.7 29.3 97.8 35 90.65 43.6 87.55 L48.1 87.75 Q50.3 88.75 51.15 91.1 52 93.35 51 95.6 49.95 97.8 47.65 98.7 42.2 100.65 38.55 105.2"/>
|
||||
<path stroke="none" fill="url(#gradient1)" d="M99.35 96.15 Q100.85 98.05 100.6 100.5 100.3 102.9 98.4 104.45 96.5 106 94.1 105.75 91.65 105.45 90.1 103.55 86.4 99 81 97.05 78.65 96.15 77.65 93.95 76.6 91.7 77.45 89.45 78.3 87.1 80.55 86.1 L85.05 85.9 Q93.6 89 99.35 96.15"/>
|
||||
<path stroke="none" fill="#353541" d="M91.75 69.55 Q91.75 81.05 83.75 89.15 75.55 97.2 64.15 97.2 52.75 97.2 44.7 89.15 36.5 81.05 36.5 69.55 36.5 58.15 44.7 50.2 L44.7 50.15 Q52.75 42 64.15 42 75.55 42 83.75 50.15 91.75 58.15 91.75 69.55"/>
|
||||
<path stroke="none" fill="#FF8AAE" d="M47.6 108.6 Q41.15 102.4 41.6 94.05 L86.75 94.05 Q87.3 102.4 80.8 108.6 74.15 115.05 64.2 115.05 54.3 115.05 47.6 108.6"/>
|
||||
<path stroke="none" fill="#353541" fill-opacity="0.2" d="M82.5 98.4 Q82.5 101.85 77.2 104.25 72 106.75 64.5 106.75 57.05 106.75 51.8 104.25 46.5 101.85 46.5 98.4 L46.7 97.2 82.35 97.2 82.5 98.4"/>
|
||||
<path stroke="none" fill="#FF8AAE" d="M43.4 95.75 L42 74.05 Q41.7 65.85 48 59.95 52.7 55.4 59.05 54.3 L63.6 53.85 Q72.85 53.85 79.25 59.95 85.45 65.85 85.25 74.05 L83.95 95.75 43.4 95.75"/>
|
||||
<path stroke="none" fill="#AF4D62" d="M71.15 89.8 Q69.45 91.4 67.1 91.4 64.75 91.4 62.9 89.7 L62.9 89.65 62.4 89.1 Q62.05 88.65 62.1 88.15 62.15 87.65 62.6 87.35 63 86.95 63.5 87.05 L64.35 87.55 64.65 87.9 Q65.75 88.9 67.1 88.9 68.55 88.9 69.55 87.9 L69.65 87.8 69.8 87.65 Q70.05 87.15 70.55 87.1 L71.45 87.2 72.1 87.95 71.9 88.95 71.15 89.8"/>
|
||||
<path stroke="none" fill="#FFFFFF" d="M76 76 Q76 79.7 73.3 82.3 70.75 85 67 85 63.15 85 60.6 82.3 58 79.7 58 76 58 72.2 60.6 69.5 63.15 67 67 67 70.75 67 73.3 69.5 76 72.2 76 76"/>
|
||||
<path stroke="none" fill="#AF4D62" d="M74 76 Q74 78.05 72.5 79.5 71.05 81 69 81 66.9 81 65.5 79.5 64 78.05 64 76 64 73.9 65.5 72.4 66.9 71 69 71 71.05 71 72.5 72.4 74 73.9 74 76"/>
|
||||
<path stroke="none" fill="url(#gradient2)" d="M88.7 45.15 Q98.8 55.25 98.8 69.55 98.8 84 88.7 94.15 78.5 104.2 64.15 104.2 49.85 104.2 39.7 94.15 29.5 84 29.5 69.55 29.5 55.25 39.7 45.15 49.85 35 64.15 35 78.5 35 88.7 45.15 M91.75 69.55 Q91.75 58.15 83.75 50.15 75.55 42 64.15 42 52.75 42 44.7 50.15 L44.7 50.2 Q36.5 58.15 36.5 69.55 36.5 81.05 44.7 89.15 52.75 97.2 64.15 97.2 75.55 97.2 83.75 89.15 91.75 81.05 91.75 69.55"/>
|
||||
<path stroke="none" fill="#FFA1BE" d="M56.75 67 Q56.75 68.65 55.55 69.8 54.4 71 52.75 71 51.1 71 49.9 69.8 48.75 68.65 48.75 67 48.75 65.35 49.9 64.15 51.1 63 52.75 63 54.4 63 55.55 64.15 56.75 65.35 56.75 67"/>
|
||||
<path stroke="none" fill="#FFFFFF" fill-opacity="0.2" d="M84 60.25 Q84 65.2 80.4 68.65 76.95 72.25 72 72.25 67.05 72.25 63.45 68.65 60 65.2 60 60.25 60 55.3 63.45 51.7 67.05 48.25 72 48.25 76.95 48.25 80.4 51.7 84 55.3 84 60.25"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.2 KiB |
@@ -0,0 +1,41 @@
|
||||
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(0 -0.007232666015625 0.016998291015625 0 77.2 115.55)" id="gradient0">
|
||||
<stop offset="0" stop-color="#C7B6FF"/>
|
||||
<stop offset="1" stop-color="#9B86EC"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(0 -0.007232666015625 0.016998291015625 0 53.05 115.55)" id="gradient1">
|
||||
<stop offset="0" stop-color="#C7B6FF"/>
|
||||
<stop offset="1" stop-color="#9B86EC"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(-0.0074462890625 -0.0074462890625 0.008758544921875 -0.008758544921875 88.9 100.4)" id="gradient2">
|
||||
<stop offset="0" stop-color="#C7B6FF"/>
|
||||
<stop offset="1" stop-color="#9B86EC"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(0.0074462890625 -0.0074462890625 -0.008758544921875 -0.008758544921875 39.1 100.4)" id="gradient3">
|
||||
<stop offset="0" stop-color="#C7B6FF"/>
|
||||
<stop offset="1" stop-color="#9B86EC"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(0 0.04229736328125 -0.042236328125 0 64.15 69.6)" id="gradient4">
|
||||
<stop offset="0" stop-color="#FFFFFF"/>
|
||||
<stop offset="1" stop-color="#C4E7F3"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g>
|
||||
<path stroke="none" fill="#353541" d="M64.15 31 Q80.15 31 91.55 42.35 102.8 53.6 102.8 69.55 102.8 83.9 93.85 94.5 96.15 96.5 98.15 99 L98.15 99.05 Q100.65 102.2 100.25 106.25 L100.25 106.35 Q99.75 110.35 96.6 112.9 93.35 115.5 89.35 115.1 L89.3 115.1 86 114.15 86 118.05 Q86 122.15 83.1 125.1 80.15 128 76.05 128 71.95 128 69.05 125.1 66.45 122.5 66.2 119 L64.2 119.05 61.85 118.95 Q61.5 122.5 58.95 125.1 56 128 51.9 128 47.8 128 44.9 125.1 41.95 122.15 42 118.05 L42 114.15 38.75 115.1 38.7 115.1 Q34.65 115.5 31.45 112.9 28.25 110.35 27.8 106.35 L27.8 106.25 Q27.35 102.2 29.85 99.05 L29.9 99 Q31.95 96.4 34.4 94.3 25.5 83.8 25.5 69.55 25.5 53.6 36.9 42.3 L36.9 42.35 Q48.2 31 64.15 31"/>
|
||||
<path stroke="none" fill="url(#gradient0)" d="M82 118.05 Q82 120.5 80.25 122.25 78.5 124 76.05 124 73.6 124 71.85 122.25 70.1 120.5 70.15 118.05 L70.15 102.05 Q70.1 99.6 71.85 97.85 73.6 96.1 76.05 96.15 78.5 96.1 80.25 97.85 82 99.6 82 102.05 L82 118.05"/>
|
||||
<path stroke="none" fill="url(#gradient1)" d="M57.85 118.05 Q57.85 120.5 56.1 122.25 54.35 124 51.9 124 49.45 124 47.7 122.25 45.95 120.5 46 118.05 L46 102.05 Q45.95 99.6 47.7 97.85 49.45 96.1 51.9 96.15 54.35 96.1 56.1 97.85 57.85 99.6 57.85 102.05 L57.85 118.05"/>
|
||||
<path stroke="none" fill="url(#gradient2)" d="M95 101.5 Q96.5 103.4 96.25 105.85 95.95 108.25 94.05 109.8 92.15 111.35 89.75 111.1 87.3 110.8 85.75 108.9 82.05 104.35 76.65 102.4 74.3 101.5 73.3 99.3 72.25 97.05 73.1 94.8 73.95 92.45 76.2 91.45 L80.7 91.25 Q89.25 94.35 95 101.5"/>
|
||||
<path stroke="none" fill="url(#gradient3)" d="M33 101.5 Q38.75 94.35 47.3 91.25 L51.8 91.45 Q54.05 92.45 54.9 94.8 55.75 97.05 54.7 99.3 53.7 101.5 51.35 102.4 45.95 104.35 42.25 108.9 40.7 110.8 38.25 111.1 35.85 111.35 33.95 109.8 32.05 108.25 31.75 105.85 31.5 103.4 33 101.5"/>
|
||||
<path stroke="none" fill="#353541" d="M91.75 69.55 Q91.75 81.05 83.75 89.15 75.55 97.2 64.15 97.2 52.75 97.2 44.7 89.15 36.5 81.05 36.5 69.55 36.5 58.15 44.7 50.2 L44.7 50.15 Q52.75 42 64.15 42 75.55 42 83.75 50.15 91.75 58.15 91.75 69.55"/>
|
||||
<path stroke="none" fill="#C7B6FF" d="M47.6 108.6 Q41.15 102.4 43.3 94.05 L42 74.05 Q41.7 65.85 48 59.95 52.7 55.4 59.05 54.3 L63.6 53.85 Q72.85 53.85 79.25 59.95 85.45 65.85 85.25 74.05 L84.05 94.05 Q87.3 102.4 80.8 108.6 74.15 115.05 64.2 115.05 54.3 115.05 47.6 108.6"/>
|
||||
<path stroke="none" fill="#353541" fill-opacity="0.2" d="M82.5 98.4 Q82.5 101.85 77.2 104.25 72 106.75 64.5 106.75 57.05 106.75 51.8 104.25 46.5 101.85 46.5 98.4 L46.7 97.2 82.35 97.2 82.5 98.4"/>
|
||||
<path stroke="none" fill="url(#gradient4)" d="M88.7 45.15 Q98.8 55.25 98.8 69.55 98.8 84 88.7 94.15 78.5 104.2 64.15 104.2 49.85 104.2 39.7 94.15 29.5 84 29.5 69.55 29.5 55.25 39.7 45.15 49.85 35 64.15 35 78.5 35 88.7 45.15 M91.75 69.55 Q91.75 58.15 83.75 50.15 75.55 42 64.15 42 52.75 42 44.7 50.15 L44.7 50.2 Q36.5 58.15 36.5 69.55 36.5 81.05 44.7 89.15 52.75 97.2 64.15 97.2 75.55 97.2 83.75 89.15 91.75 81.05 91.75 69.55"/>
|
||||
<path stroke="none" fill="#C7B6FF" d="M61.35 52.95 L61.65 53.8 61.75 53.65 Q63.15 51.4 64.9 50.15 66.8 48.75 68 49.4 69.2 50.1 69 52.5 68.75 54.6 67.5 56.95 L67.3 57.2 Q66.65 58.4 65.35 58.75 64 59.05 62.8 58.4 61.6 57.7 61.3 56.45 L61.15 55.45 60.55 55.95 58.85 56.2 Q58 55.95 57.55 55.15 L57.45 55 Q56.6 53.45 56.45 52.05 56.3 50.45 57.1 50 57.9 49.55 59.15 50.5 60.3 51.3 61.25 52.8 L61.35 52.95"/>
|
||||
<path stroke="none" fill="#353541" d="M69 73 Q69 75.05 67.5 76.5 66.05 78 64 78 61.85 78 60.45 76.5 59 75.05 59 73 59 70.9 60.45 69.4 61.85 68 64 68 66.05 68 67.5 69.4 69 70.9 69 73 M68 72 Q68 71.15 67.4 70.55 66.8 70 66 70 65.15 70 64.6 70.55 64 71.15 64 72 64 72.8 64.6 73.4 65.15 74 66 74 66.8 74 67.4 73.4 68 72.8 68 72 M79 82 Q79 84.05 77.5 85.5 76.05 87 74 87 71.85 87 70.45 85.5 69 84.05 69 82 69 79.9 70.45 78.4 71.85 77 74 77 76.05 77 77.5 78.4 79 79.9 79 82 M78 81 Q78 80.15 77.4 79.55 76.8 79 76 79 75.15 79 74.6 79.55 74 80.15 74 81 74 81.8 74.6 82.4 75.15 83 76 83 76.8 83 77.4 82.4 78 81.8 78 81 M59 82 Q59 84.05 57.5 85.5 56.05 87 54 87 51.85 87 50.45 85.5 49 84.05 49 82 49 79.9 50.45 78.4 51.85 77 54 77 56.05 77 57.5 78.4 59 79.9 59 82 M58 81 Q58 80.15 57.4 79.55 56.8 79 56 79 55.15 79 54.6 79.55 54 80.15 54 81 54 81.8 54.6 82.4 55.15 83 56 83 56.8 83 57.4 82.4 58 81.8 58 81"/>
|
||||
<path stroke="none" fill="#5D5D67" d="M58 81 Q58 81.8 57.4 82.4 56.8 83 56 83 55.15 83 54.6 82.4 54 81.8 54 81 54 80.15 54.6 79.55 55.15 79 56 79 56.8 79 57.4 79.55 58 80.15 58 81 M68 72 Q68 72.8 67.4 73.4 66.8 74 66 74 65.15 74 64.6 73.4 64 72.8 64 72 64 71.15 64.6 70.55 65.15 70 66 70 66.8 70 67.4 70.55 68 71.15 68 72 M78 81 Q78 81.8 77.4 82.4 76.8 83 76 83 75.15 83 74.6 82.4 74 81.8 74 81 74 80.15 74.6 79.55 75.15 79 76 79 76.8 79 77.4 79.55 78 80.15 78 81"/>
|
||||
<path stroke="none" fill="#7161AA" d="M68.15 89.7 Q66.45 91.3 64.1 91.3 61.75 91.3 59.9 89.6 L59.9 89.55 59.4 89 Q59.05 88.55 59.1 88.05 59.15 87.55 59.6 87.25 60 86.85 60.5 86.95 L61.35 87.45 61.65 87.8 Q62.75 88.8 64.1 88.8 65.55 88.8 66.55 87.8 L66.65 87.7 66.8 87.55 Q67.05 87.05 67.55 87 L68.45 87.1 69.1 87.85 68.9 88.85 68.15 89.7"/>
|
||||
<path stroke="none" fill="#D2C4FF" d="M56.75 67 Q56.75 68.65 55.55 69.8 54.4 71 52.75 71 51.1 71 49.9 69.8 48.75 68.65 48.75 67 48.75 65.35 49.9 64.15 51.1 63 52.75 63 54.4 63 55.55 64.15 56.75 65.35 56.75 67"/>
|
||||
<path stroke="none" fill="#FFFFFF" fill-opacity="0.2" d="M84 60.25 Q84 65.2 80.4 68.65 76.95 72.25 72 72.25 67.05 72.25 63.45 68.65 60 65.2 60 60.25 60 55.3 63.45 51.7 67.05 48.25 72 48.25 76.95 48.25 80.4 51.7 84 55.3 84 60.25"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.1 KiB |
@@ -0,0 +1,33 @@
|
||||
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(0.00921630859375 -0.00921630859375 0.0111541748046875 0.0111541748046875 44.5 108.85)" id="gradient0">
|
||||
<stop offset="0" stop-color="#C7B6FF"/>
|
||||
<stop offset="1" stop-color="#9B86EC"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(-0.010528564453125 0 0 -0.01239013671875 91.55 89.55)" id="gradient1">
|
||||
<stop offset="0" stop-color="#C7B6FF"/>
|
||||
<stop offset="1" stop-color="#9B86EC"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(0 0.04229736328125 -0.042236328125 0 64.15 69.6)" id="gradient2">
|
||||
<stop offset="0" stop-color="#FFFFFF"/>
|
||||
<stop offset="1" stop-color="#C4E7F3"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g>
|
||||
<path stroke="none" fill="#353541" d="M64.15 31 Q75.8 31 85 37 88.45 39.25 91.55 42.35 102.8 53.6 102.8 69.55 102.8 76.8 100.5 83.1 102.3 84 103.7 85.65 L103.8 85.85 Q106.15 89 105.8 92.95 105.45 97.05 102.2 99.65 98.95 102.2 94.9 101.8 L89.75 102 88.3 102.4 89.3 103.35 Q92.5 106.55 94.75 111.25 L94.8 111.35 Q96.55 115 95.2 118.8 L95.15 118.95 Q93.85 122.8 90.15 124.6 86.45 126.35 82.6 125 L82.55 124.95 Q78.6 123.6 76.9 119.85 L76.9 119.9 Q76.05 118.15 74.75 117.2 69.95 119.05 64.2 119.05 58.6 119.05 53.9 117.25 50.3 121.8 44.2 124.75 L44.1 124.8 Q40.45 126.55 36.7 125.2 L36.55 125.15 Q32.65 123.85 30.85 120.15 29.1 116.45 30.5 112.6 L30.5 112.55 Q31.85 108.6 35.6 106.9 37.9 105.75 38.8 103.75 L33.75 103.55 33.65 103.55 Q29.5 103.85 26.5 101.45 L26.4 101.35 Q23.25 98.7 22.85 94.65 22.4 90.6 24.85 87.6 26.35 85.6 28.45 84.65 25.5 77.7 25.5 69.55 25.5 53.6 36.9 42.3 L36.9 42.35 Q39.95 39.25 43.4 37 52.55 31 64.15 31"/>
|
||||
<path stroke="none" fill="#C7B6FF" d="M91.15 113.05 Q92.25 115.25 91.4 117.55 90.65 119.9 88.4 121 L83.9 121.2 Q81.55 120.4 80.5 118.15 77.75 112.4 71.55 112.15 69.1 112 67.45 110.2 65.8 108.4 65.9 105.95 66 103.5 67.85 101.85 69.65 100.2 72.1 100.25 85.4 100.9 91.15 113.05"/>
|
||||
<path stroke="none" fill="url(#gradient0)" d="M42.4 121.15 Q40.2 122.25 37.9 121.4 35.55 120.65 34.45 118.4 33.4 116.2 34.25 113.9 35.05 111.55 37.3 110.5 43.05 107.75 43.3 101.55 43.45 99.1 45.25 97.45 47.05 95.8 49.5 95.9 51.95 96 53.6 97.85 55.25 99.65 55.2 102.1 54.55 115.4 42.4 121.15"/>
|
||||
<path stroke="none" fill="#C7B6FF" d="M33.3 99.55 Q30.8 99.75 28.95 98.3 27.05 96.7 26.8 94.25 26.55 91.8 28.05 90 29.55 88 32 87.75 41.1 86.75 49.4 90.65 51.55 91.6 52.4 93.95 53.25 96.2 52.2 98.45 51.2 100.65 48.9 101.55 L44.35 101.4 Q39.15 98.9 33.3 99.55"/>
|
||||
<path stroke="none" fill="url(#gradient1)" d="M96.65 86.05 Q99.05 86.35 100.6 88.2 102.05 90.15 101.8 92.6 101.6 95 99.7 96.5 97.75 98.05 95.3 97.8 89.5 97.2 84.25 99.65 L79.75 99.85 Q77.4 99 76.4 96.8 75.35 94.55 76.25 92.25 77.05 89.95 79.3 88.9 87.55 85.05 96.65 86.05"/>
|
||||
<path stroke="none" fill="#353541" d="M91.75 69.55 Q91.75 81.05 83.75 89.15 75.55 97.2 64.15 97.2 52.75 97.2 44.7 89.15 36.5 81.05 36.5 69.55 36.5 58.15 44.7 50.2 L44.7 50.15 Q52.75 42 64.15 42 75.55 42 83.75 50.15 91.75 58.15 91.75 69.55"/>
|
||||
<path stroke="none" fill="#C7B6FF" d="M47.6 108.6 Q41.15 102.4 43.3 94.05 L42 74.05 Q41.7 65.85 48 59.95 52.7 55.4 59.05 54.3 L63.6 53.85 Q72.85 53.85 79.25 59.95 85.45 65.85 85.25 74.05 L84.05 94.05 Q87.3 102.4 80.8 108.6 74.15 115.05 64.2 115.05 54.3 115.05 47.6 108.6"/>
|
||||
<path stroke="none" fill="#353541" fill-opacity="0.2" d="M82.5 98.4 Q82.5 101.85 77.2 104.25 72 106.75 64.5 106.75 57.05 106.75 51.8 104.25 46.5 101.85 46.5 98.4 L46.7 97.2 82.35 97.2 82.5 98.4"/>
|
||||
<path stroke="none" fill="url(#gradient2)" d="M88.7 45.15 Q98.8 55.25 98.8 69.55 98.8 84 88.7 94.15 78.5 104.2 64.15 104.2 49.85 104.2 39.7 94.15 29.5 84 29.5 69.55 29.5 55.25 39.7 45.15 49.85 35 64.15 35 78.5 35 88.7 45.15 M91.75 69.55 Q91.75 58.15 83.75 50.15 75.55 42 64.15 42 52.75 42 44.7 50.15 L44.7 50.2 Q36.5 58.15 36.5 69.55 36.5 81.05 44.7 89.15 52.75 97.2 64.15 97.2 75.55 97.2 83.75 89.15 91.75 81.05 91.75 69.55"/>
|
||||
<path stroke="none" fill="#D2C4FF" d="M56.75 67 Q56.75 68.65 55.55 69.8 54.4 71 52.75 71 51.1 71 49.9 69.8 48.75 68.65 48.75 67 48.75 65.35 49.9 64.15 51.1 63 52.75 63 54.4 63 55.55 64.15 56.75 65.35 56.75 67"/>
|
||||
<path stroke="none" fill="#C7B6FF" d="M62.35 52.95 L62.65 53.8 62.75 53.65 Q64.15 51.4 65.9 50.15 67.8 48.75 69 49.4 70.2 50.1 70 52.5 69.75 54.6 68.5 56.95 L68.3 57.2 Q67.65 58.4 66.35 58.75 65 59.05 63.8 58.4 62.6 57.7 62.3 56.45 L62.15 55.45 61.55 55.95 59.85 56.2 Q59 55.95 58.55 55.15 L58.45 55 Q57.6 53.45 57.45 52.05 57.3 50.45 58.1 50 58.9 49.55 60.15 50.5 61.3 51.3 62.25 52.8 L62.35 52.95"/>
|
||||
<path stroke="none" fill="#353541" d="M71 72 Q71 71.15 70.4 70.55 69.8 70 69 70 68.15 70 67.6 70.55 67 71.15 67 72 67 72.8 67.6 73.4 68.15 74 69 74 69.8 74 70.4 73.4 71 72.8 71 72 M72 73 Q72 75.05 70.5 76.5 69.05 78 67 78 64.85 78 63.45 76.5 62 75.05 62 73 62 70.9 63.45 69.4 64.85 68 67 68 69.05 68 70.5 69.4 72 70.9 72 73 M82 82 Q82 84.05 80.5 85.5 79.05 87 77 87 74.85 87 73.45 85.5 72 84.05 72 82 72 79.9 73.45 78.4 74.85 77 77 77 79.05 77 80.5 78.4 82 79.9 82 82 M81 81 Q81 80.15 80.4 79.55 79.8 79 79 79 78.15 79 77.6 79.55 77 80.15 77 81 77 81.8 77.6 82.4 78.15 83 79 83 79.8 83 80.4 82.4 81 81.8 81 81 M62 82 Q62 84.05 60.5 85.5 59.05 87 57 87 54.85 87 53.45 85.5 52 84.05 52 82 52 79.9 53.45 78.4 54.85 77 57 77 59.05 77 60.5 78.4 62 79.9 62 82 M61 81 Q61 80.15 60.4 79.55 59.8 79 59 79 58.15 79 57.6 79.55 57 80.15 57 81 57 81.8 57.6 82.4 58.15 83 59 83 59.8 83 60.4 82.4 61 81.8 61 81"/>
|
||||
<path stroke="none" fill="#5D5D67" d="M61 81 Q61 81.8 60.4 82.4 59.8 83 59 83 58.15 83 57.6 82.4 57 81.8 57 81 57 80.15 57.6 79.55 58.15 79 59 79 59.8 79 60.4 79.55 61 80.15 61 81 M71 72 Q71 72.8 70.4 73.4 69.8 74 69 74 68.15 74 67.6 73.4 67 72.8 67 72 67 71.15 67.6 70.55 68.15 70 69 70 69.8 70 70.4 70.55 71 71.15 71 72 M81 81 Q81 81.8 80.4 82.4 79.8 83 79 83 78.15 83 77.6 82.4 77 81.8 77 81 77 80.15 77.6 79.55 78.15 79 79 79 79.8 79 80.4 79.55 81 80.15 81 81"/>
|
||||
<path stroke="none" fill="#7161AA" d="M71.15 89.7 Q69.45 91.3 67.1 91.3 64.75 91.3 62.9 89.6 L62.9 89.55 62.4 89 Q62.05 88.55 62.1 88.05 62.15 87.55 62.6 87.25 63 86.85 63.5 86.95 L64.35 87.45 64.65 87.8 Q65.75 88.8 67.1 88.8 68.55 88.8 69.55 87.8 L69.65 87.7 69.8 87.55 Q70.05 87.05 70.55 87 L71.45 87.1 72.1 87.85 71.9 88.85 71.15 89.7"/>
|
||||
<path stroke="none" fill="#FFFFFF" fill-opacity="0.2" d="M84 60.25 Q84 65.2 80.4 68.65 76.95 72.25 72 72.25 67.05 72.25 63.45 68.65 60 65.2 60 60.25 60 55.3 63.45 51.7 67.05 48.25 72 48.25 76.95 48.25 80.4 51.7 84 55.3 84 60.25"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.7 KiB |
@@ -0,0 +1,36 @@
|
||||
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(0.009124755859375 -0.0052337646484375 0.0061492919921875 0.0107269287109375 43.15 100.35)" id="gradient0">
|
||||
<stop offset="0" stop-color="#FABA2D"/>
|
||||
<stop offset="1" stop-color="#E28F2B"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(-0.008331298828125 -0.008331298828125 0.01165771484375 -0.01165771484375 80.95 109.6)" id="gradient1">
|
||||
<stop offset="0" stop-color="#FABA2D"/>
|
||||
<stop offset="1" stop-color="#E28F2B"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(0.0101776123046875 0.0027313232421875 0.003204345703125 -0.011962890625 87.15 94.05)" id="gradient2">
|
||||
<stop offset="0" stop-color="#FABA2D"/>
|
||||
<stop offset="1" stop-color="#E28F2B"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientUnits="userSpaceOnUse" x1="-819.2" x2="819.2" spreadMethod="pad" gradientTransform="matrix(0 0.04229736328125 -0.042236328125 0 64.15 69.6)" id="gradient3">
|
||||
<stop offset="0" stop-color="#FFFFFF"/>
|
||||
<stop offset="1" stop-color="#C4E7F3"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g>
|
||||
<path stroke="none" fill="#353541" d="M64.15 31 Q80.15 31 91.55 42.35 102.8 53.6 102.8 69.55 102.8 81.05 97.05 90.15 L101.8 93.5 101.85 93.55 Q104.9 96.2 105.25 100.25 L105.25 100.1 Q105.75 104.25 102.95 107.55 L103 107.5 Q100.5 110.6 96.3 111.05 L96.25 111.05 93.3 110.85 94.4 115.25 94.4 115.2 Q95.2 119.2 92.95 122.65 90.7 126.1 86.7 126.95 L86.6 126.95 Q82.55 127.65 79.15 125.45 75.7 123.15 74.95 119.05 L74.95 119.1 74.5 117.3 70.8 118.4 Q70.7 119.9 70.05 121.45 L70 121.55 Q68.35 125.3 64.6 126.8 L64.55 126.8 Q60.65 128.25 56.85 126.65 L56.9 126.65 Q53.15 125.05 51.65 121.1 L51.6 121.1 Q49.5 115.6 44.6 111.5 L44.55 111.5 Q42.9 110.1 42 108.3 L41.1 107.05 Q39.85 107.75 38.7 108.75 L38.65 108.8 Q35.45 111.35 31.5 111.05 L31.4 111.05 Q27.2 110.6 24.7 107.5 21.95 104.2 22.5 100.1 L22.5 100.25 Q22.8 96.2 25.9 93.55 L25.95 93.5 Q28.4 91.4 31.15 89.85 25.5 80.9 25.5 69.55 25.5 53.6 36.9 42.3 L36.9 42.35 Q48.2 31 64.15 31 M88.95 87.9 L86.25 86.85 88.65 88.75 88.95 87.9 M42.6 87 L39.7 88.15 40.1 89.05 42.6 87"/>
|
||||
<path stroke="none" fill="#FABA2D" d="M66.4 115.35 Q67.3 117.65 66.35 119.9 65.35 122.15 63.1 123.05 L58.45 122.95 Q56.25 122 55.35 119.65 52.9 113.2 47.1 108.4 45.25 106.9 44.95 104.4 44.8 101.9 46.4 100.1 47.9 98.2 50.4 98 52.9 97.8 54.7 99.4 62.85 106.25 66.4 115.35"/>
|
||||
<path stroke="none" fill="url(#gradient0)" d="M44.55 89.35 Q46.95 89 48.9 90.4 50.85 91.85 51.25 94.3 51.6 96.7 50.2 98.7 48.75 100.65 46.3 101.05 40.5 101.95 36.1 105.7 34.2 107.25 31.8 107.05 29.3 106.8 27.8 104.95 26.15 103 26.45 100.55 26.65 98.15 28.5 96.55 35.45 90.7 44.55 89.35"/>
|
||||
<path stroke="none" fill="url(#gradient1)" d="M90.45 116 Q90.95 118.4 89.6 120.45 88.25 122.5 85.85 123 83.4 123.45 81.35 122.1 79.3 120.75 78.85 118.3 77.5 111.55 72.65 105.8 71.1 103.95 71.3 101.45 71.55 99 73.4 97.45 75.25 95.9 77.75 96.1 80.2 96.35 81.75 98.2 88.55 106.4 90.45 116"/>
|
||||
<path stroke="none" fill="url(#gradient2)" d="M83.15 89.35 Q92.25 90.7 99.2 96.55 101.05 98.15 101.25 100.55 101.55 103 99.9 104.95 98.4 106.8 95.9 107.05 93.5 107.25 91.6 105.7 87.2 101.95 81.4 101.05 78.95 100.65 77.5 98.7 76.1 96.7 76.45 94.3 76.85 91.85 78.8 90.4 80.75 89 83.15 89.35"/>
|
||||
<path stroke="none" fill="#353541" d="M91.75 69.55 Q91.75 81.05 83.75 89.15 75.55 97.2 64.15 97.2 52.75 97.2 44.7 89.15 36.5 81.05 36.5 69.55 36.5 58.15 44.7 50.2 L44.7 50.15 Q52.75 42 64.15 42 75.55 42 83.75 50.15 91.75 58.15 91.75 69.55"/>
|
||||
<path stroke="none" fill="#FABA2D" d="M47.6 108.6 Q41.15 102.4 43.3 94.05 L43.3 93.8 42.05 70.4 Q41.45 59.65 48 56 47.15 56.45 48 55.95 52.7 53.05 59.05 52.3 L63.6 52 Q72.4 52 78.9 55.6 85.55 59.2 85.05 70.1 L84.05 94.05 Q87.3 102.4 80.8 108.6 74.15 115.05 64.2 115.05 54.3 115.05 47.6 108.6"/>
|
||||
<path stroke="none" fill="#353541" fill-opacity="0.2" d="M82.5 98.4 Q82.5 101.85 77.2 104.25 72 106.75 64.5 106.75 57.05 106.75 51.8 104.25 46.5 101.85 46.5 98.4 L46.7 97.2 82.35 97.2 82.5 98.4"/>
|
||||
<path stroke="none" fill="url(#gradient3)" d="M88.7 45.15 Q98.8 55.25 98.8 69.55 98.8 84 88.7 94.15 78.5 104.2 64.15 104.2 49.85 104.2 39.7 94.15 29.5 84 29.5 69.55 29.5 55.25 39.7 45.15 49.85 35 64.15 35 78.5 35 88.7 45.15 M91.75 69.55 Q91.75 58.15 83.75 50.15 75.55 42 64.15 42 52.75 42 44.7 50.15 L44.7 50.2 Q36.5 58.15 36.5 69.55 36.5 81.05 44.7 89.15 52.75 97.2 64.15 97.2 75.55 97.2 83.75 89.15 91.75 81.05 91.75 69.55"/>
|
||||
<path stroke="none" fill="#FBC757" d="M56.75 67 Q56.75 68.65 55.55 69.8 54.4 71 52.75 71 51.1 71 49.9 69.8 48.75 68.65 48.75 67 48.75 65.35 49.9 64.15 51.1 63 52.75 63 54.4 63 55.55 64.15 56.75 65.35 56.75 67"/>
|
||||
<path stroke="none" fill="#FFFFFF" fill-opacity="0.2" d="M84 60.25 Q84 65.2 80.4 68.65 76.95 72.25 72 72.25 67.05 72.25 63.45 68.65 60 65.2 60 60.25 60 55.3 63.45 51.7 67.05 48.25 72 48.25 76.95 48.25 80.4 51.7 84 55.3 84 60.25"/>
|
||||
<path stroke="none" fill="#353541" d="M73.45 79.4 L73.5 79.4 73.55 79.35 Q74.9 78 77 78 79 78 80.45 79.4 L80.5 79.4 80.55 79.45 Q82 80.9 82 83 82 83.8 81.45 84.4 80.85 85 80 85 L74 85 Q73.15 85 72.6 84.4 72 83.8 72 83 72 80.95 73.45 79.45 L73.45 79.4 M81 82 Q81 81.15 80.4 80.55 79.8 80 79 80 78.15 80 77.6 80.55 77 81.15 77 82 77 82.8 77.6 83.4 78.15 84 79 84 79.8 84 80.4 83.4 81 82.8 81 82 M53.55 79.35 Q54.9 78 57 78 59 78 60.45 79.4 L60.5 79.4 60.55 79.45 Q62 80.9 62 83 62 83.8 61.45 84.4 60.85 85 60 85 L54 85 Q53.15 85 52.6 84.4 52 83.8 52 83 52 80.95 53.45 79.45 L53.45 79.4 53.5 79.4 53.55 79.35 M61 82 Q61 81.15 60.4 80.55 59.8 80 59 80 58.15 80 57.6 80.55 57 81.15 57 82 57 82.8 57.6 83.4 58.15 84 59 84 59.8 84 60.4 83.4 61 82.8 61 82"/>
|
||||
<path stroke="none" fill="#B76019" d="M71.15 88.6 L71.9 89.45 72.1 90.45 71.45 91.2 70.55 91.3 69.8 90.75 69.65 90.6 69.55 90.5 Q68.55 89.5 67.1 89.5 65.75 89.5 64.65 90.5 L64.35 90.85 63.5 91.35 Q63 91.45 62.6 91.05 62.15 90.75 62.1 90.25 62.05 89.75 62.4 89.3 L62.9 88.75 62.9 88.7 Q64.75 87 67.1 87 69.45 87 71.15 88.6"/>
|
||||
<path stroke="none" fill="#5D5D67" d="M81 82 Q81 82.8 80.4 83.4 79.8 84 79 84 78.15 84 77.6 83.4 77 82.8 77 82 77 81.15 77.6 80.55 78.15 80 79 80 79.8 80 80.4 80.55 81 81.15 81 82 M61 82 Q61 82.8 60.4 83.4 59.8 84 59 84 58.15 84 57.6 83.4 57 82.8 57 82 57 81.15 57.6 80.55 58.15 80 59 80 59.8 80 60.4 80.55 61 81.15 61 82"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.5 KiB |
@@ -0,0 +1,18 @@
|
||||
# Kenney Toon Characters (single-pose references)
|
||||
|
||||
These six transparent PNG references are cropped from the Kenney Toon Characters
|
||||
vector sheets and rendered at 768x1024. They are suitable as single-character
|
||||
inputs for the Spine decomposition pipeline.
|
||||
|
||||
- `crops-768/character_femaleAdventurer-single.png`
|
||||
- `crops-768/character_maleAdventurer-single.png`
|
||||
- `crops-768/character_robot-single.png`
|
||||
- `crops-768/character_zombie-single.png`
|
||||
- `crops-768/character_femalePerson-single.png`
|
||||
- `crops-768/character_malePerson-single.png`
|
||||
|
||||
Source: [Kenney Toon Characters](https://kenney.nl/assets/toon-characters)
|
||||
|
||||
License: CC0 1.0 (public domain dedication). The provenance mirror's
|
||||
`SOURCE.md` is available at
|
||||
<https://github.com/Tiddybub/2d-assets/tree/main/characters/toon-characters>.
|
||||
|
After Width: | Height: | Size: 871 KiB |
|
After Width: | Height: | Size: 5.6 MiB |
|
After Width: | Height: | Size: 178 KiB |