Fix more 3D stuff, add back animation support
6
animation/sniper-standup.json
Normal file
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"alt_text": "A 3d sculpt of a short, brown haired girl. It’s only a bust.",
|
||||
"date": "2020-12-12",
|
||||
"title": "Sniper Stand-up Test",
|
||||
"tags": ["Animation"]
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
{
|
||||
"date": "2016",
|
||||
"title": "Lantern"
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
{
|
||||
"characters": [
|
||||
"Sakura"
|
||||
],
|
||||
"date": "2021",
|
||||
"nsfw": false,
|
||||
"title": "Sakura (PC vs Quest poly)"
|
||||
}
|
BIN
assets/3d.png
Normal file
After Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
BIN
assets/animation/sniper-standup.webm
Normal file
BIN
assets/animation/sniper-standup.webp
Normal file
After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 101 KiB |
BIN
assets/play-circle.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
17
config.yaml
|
@ -57,30 +57,27 @@ menu:
|
|||
- name: 'Art'
|
||||
url: '/art'
|
||||
weight: 2
|
||||
- name: '3D'
|
||||
url: '/3D'
|
||||
weight: 3
|
||||
- name: 'Music'
|
||||
url: '/music'
|
||||
weight: 4
|
||||
weight: 3
|
||||
- name: 'Software'
|
||||
url: '/software'
|
||||
weight: 5
|
||||
weight: 4
|
||||
- name: 'Videos'
|
||||
url: 'https://tube.ryne.moe/@redchannel'
|
||||
weight: 6
|
||||
weight: 5
|
||||
- name: 'Downloads'
|
||||
url: '/downloads'
|
||||
weight: 7
|
||||
weight: 6
|
||||
- name: 'Links'
|
||||
url: '/links'
|
||||
weight: 8
|
||||
weight: 7
|
||||
- name: 'Guestbook'
|
||||
url: '/guestbook'
|
||||
weight: 9
|
||||
weight: 8
|
||||
- name: 'About'
|
||||
url: '/about'
|
||||
weight: 10
|
||||
weight: 9
|
||||
footer:
|
||||
- name: 'Blog Feed'
|
||||
url: '/blog/index.xml'
|
||||
|
|
11
content/art/2020/sniper-standup.md
Normal file
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
title: Sniper Stand-up Test
|
||||
date: 2020-12-12
|
||||
layout: art-detail
|
||||
filename: /animation/sniper-standup.webm
|
||||
alt_text: "A 3d sculpt of a short, brown haired girl. It’s only a bust."
|
||||
slug: sniper-standup
|
||||
animation: true
|
||||
arttags:
|
||||
- animation
|
||||
---
|
|
@ -1,11 +0,0 @@
|
|||
---
|
||||
title: Sakura (PC vs Quest poly)
|
||||
date: 2021-01-01
|
||||
excludefeed: true
|
||||
layout: art-detail
|
||||
filename: /art/pc-vs-quest.webp
|
||||
slug: pc-vs-quest
|
||||
characters:
|
||||
- Sakura
|
||||
nsfw: false
|
||||
---
|
|
@ -2,7 +2,7 @@
|
|||
title: Art
|
||||
layout: art
|
||||
summary: My personal art gallery.
|
||||
new_banner: You can now view select 3D pieces in your browser!
|
||||
new_banner: You can now view select 3D pieces in your browser! Animations are slowly being added back too.
|
||||
commissions: true
|
||||
aliases:
|
||||
- /gallery
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
---
|
||||
title: Stats
|
||||
layout: art-stats
|
||||
total: 187
|
||||
total: 186
|
||||
years:
|
||||
- year: 2019
|
||||
num: 60
|
||||
- year: 2022
|
||||
num: 46
|
||||
- year: 2020
|
||||
num: 29
|
||||
num: 30
|
||||
- year: 2021
|
||||
num: 28
|
||||
num: 27
|
||||
- year: 2023
|
||||
num: 8
|
||||
- year: 2016
|
||||
num: 8
|
||||
- year: 2018
|
||||
num: 7
|
||||
- year: 2016
|
||||
num: 7
|
||||
- year: 2017
|
||||
num: 1
|
||||
characters:
|
||||
|
@ -26,23 +26,25 @@ characters:
|
|||
num: 9
|
||||
- name: Merume
|
||||
num: 7
|
||||
- name: Sakura
|
||||
num: 5
|
||||
- name: Mari
|
||||
num: 5
|
||||
- name: Asuka
|
||||
num: 5
|
||||
- name: Mythra
|
||||
num: 4
|
||||
- name: Elisanne
|
||||
num: 2
|
||||
- name: Sakura
|
||||
num: 4
|
||||
- name: Byleth
|
||||
num: 2
|
||||
- name: Tifa
|
||||
- name: Rei
|
||||
num: 2
|
||||
- name: Elisanne
|
||||
num: 2
|
||||
tags:
|
||||
- name: technical
|
||||
num: 1
|
||||
- name: animation
|
||||
num: 1
|
||||
- name: landscape
|
||||
num: 7
|
||||
- name: drawpile
|
||||
|
|
37
data/3d.json
|
@ -1,37 +0,0 @@
|
|||
{
|
||||
"categories": [
|
||||
{
|
||||
"name": "Uncategorized",
|
||||
"description": "Test",
|
||||
"years": [
|
||||
{
|
||||
"year": 2016,
|
||||
"pieces": [
|
||||
{
|
||||
"title": "Lantern",
|
||||
"filename": "lantern.glb"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": 2022,
|
||||
"pieces": [
|
||||
{
|
||||
"title": "Sakura",
|
||||
"filename": "sakura.glb"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"year": 2023,
|
||||
"pieces": [
|
||||
{
|
||||
"title": "Planet Express Ship",
|
||||
"filename": "planet-express-ship.glb"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -4,6 +4,6 @@
|
|||
"goinghome",
|
||||
"orbit-correction"
|
||||
],
|
||||
"new-banner": "You can now view select 3D pieces in your browser!",
|
||||
"new-banner": "You can now view select 3D pieces in your browser! Animations are slowly being added back too.",
|
||||
"commissions": true
|
||||
}
|
||||
|
|
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 5.8 KiB |
|
@ -7,7 +7,7 @@ def write_field(f, key, value):
|
|||
f.write(key + ": " + value + "\n")
|
||||
|
||||
|
||||
def parse_art_json(output_directory, filename, json_file, threed = False):
|
||||
def parse_art_json(output_directory, filename, json_file, threed = False, animation = False):
|
||||
json_data = json.load(json_file)
|
||||
|
||||
year = None
|
||||
|
@ -46,7 +46,10 @@ def parse_art_json(output_directory, filename, json_file, threed = False):
|
|||
if "camera-fov" in json_data:
|
||||
write_field(f, 'fov', json_data["camera-fov"])
|
||||
else:
|
||||
write_field(f, 'filename', '/art/' + filename + '.webp')
|
||||
if animation:
|
||||
write_field(f, 'filename', '/animation/' + filename + '.webm')
|
||||
else:
|
||||
write_field(f, 'filename', '/art/' + filename + '.webp')
|
||||
|
||||
if "alt_text" in json_data:
|
||||
write_field(f, 'alt_text',
|
||||
|
@ -57,6 +60,9 @@ def parse_art_json(output_directory, filename, json_file, threed = False):
|
|||
if threed:
|
||||
write_field(f, 'threed', 'true')
|
||||
|
||||
if animation:
|
||||
write_field(f, 'animation', 'true')
|
||||
|
||||
characters = []
|
||||
if "characters" in json_data:
|
||||
f.write("characters:\n")
|
||||
|
@ -97,6 +103,7 @@ def parse_art_json(output_directory, filename, json_file, threed = False):
|
|||
|
||||
art_data_directory = '../art'
|
||||
threed_data_directory = '../3d'
|
||||
animation_data_directory = '../animation'
|
||||
art_output_directory = '../content/art'
|
||||
|
||||
shutil.rmtree(art_output_directory)
|
||||
|
@ -168,6 +175,35 @@ for filename in os.listdir(threed_data_directory):
|
|||
collected_years.add(year)
|
||||
total_art += 1
|
||||
|
||||
for filename in os.listdir(animation_data_directory):
|
||||
f = os.path.join(animation_data_directory, filename)
|
||||
|
||||
if os.path.isfile(f):
|
||||
filename_without_ext = os.path.splitext(filename)[0]
|
||||
|
||||
with open(f, "r") as file:
|
||||
year, characters, tags = parse_art_json(art_output_directory, filename_without_ext, file, False, True)
|
||||
|
||||
if year in year_stats:
|
||||
year_stats[year] += 1
|
||||
else:
|
||||
year_stats[year] = 1
|
||||
|
||||
for character in characters:
|
||||
if character in character_stats:
|
||||
character_stats[character] += 1
|
||||
else:
|
||||
character_stats[character] = 1
|
||||
|
||||
for tag in tags:
|
||||
if tag in tag_stats:
|
||||
tag_stats[tag] += 1
|
||||
else:
|
||||
tag_stats[tag] = 1
|
||||
|
||||
collected_years.add(year)
|
||||
total_art += 1
|
||||
|
||||
for year in collected_years:
|
||||
with open(os.path.join(art_output_directory, str(year), '_index.md'), 'w') as f:
|
||||
f.write('---\n')
|
||||
|
@ -245,4 +281,4 @@ with open(art_output_directory + '/stats/_index.md', 'w') as f:
|
|||
f.write('- name: ' + str(name) + '\n')
|
||||
f.write(' num: ' + str(num) + '\n')
|
||||
|
||||
f.write('---\n')
|
||||
f.write('---\n')
|
||||
|
|
|
@ -433,7 +433,7 @@ pre {
|
|||
}
|
||||
|
||||
model-viewer {
|
||||
height: 100vh;
|
||||
height: 600px;
|
||||
width: 100%;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
|
|
|
@ -1,34 +0,0 @@
|
|||
{{ define "main" }}
|
||||
<h2>{{ .Title }}</h2>
|
||||
|
||||
<hr>
|
||||
|
||||
{{ .Content }}
|
||||
|
||||
{{ $art := (index site.Data ($.Param "json")) }}
|
||||
{{ $newgrounds_icon := resources.Get "newgrounds.webp" }}
|
||||
|
||||
{{ range $art.categories }}
|
||||
<h3>{{ .name }}</h3>
|
||||
<p>{{ .description }}</p>
|
||||
{{ range sort .years "year" "desc" }}
|
||||
<h4>{{ .year }}</h4>
|
||||
|
||||
<div class="gallery">
|
||||
{{ range .pieces }}
|
||||
{{ $full := resources.Get (printf "%s/%s" ($.Param "json") .filename) }}
|
||||
|
||||
{{ with resources.Get $full }}
|
||||
<model-viewer src="{{ .RelPermalink }}" shadow-intensity="1" camera-controls touch-action="pan-y"></model-viewer>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{ $site := resources.Get "js/model-viewer.min.js" }}
|
||||
{{ if hugo.IsProduction }}
|
||||
{{ $site = $site | minify | fingerprint | resources.PostProcess }}
|
||||
{{ end }}
|
||||
<script type="module" src="{{ $site.RelPermalink }}" integrity="{{ $site.Data.Integrity }}"></script>
|
||||
{{ end }}
|
|
@ -5,12 +5,20 @@
|
|||
|
||||
{{ with resources.Get .Params.filename }}
|
||||
{{ if $.Params.threed }}
|
||||
{{ $cameraorbit := $.Params.orbit }}
|
||||
{{ $cameratarget := $.Params.target }}
|
||||
{{ $fov := $.Params.fov }}
|
||||
<model-viewer src="{{ .RelPermalink }}" shadow-intensity="1" camera-controls touch-action="pan-y" camera-orbit="{{ $cameraorbit }}" camera-target="{{ $cameratarget }}" field-of-view="{{ $fov }}"></model-viewer>
|
||||
{{ $cameraorbit := $.Params.orbit }}
|
||||
{{ $cameratarget := $.Params.target }}
|
||||
{{ $fov := $.Params.fov }}
|
||||
<model-viewer src="{{ .RelPermalink }}" shadow-intensity="1" camera-controls touch-action="pan-y" camera-orbit="{{ $cameraorbit }}" camera-target="{{ $cameratarget }}" field-of-view="{{ $fov }}"></model-viewer>
|
||||
{{ else }}
|
||||
<img class="article-img" style="display: block; max-height: 1000px; margin-left: auto; margin-right: auto;" alt="{{ $.Params.alt_text }}" title="{{ $.Params.alt_text }}" src="{{ .RelPermalink }}"/>
|
||||
{{ if $.Params.animation }}
|
||||
<div style="text-align: center;">
|
||||
<video controls>
|
||||
<source src="{{ .RelPermalink }}" type="video/webm">
|
||||
</video>
|
||||
</div>
|
||||
{{ else }}
|
||||
<img class="article-img" style="display: block; max-height: 1000px; margin-left: auto; margin-right: auto;" alt="{{ $.Params.alt_text }}" title="{{ $.Params.alt_text }}" src="{{ .RelPermalink }}"/>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
|
|
|
@ -3,6 +3,10 @@
|
|||
{{ $base = "3d" }}
|
||||
{{ end }}
|
||||
|
||||
{{ if .Params.animation }}
|
||||
{{ $base = "animation" }}
|
||||
{{ end }}
|
||||
|
||||
{{ $full := resources.Get (printf "%s/%s.webp" $base .Params.slug) }}
|
||||
{{ if $full }}
|
||||
|
||||
|
@ -17,7 +21,7 @@
|
|||
{{ $year = index $split 3 }}
|
||||
{{ end }}
|
||||
|
||||
<a class="no-decoration" href="{{ .Permalink }}">
|
||||
<a class="no-decoration grid-item" href="{{ .Permalink }}">
|
||||
|
||||
{{ $path := printf "/%s/%d/%.2d/%s" $base (int $year) (int $month) $filename_without_ext}}
|
||||
{{ $title := .Params.title }}
|
||||
|
@ -28,7 +32,18 @@
|
|||
{{ end }}
|
||||
|
||||
{{ with $image }}
|
||||
<img class="grid-item" width="{{ .Width }}" height="{{ .Height }}" alt="{{ $title }}" title="{{ $title }}" src="{{ .Permalink }}"/>
|
||||
{{ if $.Params.threed }}
|
||||
{{ with resources.Get "3d.png" }}
|
||||
<img alt="Viewable 3D" title="Viewable 3D" style="z-index: 1; position: absolute; left: 10px; top: 10px" src="{{ .Permalink }}" />
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{ if $.Params.animation }}
|
||||
{{ with resources.Get "play-circle.png" }}
|
||||
<img alt="Viewable Animation" title="Viewable Animation" style="z-index: 1; position: absolute; left: 10px; top: 10px" src="{{ .Permalink }}" />
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
<img width="{{ .Width }}" height="{{ .Height }}" alt="{{ $title }}" title="{{ $title }}" src="{{ .Permalink }}">
|
||||
{{ else }}
|
||||
<p>Thumbnail not found!</p>
|
||||
{{ end }}
|
||||
|
|