Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f5eeb4bd04 | |||
| 4d28f8f346 | |||
| e7f299c38b | |||
| 5a812dbabe | |||
| a22be85d5e | |||
| 69482b9785 | |||
| 3fe19f92a3 | |||
| d998a59fda | |||
| 1be1a7d451 | |||
| 59c6086c3c | |||
| d9549668a4 | |||
| ef9e221f27 | |||
| d051309253 |
@@ -1,68 +0,0 @@
|
||||
name: "Build & Publish"
|
||||
|
||||
on: [push]
|
||||
|
||||
concurrency:
|
||||
group: build-publish
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: "Build"
|
||||
runs-on: "ubuntu-22.04"
|
||||
strategy:
|
||||
fail-fast: true
|
||||
steps:
|
||||
- name: "Install Build Tools"
|
||||
shell: bash
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install ruby-full build-essential zlib1g-dev
|
||||
echo "GEM_HOME=$HOME/gems" >> "${GITHUB_ENV}"
|
||||
echo "PATH=$HOME/bin:$PATH" >> "${GITHUB_ENV}"
|
||||
sudo gem install bundler
|
||||
- name: "Clone"
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: recursive
|
||||
fetch-depth: 0
|
||||
- name: "Install Dependencies"
|
||||
shell: bash
|
||||
run: |
|
||||
bundle install
|
||||
- name: "Build"
|
||||
shell: bash
|
||||
run: |
|
||||
bundle exec jekyll clean --destination build
|
||||
bundle exec jekyll build --destination build
|
||||
- name: "Upload Artifact"
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: "build/"
|
||||
if-no-files-found: error
|
||||
retention-days: 7
|
||||
compression-level: 0
|
||||
publish:
|
||||
name: "Publish"
|
||||
runs-on: "ubuntu-22.04"
|
||||
needs: build
|
||||
strategy:
|
||||
fail-fast: true
|
||||
steps:
|
||||
- name: "Download Artifact"
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
merge-multiple: true
|
||||
- name: "Restore SSH Key"
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir $HOME/.ssh
|
||||
chmod u=rwx,go= $HOME/.ssh
|
||||
echo "${{ secrets.SSHKEY }}" | base64 -d > $HOME/.ssh/id_ed25519
|
||||
chmod u=rw,go= $HOME/.ssh/id_ed25519
|
||||
echo "Host xaymar.com" >> $HOME/.ssh/config
|
||||
echo " StrictHostKeyChecking no" >> $HOME/.ssh/config
|
||||
- name: "Publish"
|
||||
shell: bash
|
||||
run: |
|
||||
rsync -v -h -P -a --delete . "com.xaymar@xaymar.com:/var/www/com.xaymar/public/com.xaymar.www/"
|
||||
@@ -1,6 +1,8 @@
|
||||
source "https://rubygems.org"
|
||||
|
||||
gem "jekyll", "~> 4.2"
|
||||
gem "csv", "~> 3.3.5"
|
||||
gem "base64", "~> 0.3.0"
|
||||
|
||||
# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
|
||||
# and associated library.
|
||||
@@ -10,8 +12,8 @@ platforms :mingw, :x64_mingw, :mswin, :jruby do
|
||||
end
|
||||
|
||||
# Performance-booster for watching directories on Windows
|
||||
#gem "wdm", "~> 0.1.1", :platforms => [:mingw, :x64_mingw, :mswin]
|
||||
gem 'wdm', '~> 0.1' if Gem.win_platform?
|
||||
gem "wdm", "~> 0.2.0", :platforms => [:mingw, :x64_mingw, :mswin]
|
||||
#gem 'wdm', '~> 0.2', :platforms => if Gem.win_platform?
|
||||
|
||||
# LiveReload/Watch: Update WebRick and EventMachine
|
||||
gem "webrick", "~> 1.7"
|
||||
|
||||
+10
-4
@@ -10,14 +10,18 @@ GEM
|
||||
specs:
|
||||
addressable (2.8.6)
|
||||
public_suffix (>= 2.0.2, < 6.0)
|
||||
base64 (0.3.0)
|
||||
bigdecimal (3.3.1)
|
||||
colorator (1.1.0)
|
||||
concurrent-ruby (1.2.3)
|
||||
csv (3.3.5)
|
||||
em-websocket (0.5.3)
|
||||
eventmachine (>= 0.12.9)
|
||||
http_parser.rb (~> 0)
|
||||
ffi (1.16.3-x64-mingw-ucrt)
|
||||
ffi (1.17.2-x64-mingw-ucrt)
|
||||
forwardable-extended (2.6.0)
|
||||
google-protobuf (4.26.1-x64-mingw-ucrt)
|
||||
google-protobuf (4.33.1-x64-mingw-ucrt)
|
||||
bigdecimal
|
||||
rake (>= 13)
|
||||
http_parser.rb (0.8.0)
|
||||
i18n (1.14.5)
|
||||
@@ -79,13 +83,15 @@ GEM
|
||||
tzinfo-data (1.2024.1)
|
||||
tzinfo (>= 1.0.0)
|
||||
unicode-display_width (2.5.0)
|
||||
wdm (0.1.1)
|
||||
wdm (0.2.0)
|
||||
webrick (1.8.1)
|
||||
|
||||
PLATFORMS
|
||||
x64-mingw-ucrt
|
||||
|
||||
DEPENDENCIES
|
||||
base64 (~> 0.3.0)
|
||||
csv (~> 3.3.5)
|
||||
eventmachine (= 1.2.7)!
|
||||
jekyll (~> 4.2)
|
||||
jekyll-feed (~> 0.12)
|
||||
@@ -94,7 +100,7 @@ DEPENDENCIES
|
||||
jekyll-redirect-from (~> 0.16)
|
||||
tzinfo (~> 1.2)
|
||||
tzinfo-data
|
||||
wdm (~> 0.1)
|
||||
wdm (~> 0.2.0)
|
||||
webrick (~> 1.7)
|
||||
|
||||
BUNDLED WITH
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
---
|
||||
title: "Imprint"
|
||||
layout: default
|
||||
comments: false
|
||||
date: "2022-01-12"
|
||||
---
|
||||
|
||||
<p class="block">Under currently applicable law (§ 5 Digitale-Dienste-Gesetz, § 18 Medienstaatsvertrag) no Imprint is required for the content provided on this personal blog. You can go through the proper legal means or contact me via the E-Mail provided in About Me.</p>
|
||||
+3
-19
@@ -5,23 +5,7 @@ comments: false
|
||||
date: "2022-01-12"
|
||||
---
|
||||
|
||||
{% capture content %}Hey, I’m the guy referred to as “Xaymar” – also known by the real name Michael Fabian Dirks. I’ve been enjoying software development for a long time now, it’s both my hobby and my job, and i love it. I’m probably a great example when it comes to “Love your job and you’ll never work a day in your life”, because so far it has only felt like work once.{% endcapture %}{% include blocks/paragraph.liquid content=content %}
|
||||
<p class="block">Heyo, I'm Xaymar, a multilingual Furry/Scaly Dragonid in the Information Technology field.
|
||||
I'm a software engineer by day and everything arts & crafts related by night. Photography, costume/cosplay creation, painting, music, DJing, whatever it is I've probably acquired basic skills in it. My current focus is on Photography and Software Development, though I'm also exploring better ways to make costumes for events.</p>
|
||||
|
||||
{% capture content %}I love playing and making games, listening to music, reading comics and books, and obviously also love programming. My favourite music genres include Drum & Bass and Psytrance, while my favourite games (so far) are Stardew Valley, Factorio, Risk of Rain, and Cave Story+.{% endcapture %}{% include blocks/paragraph.liquid content=content %}
|
||||
|
||||
{% capture content %}Anyway, that’s pretty much it. There isn’t much to me – I’m just another human, with different interests and different skills.{% endcapture %}{% include blocks/paragraph.liquid content=content %}
|
||||
{% include blocks/heading.liquid level=1 content="Contact Me" %}
|
||||
|
||||
{% capture content %}You can contact me at: info (at) xaymar (dot) com . Use the PGP key below for End-To-End Encryption.{% endcapture %}{% include blocks/paragraph.liquid content=content %}
|
||||
|
||||
{% capture content %}-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
xjMEYJJ1RxYJKwYBBAHaRw8BAQdA53AIvujGXIV3x8M4Ns4yXf7/fdpuBjDXL8uybq1lvUTNL01p
|
||||
Y2hhZWwgRmFiaWFuICdYYXltYXInIERpcmtzIDxpbmZvQHhheW1hci5jb20+wpEEExYIADkWIQR7
|
||||
gh48yk5u6aS6TDX9mKsqgjje9AUCYJJ1RwUJBaOagAIbAwULCQgHAgYVCAkKCwIFFgIDAQAACgkQ
|
||||
/ZirKoI43vSzYQD+OOltB/VAFhKix/35+QuXiCHhw2ysg5grbHdHHmc5wTYBAOXJWnUKBLTB5mTk
|
||||
ZWz5QidppY3EommiNgH5jGKB6nQBzjgEYJJ1RxIKKwYBBAGXVQEFAQEHQHWxRf2UzBDhhjqgUhq/
|
||||
x+mxFhYepi6wcN9DPbdKMpsoAwEIB8J+BBgWCAAmFiEEe4IePMpObumkukw1/ZirKoI43vQFAmCS
|
||||
dUcFCQWjmoACGwwACgkQ/ZirKoI43vQ9UgEA/rcGHvgIgN3HWowTbSZ1eFbUIjQhcSslq9LTB196
|
||||
pT4A+gMR7FyY7U2erlW74dEBzJbGu9otL5YKeLgTygLa7C0E
|
||||
=KrxB
|
||||
-----END PGP PUBLIC KEY BLOCK-----{% endcapture %}{% include blocks/code.liquid content=content %}
|
||||
<p class="block">If you want to get into contact with me you can do so either through <a class="inline" target="_blank" href="https://linktr.ee/xaymar">my Socials</a> or by E-Mail: <code class="inline">info (at) xaymar (dot) com</code></p>
|
||||
|
||||
@@ -70,11 +70,6 @@ collections:
|
||||
posts:
|
||||
output: false
|
||||
label: "Articles"
|
||||
games:
|
||||
output: true
|
||||
permalink: '/games/:path/'
|
||||
label: "Games"
|
||||
sort_by: title
|
||||
guides:
|
||||
output: true
|
||||
permalink: '/guides/:path/'
|
||||
|
||||
+29
-110
@@ -1,41 +1,11 @@
|
||||
{
|
||||
"home": {
|
||||
"name": "Home",
|
||||
"url": "/",
|
||||
"entries": {
|
||||
"news": {
|
||||
"name": "News",
|
||||
"url": "/category/news/",
|
||||
"blank": false,
|
||||
"entries": {
|
||||
"progress-reports": {
|
||||
"name": "Progress Reports",
|
||||
"url": "/category/progress-reports/",
|
||||
"blank": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"blog": {
|
||||
"name": "Blogs",
|
||||
"url": "/category/blog/",
|
||||
"blank": false
|
||||
},
|
||||
"review": {
|
||||
"name": "Reviews",
|
||||
"url": "/category/review/",
|
||||
"blank": false
|
||||
}
|
||||
}
|
||||
"name": "Blog",
|
||||
"url": "/"
|
||||
},
|
||||
"games": {
|
||||
"name": "Games",
|
||||
"entries": {
|
||||
"remnant2": {
|
||||
"name": "Remnant 2",
|
||||
"url": "games/remnant2/",
|
||||
"blank": false
|
||||
}
|
||||
}
|
||||
"project": {
|
||||
"name": "Projects",
|
||||
"url": "/projects"
|
||||
},
|
||||
"guides": {
|
||||
"name": "Guides",
|
||||
@@ -51,6 +21,21 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"games": {
|
||||
"name": "Games",
|
||||
"entries": {
|
||||
"remnant2": {
|
||||
"name": "Remnant 2",
|
||||
"url": "guides/games/remnant2/",
|
||||
"blank": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"lost_knowledge": {
|
||||
"name": "Lost Knowledge & Secrets",
|
||||
"url": "guides/lost-knowledge-and-secrets/",
|
||||
"blank": false
|
||||
},
|
||||
"recording": {
|
||||
"name": "High Quality Recording (in OBS Studio)",
|
||||
"url": "guides/obs/high-quality-recording/",
|
||||
@@ -92,76 +77,6 @@
|
||||
"blank": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"lost_knowledge": {
|
||||
"name": "Lost Knowledge & Secrets",
|
||||
"url": "guides/lost-knowledge-and-secrets/",
|
||||
"blank": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"project": {
|
||||
"name": "Projects",
|
||||
"entries": {
|
||||
"obs-studio": {
|
||||
"name": "OBS Studio",
|
||||
"entries": {
|
||||
"amd-encoder": {
|
||||
"name": "AMD Encoders",
|
||||
"url": "/projects/obs/amd-encoder/",
|
||||
"blank": false
|
||||
},
|
||||
"ffmpeg-encoder": {
|
||||
"name": "FFmpeg Encoders",
|
||||
"url": "/projects/obs/ffmpeg-encoder/",
|
||||
"blank": false
|
||||
},
|
||||
"ocean-blue": {
|
||||
"name": "Ocean Blue",
|
||||
"url": "/projects/obs/ocean-blue/",
|
||||
"blank": false
|
||||
},
|
||||
"streamfx": {
|
||||
"name": "StreamFX",
|
||||
"url": "/projects/obs/streamfx/",
|
||||
"blank": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"voicefx": {
|
||||
"name": "VoiceFX (for VST)",
|
||||
"url": "/projects/voicefx/",
|
||||
"blank": false
|
||||
},
|
||||
"all": {
|
||||
"name": "All Projects",
|
||||
"url": "/projects/",
|
||||
"blank": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"socials": {
|
||||
"name": "Socials",
|
||||
"entries": {
|
||||
"discord": {
|
||||
"name": "Discord",
|
||||
"url": "https://s.xaymar.com/discord",
|
||||
"blank": true
|
||||
},
|
||||
"github": {
|
||||
"name": "GitHub",
|
||||
"url": "https://s.xaymar.com/github",
|
||||
"blank": true
|
||||
},
|
||||
"patreon": {
|
||||
"name": "Patreon",
|
||||
"url": "https://s.xaymar.com/patreon",
|
||||
"blank": true
|
||||
},
|
||||
"twitch": {
|
||||
"name": "Twitch",
|
||||
"url": "https://s.xaymar.com/twitch",
|
||||
"blank": true
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -169,15 +84,19 @@
|
||||
"name": "About Me",
|
||||
"url": "/about/me/",
|
||||
"entries": {
|
||||
"socials": {
|
||||
"name": "Social Links",
|
||||
"url": "https://linktr.ee/xaymar",
|
||||
"blank": true
|
||||
},
|
||||
"imprint": {
|
||||
"name": "Imprint",
|
||||
"url": "/about/imprint/"
|
||||
},
|
||||
"privacy": {
|
||||
"name": "Privacy Policy",
|
||||
"url": "about/privacy/",
|
||||
"blank": false
|
||||
},
|
||||
"rss": {
|
||||
"name": "RSS Feed",
|
||||
"url": "/feed.xml",
|
||||
"blank": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,100 +0,0 @@
|
||||
---
|
||||
title: "Remnant 2: All Builds for Armor, Weapons, Rings, Amulets, etc."
|
||||
category: [ "Build" ]
|
||||
tags: ["Remnant 2", "Build"]
|
||||
---
|
||||
|
||||
<p class="block">Remnant 2, also known as "What Remnant: From the Ashes" should have been, is finally out and I've already finished the entire game - 5 times. It is incredibly fun and addictive, especially due to the depth of the game - not just randomly generated maps, but also a lot of layered secrets. Anyway, here are my builds that I've used so far.</p>
|
||||
|
||||
<details class="block" open>
|
||||
<summary><h1>Armor Builds</h1></summary>
|
||||
<p class="block">Armor builds will be titled with what they give to be easier to sort through. The title will be in the following format: </p>
|
||||
<code class="block">#W(eight) ##.#%(Damage Resistance), #Bl(eed), #F(ire), #E(lectricity), #A(cid), #B(l)i(ght)</code>
|
||||
|
||||
<details class="block">
|
||||
<summary><h2>50W, 52.9% DR, 9Bl, 7F, 1E, 2A, 8Bi</h2></summary>
|
||||
<p class="block">This build prioritizes Armor per point of Weight efficiency to arrive at the maximum possible armor (that I know of) for exactly 50 Weight. This preserves medium rolling, while reducing damage by about half.</p>
|
||||
<table class="block">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Slot</th>
|
||||
<th>Item</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tr>
|
||||
<th>Helmet</th>
|
||||
<td>Nightstalker Shroud</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Body Armor</th>
|
||||
<td>Fae Royal Bodyplate</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Leg Armor</th>
|
||||
<td>Fae Royal Greaves</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Glove Armor</th>
|
||||
<td>Academic's Gloves</td>
|
||||
</tr>
|
||||
</table>
|
||||
</details>
|
||||
</details>
|
||||
|
||||
<details class="block" open>
|
||||
<summary><h1>Equipment Builds</h1></summary>
|
||||
|
||||
<p class="block">Terminology: </p>
|
||||
<ul class="block">
|
||||
<li>DPS: Damage per Second</li>
|
||||
<li>RDPS: Ranged DPS (only affects Guns)</li>
|
||||
<li>WDPS: Weakspot DPS</li>
|
||||
<li>BDPS: Body DPS</li>
|
||||
<li>CDPS: Critical Hit DPS</li>
|
||||
<li>Crit: Critical Hit Chance</li>
|
||||
<li>Range: Weapon Effectiveness Range</li>
|
||||
<li>RoF: Rate of Fire</li>
|
||||
</ul>
|
||||
|
||||
<details class="block">
|
||||
<summary><h2>High RoF Ranged Damage Build</h2></summary>
|
||||
<p class="block">This is one of the builds I accidentally stumbled upon that ended up working, and has become my go-to for Apocalypse run since then. It works for any boss, though bosses that fly far away tend to require more bullets due to the distance fall off. It is recommended to take the Longshot (Hunter) trait at Level 3 or higher.</p>
|
||||
|
||||
<h3 class="block">Long Gun</h3>
|
||||
<p class="block">Of interest here are the high RoF weapons with decent Critical Hit Chance, as well as decent Weak Spot Damage Bonus. Particularly, the <i>Blackmaw AR-47</i> and the <i>Chicaco Typewriter</i> are decent options, with the former being available much sooner than the latter. </p>
|
||||
|
||||
<p class="block">Since we mainly focus damage here, the ideal mods are <i>Corrosive Rounds</i> for extra Critical Hit Chance, or <i>Hot Shot</i> for extra Ranged Damage. If you have Gun Mutators available, you have three choices: <i>Refunder</i> to maintain damage for longer, <i>Momentum</i> for even more Critical Hit Chance and Critical Hit Damage, and <i>Twisting Wounds</i> for Bleeding and +20% DPS to Bleeding targets.</p>
|
||||
|
||||
<h3 class="block">Handgun</h3>
|
||||
<p class="block">The selection for Handguns is similar to Long Guns: We prefer high RoF with decent Critical Hit Chance over anything else. So far the <i>MP60-R</i> and <i>Tech 22</i> appear to be decent options. The Mod and Mutator slots are freely assignable here, so taking utility (such as the crowd control <i>Firestorm</i>) should be preferred over additional damage.</p>
|
||||
|
||||
<h3 class="block">Amulet</h3>
|
||||
<p class="block">Once again, this is a multiple choice selection, but this time there's only two viable options. <i>Full Moon Circlet</i> gives us +20% DPS when we are at full health, otherwise it gives us +3% Lifesteal for Ranged Damage. <i>Ankh of Power</i> gives us a flat +17% DPS increase at all times. As having less than 100% health is cringe, taking the <i>Full Moon Circlet</i> is the obvious choice.</p>
|
||||
|
||||
<h3 class="block">Rings</h3>
|
||||
<p class="block">If you've gotten tired of multiple choice selections, here's unfortunately another one due to some bosses having no Weakspot for most of the fight. We've got three preferred rings, and some optional rings from which you can pick one. If skillful survival isn't your thing, you can also pick none of the optional rings, which drops overall damage by about 20%.</p>
|
||||
|
||||
<p class="block">The preferred rings are:</p>
|
||||
<ul class="block">
|
||||
<li><i>Stone of Expanse</i> (+12% RDPS)</li>
|
||||
<li><i>Probability Cord</i> (+30% CDPS)</li>
|
||||
<li><i>Burden of the Destroyer</i> (+15% RDPS, -25% Range)</li>
|
||||
</ul>
|
||||
|
||||
<p class="block">The optional rings are:</p>
|
||||
<ul class="block">
|
||||
<li><i>Zania's Malice</i> (up to +30% WDPS)<br/>
|
||||
This is build [A] and results in roughly 1350 WDPS, with 550 BDPS.
|
||||
</li>
|
||||
<li><i>Burden of the Gambler</i> (+20% CDPS, +10% Crit, -100% WDPS)<br/>
|
||||
This is build [B] and results in roughly 800 BDPS only.
|
||||
</li>
|
||||
<li><i>Stone of Balance</i> (+7% DPS)<br/>
|
||||
This is build [C] and results in roughly 1220 WDPS, with 580 BDPS.
|
||||
</li>
|
||||
<li><i>Anything else</i><br />
|
||||
This is the default build and results in roughly 1180 WDPS with 550 BDPS.
|
||||
</li>
|
||||
</ul>
|
||||
</details>
|
||||
</details>
|
||||
@@ -1,4 +1,12 @@
|
||||
</div>
|
||||
{% include footer.liquid %}
|
||||
</body>
|
||||
<script>
|
||||
(function() {
|
||||
// Support for Mobile Devices
|
||||
document.querySelector("#navigation-toggle").addEventListener("click", (ev) => {
|
||||
document.querySelector("#header #navigation").classList.toggle("open");
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
</html>
|
||||
|
||||
@@ -21,13 +21,13 @@
|
||||
<meta property="og:url" content="{{ site.url | absolute_url }}" />
|
||||
{% endif %}
|
||||
<meta property="og:site_name" content="{{ site.title }}" />
|
||||
<meta property="og:title" content="{{ page.autopages.display_name | default: page.autopage.display_name | default: page.title | default: site.title | strip_html }}" />
|
||||
<meta property="og:title" content="{{ page.autopages.display_name | default: page.autopage.display_name | default: page.title | default: site.title | strip_html | xml_escape }}" />
|
||||
{% if site.xaymar.opengraph.excerpt.enabled == true %}
|
||||
<meta name="description" content="{{ page.excerpt | default: site.description | strip_html | normalize_whitespace | truncatewords: site.xaymar.opengraph.excerpt.length }}" />
|
||||
<meta property="og:description" content="{{ page.excerpt | default: site.description | strip_html | normalize_whitespace | truncatewords: site.xaymar.opengraph.excerpt.length }}" />
|
||||
<meta name="description" content="{{ page.excerpt | default: site.description | strip_html | normalize_whitespace | truncatewords: site.xaymar.opengraph.excerpt.length | xml_escape }}" />
|
||||
<meta property="og:description" content="{{ page.excerpt | default: site.description | strip_html | normalize_whitespace | truncatewords: site.xaymar.opengraph.excerpt.length | xml_escape }}" />
|
||||
{% else %}
|
||||
<meta name="description" content="{{ site.description | strip_html }}" />
|
||||
<meta property="og:description" content="{{ site.description | strip_html }}" />
|
||||
<meta name="description" content="{{ site.description | strip_html | xml_escape }}" />
|
||||
<meta property="og:description" content="{{ site.description | strip_html | xml_escape }}" />
|
||||
{% endif %}
|
||||
<meta property="og:type" content="{{ page.opengraph.type | default: "website" }}" />
|
||||
{% if page.opengraph.image != nil %}
|
||||
@@ -43,9 +43,9 @@
|
||||
{% endif %}
|
||||
<meta property="article:published_time" content="{{ page.date | default: site.time | date_to_xmlschema }}" />
|
||||
{% if page.title == nil %}
|
||||
<title>{{ site.title }} - {{ site.tagline }} </title>
|
||||
<title>{{ site.title | xml_escape }} - {{ site.tagline | xml_escape }} </title>
|
||||
{% else %}
|
||||
<title>{{ page.autopages.display_name | default: page.autopage.display_name | default: page.title }} | {{ site.title }} - {{ site.tagline }} </title>
|
||||
<title>{{ page.autopages.display_name | default: page.autopage.display_name | default: page.title | xml_escape }} | {{ site.title | xml_escape }} - {{ site.tagline | xml_escape }} </title>
|
||||
{% endif %}
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="icon" href="{{ site.xaymar.data.logo | absolute_url }}">
|
||||
@@ -55,10 +55,5 @@
|
||||
<!-- Code, Fonts, Styles -->
|
||||
<link rel="stylesheet" href="{{ site.xaymar.data.fonts | absolute_url }}?ts={{ site.time | date_to_xmlschema }}">
|
||||
<link rel="stylesheet" href="{{ site.xaymar.data.css | absolute_url }}?ts={{ site.time | date_to_xmlschema }}">
|
||||
<script defer src="{{ site.xaymar.data.assets | absolute_url }}/js/lazyload.mjs?ts={{ site.time | date_to_xmlschema }}"></script>
|
||||
<script defer src="{{ site.xaymar.data.assets | absolute_url }}/js/navigation.mjs?ts={{ site.time | date_to_xmlschema }}"></script>
|
||||
<script defer src="{{ site.xaymar.data.assets | absolute_url }}/js/mediaPlayer.mjs?ts={{ site.time | date_to_xmlschema }}"></script>
|
||||
<script defer src="{{ site.xaymar.data.assets | absolute_url }}/js/highlight.mjs?ts={{ site.time | date_to_xmlschema }}"></script>
|
||||
<script defer src="{{ site.xaymar.data.js | absolute_url }}?ts={{ site.time | date_to_xmlschema }}"></script>
|
||||
<!-- Highlight.js: https://highlightjs.org/ -->
|
||||
<link rel="stylesheet" href="{{ site.xaymar.data.assets | absolute_url }}/js/highlightjs/styles/default.min.css?ts={{ site.time | date_to_xmlschema }}">
|
||||
<link rel="stylesheet" href="{{ site.xaymar.data.assets | absolute_url }}/js/highlightjs/styles/default.min.css?ts={{ site.time | date_to_xmlschema }}">
|
||||
|
||||
+3
-1
@@ -4,7 +4,9 @@ category: Blog
|
||||
tags: ["JavaScript", "TypedArray", "WordPress Archive"]
|
||||
---
|
||||
|
||||
<p class="block">As a Programmer I have to deal with a number of programming languages to write code, and one language that repeatedly appears is JavaScript. JavaScript is one of the <a rel="noreferrer noopener" href="https://www.youtube.com/watch?v=et8xNAc2ic8" data-type="URL" data-id="https://www.youtube.com/watch?v=et8xNAc2ic8" target="_blank">weirder languages</a> - similar to PHP in weirdness - which makes it an interesting experience to say the least. Most of the time you're at the whim of a grey box compiler, due to the massive variance of Browsers and Devices that the users use. </p>
|
||||
<p class="block">As a Programmer I have to deal with a number of programming languages to write code, and one language that repeatedly appears is JavaScript. JavaScript is one of the <a rel="noreferrer noopener" href="https://www.youtube.com/watch?v=et8xNAc2ic8" data-type="URL" data-id="https://www.youtube.com/watch?v=et8xNAc2ic8" target="_blank">weirder languages</a> - similar to PHP in weirdness - which makes it an interesting experience to say the least. Most of the time you're at the whim of a grey box compiler, due to the massive variance of Browsers and Devices that the users use. </p><!--more-->
|
||||
|
||||
<alert class="block" data-type="info">As of 2024 there are <a class="inline" target="_blank" href="https://jsbench.me/pym3eou78u">even faster options</a> and this article has even been turned into a <a class="inline" target="_blank" href="https://github.com/jawj/hextreme">proper NPM modules</a>. Not listed is a variant of the code that is NodeJS specific which uses Buffer.from().text() instead of TextDecoder.</alert>
|
||||
|
||||
<p class="block">So in order to best approach reality, I have to figure out which APIs are available at any point in time, and also run performance benchmarks in current major browsers available to me. And that's what todays post is about, finding which of the various methods is fast enough for high performance use.</p><!--more-->
|
||||
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
---
|
||||
title: "Relic Odyssey: Surprisingly Good after a Rough Start"
|
||||
category: [ "Review" ]
|
||||
tags: ["Review", "Exploration", "Action", "Shooter", "First-Person" ]
|
||||
published: false
|
||||
---
|
||||
|
||||
<p class="block">A few months ago I was playtesting "Relic Odyssey: Ruins of Xantao", and at the time it was terrible: riddled with bugs, grindy mechanics, poor design choices, and so on. I shared my feedback with the developer and held off on publicly reviewing it, hoping for improvements but expecting the usual behavior. To my surprise, some of the concerns have been addressed in an update, so why not take a new look?</p><!--more-->
|
||||
|
||||
<alert class="block" data-type="info"><b>Disclosure:</b> I received a free review copy of this product via <a href="https://game.page/relicodyssey/Xaymar" target="__blank">KeyMailer</a> from <a href="https://www.honourboundgamestudios.com/" target="_blank">Honor Bound Game Studios Inc</a>. I did not receive additional compensation for this review. This review contains my personal opinion only.</alert>
|
||||
|
||||
<p class="block">These days games tend to have the habit of permanently damaging your hearing with loud music and sounds when started. So imagine my surprise when I started the game, and it was already at a pleasant volume. Throughout the entire play test I did not have to adjust the volume of anything once, and could just lose myself in the game. Continuing on with the game itself, I created a new save file, and entered the game... 's tutorial section.</p>
|
||||
|
||||
<p class="block">For unclear reasons, the developers chose to frontload the game with an unnecessary amount of information, instead of teaching through gameplay itself. I thought we had solved this problem with the release of Half Life 2 in 2004, but it appears that isn't the case. This section of the game is too long, with even my fastest attempts on average spending 10 minutes in this section. Some of the NPCs walk slow enough that I can make an instant coffee and be back before the NPC has reached its destination.</p>
|
||||
|
||||
<figure class="block float-end float-right clear size-preview">
|
||||
<img src="https://share.xaymar.com/view/b4ff5573-3847-4e32-a2c5-fcd2816052df">
|
||||
<figcaption>Help, I broke the sky.</figcaption>
|
||||
</figure><p class="block">This was one of my gripes with the first playtest, but at least they're now a bit faster than back then. Progress is progress. Once you're through the tutorial section, you can either explore the area around your base, or go digging into the main part of the game. You explore for resources that can only be found in the "overworld", and go digging for common resources and story progress. I had already done enough exploration by speedrunning the tutorial section, so I went with the latter.</p>
|
||||
|
||||
<p class="block">Both sections of the game are mostly the same. You find something interesting, explore it, kill any hostiles (and anything non-hostile, no witnesses), loot resources and items, and then return. For the digging & delving part, you'll sometimes stumble upon a dungeon, which you can delve into, shifting focus to killing hostiles before looting. These dungeons tend to be relevant to story progression mainly, but occasionally hold important material for improving yourself.</p>
|
||||
|
||||
<figure class="block float-end float-right clear size-preview">
|
||||
<img class="block" src="https://share.xaymar.com/view/34dad308-97ac-4bd7-91fd-3b861a3b0005">
|
||||
<figcaption>What can be looted here?</figcaption>
|
||||
</figure><p class="block">Exploring itself is mostly walking around and occasionally using the scanner you're given to check if there is a resource. It helps with figuring out what is interactive and what isn't too, but unfortunately it isn't all that helpful. I've encountered several resources that were interactive but weren't highlighted by the scanner, and the other way around too.</p>
|
||||
|
||||
<figure class="block float-end float-right clear size-preview">
|
||||
<img class="block" src="https://share.xaymar.com/view/6b6886e0-bee5-47f0-b12b-b170921446bb">
|
||||
<figcaption>Oh, I see.</figcaption>
|
||||
</figure>
|
||||
<p class="block">The game very clearly lacks visual clarity and distinctive visuals for interactive and non-interactive objects. It opts to instead force you to use a clunky time limited mechanic that recharges at a snails pace to pad out the game further. It almost felt like I was playing a mediocre Triple-A title at times...</p>
|
||||
|
||||
<p class="block">And unfortunately that's when it hit me: The entire "overworld" area and "story" could be cut out entirely, shifting focus entirely to the digging and delving part. It would tighten the gameplay loop significantly, reducing the boring parts, and wouldn't cut away any significant material or immersion at all. That's something you only see from your average Triple-A title with the Open World Collect-A-Thon, and isn't something you want in your game.</p>
|
||||
|
||||
<p class="block">Anyway, overall the game is currently fun, but over extended periods tends to get boring quickly. It lacks the "punch" or "catchiness" of similar titles, and is very clearly still unfinished. The developers behind it also appear to have big plans, but if they can make those plans reality is a different story entirely.</p>
|
||||
|
||||
<h1 class="block clear">The Good, Bad and Ugly</h1>
|
||||
|
||||
<h2 class="block">The Good</h2>
|
||||
<ul class="block">
|
||||
<li>I still have my hearing despite launching the game, which is rather refreshing.</li>
|
||||
<li>Sound effects and music appear to be balanced well enough to not be distracting</li>
|
||||
<li>The style for each area fits together and suggests actual design choices took place, and is often nice to look at.</li>
|
||||
<li>The crafting and research systems is free of timer-ities, which has infected the majority of games out there.</li>
|
||||
<li>Procedurally generated dungeons have proper length for enjoyable delving, and aren't overly complex. They do lack a bit of variety however.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="block">The Bad</h2>
|
||||
<ul class="block">
|
||||
<li>Some assets have occlusion boxes larger than themselves, resulting in visible gaps in the world.</li>
|
||||
<li>Awful performance which appears to come from having Shadows enabled.</li>
|
||||
<li>Sometimes textures and models don't load in properly, with no reason for why.</li>
|
||||
<li>Much of the game is unnecessarily padded out, probably to make up for a lack of timer-ities.</li>
|
||||
<li>All bosses encountered in dungeons are laughable easy, often avoidable by inching slightly to the left.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="block">The Ugly</h2>
|
||||
<ul class="block">
|
||||
<li>There's hardly any feedback for being shot or shooting something and it makes combat feel horrible.</li>
|
||||
<li>The voice acting is horrendous at times, often sounding like AI generated slop.</li>
|
||||
<li>A complete lack of visual distinction between what is and isn't interactive makes this game a nightmare for 90s Adventure Game haters.</li>
|
||||
<li>Randomly resources just don't want to be gathered, for no apparent reason.</li>
|
||||
</ul>
|
||||
|
||||
<h1 class="block">Final words</h1>
|
||||
<p class="block">As it currently is, my recommendation is "if you've got nothing better". The game is still in Early Access, so its current state isn't representative of the final product, and that shows in many areas. Who knows what progress the developers manage to make by the end of next year, maybe it'll be nothing like what's described here.</p>
|
||||
@@ -0,0 +1,23 @@
|
||||
---
|
||||
title: "AI-Crawlers are ending the web as we know it"
|
||||
category: [ "Blog" ]
|
||||
tags: [ "AI", "Machine Learning", "Crawler", "robots.txt", ]
|
||||
---
|
||||
|
||||
<p class="block">Today's gonna be a bit of a ranter. The whole AI-Crawler situation has gone from bad to awful, potentially ending the web as we know it. AI companies like OpenAI (ChatGPT) and Anthropic (Claude) have gotten so used to stealing that they're no longer afraid to cause extreme costs to others for their own gain. Many of them now employ crawlers that include methods to bypass limits and filters. It needs to stop.</p><!--more-->
|
||||
|
||||
<p class="block">I've personally been hit by OpenAI weeks ago, which managed to <a href="https://x.com/Xaymar/status/1831961709327880250" target="_blank">generate 49 TB of traffic costing me about 13€ for that day</a>, and later on Anthropic tried to do the same based on the access logs. And it seems I'm not the only one, with <a href="https://blog.uberspace.de/2024/08/bad-robots/" target="_blank">Uberspace</a> being hit even worse. <a href="https://x.com/rileyb3d/status/1831375847212904566" target="_blank">rileyb3d appears to have been harassed in a similar way and was forced to take down their own website entirely.</a> And you know it's gotten really bad when CloudFlare out of all things makes their AI-Crawler protection tool available for Free users. They only make things available for Free users that are widespread, so even CloudFlare has had enough now.</p>
|
||||
|
||||
<p class="block">This situation has completely spiraled out of control for everyone and I don't see much future in the free web anymore if it continues. AI Companies no longer care about copyright, licensing or similar, and it's only going to get worse until governments wake up. Any work you published is being used to train AI models, no matter if your license allows for it or requires payment. None of them care, and lawsuits are piling up.</p>
|
||||
|
||||
<p class="block">Anyway, bypassing the whole ranting part, I'd like to share how to identify AI-Crawlers and protect yourself a bit. The "Captain Obvious" protection is to not publicly post anything you don't want used in AI model training, but that's not what I'm aiming for. Over the few weeks after the OpenAI DDoS, I've been able to identify a few of the bots by their User Agent:</p>
|
||||
|
||||
<ul class="block">
|
||||
<li>OpenAI (ChatGPT) uses <code>OpenAI</code>, <code>GPT</code>, <code>OAI-SearchBot</code>, and <code>OAI-Bot</code>. Filter out any User Agent containing these, and you shut down most of their AI-Crawling.</li>
|
||||
<li>Anthropic (Claude) so far only uses <code>claudebot</code>, with no other User Agents matching their IPs.</li>
|
||||
<li>OpenAI also appears to occasionally use <code>facebook.com/externalhit</code>, as it has been tracked to match their IP range in the same hour as an OpenAI crawling attempt.</li>
|
||||
<li>Amazon appears to only use <code>amazonbot</code> and <code>facebook.com/externalhit</code>.</li>
|
||||
<li>Many open source AI-Crawlers use <code>GPT</code>, <code>OpenAI</code>, <code>facebook.com/externalhit</code>, and even <code>Chrome/124.0.6367.118</code>. Not even proper browser user agents are safe from this greed.</li>
|
||||
</ul>
|
||||
|
||||
<p class="block">If you're using nginx, you should consider filtering on a global level, and this doesn't appear to be the first time either. <a href="https://github.com/mariusv/nginx-badbot-blocker/tree/master"></a>MariusV (on Github)</a> appears to have done prior work similar reasons, and <a href="https://share.xaymar.com/view/b00f767b-7bf1-4cb6-9561-07463536ab0d" target="_blank">my own variant of his scripts</a> simply add the known bots to it. Include it, then redirect the bots to AI generated slop with <code>if($bad_crawler)</code> and <code>if($bad_referrer)</code>. Bet they'll enjoy poisoning their own training data.</p>
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: "Path of Exile 2"
|
||||
category: [ "Blog" ]
|
||||
tags: [ "Path of Exile", "PoE", "Path of Exile 2", "PoE2" ]
|
||||
---
|
||||
|
||||
Gonna be enjoying a newly released indie game for abit. See ya all next year!
|
||||
@@ -1,17 +0,0 @@
|
||||
---
|
||||
layout: default
|
||||
title: "AMD AMF Encoders (for OBS Studio)"
|
||||
comments: false
|
||||
date: "2022-03-07"
|
||||
---
|
||||
|
||||
{% capture content %}The AMD Encoder plugin for OBS Studio enables AMD GPU owners to use their GPUs to encode H.264 and H.265 video directly. It leverages the AMF SDK (and in older versions a Media Codec SDK), which enables direct integration of AMDs video engine into other Software. At the peak of its lifetime, the AMD Encoder was integrated into OBS Studio and became part of its core toolset.{% endcapture %}{% include blocks/paragraph.liquid content=content %}
|
||||
|
||||
{% capture content %}The project is now unmaintained and completely abandoned, after the de-facto only maintainer (me) left the project. This decision was made due to repeated disagreements with the OBS Project team and harassment from people affiliated with the OBS Project team.{% endcapture %}{% include blocks/paragraph.liquid content=content %}
|
||||
|
||||
{% include blocks/heading.liquid level=2 content="Further Links" float="clear" %}
|
||||
{% capture content %}
|
||||
<li>{% include inline/link.liquid url="https://github.com/obsproject/obs-amd-encoder" content="Source Code" %}</li>
|
||||
<li>{% include inline/link.liquid url="https://obsproject.com/forum/threads/amd-hardware-encoder-s-deleted.52305/" content="Project thread on OBS Project" %}</li>
|
||||
<li>{% include inline/link.liquid url="https://web.archive.org/web/20200302051056/https://obsproject.com/forum/resources/amd-hardware-encoder-s.427/" content="Resource on OBS Project (Archived)" %}</li>
|
||||
{% endcapture %}{% include blocks/list.liquid content=content %}
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
layout: default
|
||||
title: "FFmpeg Encoders (for OBS Studio)"
|
||||
comments: false
|
||||
date: "2022-03-07"
|
||||
---
|
||||
|
||||
{% capture content %}FFmpeg Encoders (for OBS Studio) enabled the use of FFmpeg encoders directly in OBS Studio. As the code base had massive overlaps with StreamFX's code, it was merged into StreamFX and is now a core feature of it.{% endcapture %}{% include blocks/paragraph.liquid content=content %}
|
||||
|
||||
{% include blocks/heading.liquid level=2 content="Further Links" float="clear" %}
|
||||
{% capture content %}
|
||||
<li>{% include inline/link.liquid url="https://github.com/xaymar/obs-ffmpeg-encoder" content="Source Code" %}</li>
|
||||
<li>{% include inline/link.liquid url="https://obsproject.com/forum/threads/ffmpeg-encoders-for-obs-studio.108253/" content="Project thread on OBS Project" %}</li>
|
||||
<li>{% include inline/link.liquid url="https://obsproject.com/forum/resources/ffmpeg-encoders-for-obs-studio.826/" content="Resource on OBS Project (Archived)" %}</li>
|
||||
{% endcapture %}{% include blocks/list.liquid content=content %}
|
||||
@@ -1,43 +0,0 @@
|
||||
---
|
||||
layout: default
|
||||
title: "Ocean Blue, an eye friendly OBS Studio Theme"
|
||||
comments: false
|
||||
date: "2022-02-25"
|
||||
---
|
||||
|
||||
{% capture content %}Ocean Blue is a dark mode theme for OBS Studio with focus on visibility and clear visual grouping. I wanted to avoid making another gray or black theme, and tested a lot of different colors, finally ending up with a color that I can only describe as "Ocean Blue". This wasn't the only thing that needed to be different, I wanted something that set itself apart from other themes.{% endcapture %}{% include blocks/paragraph.liquid content=content %}
|
||||
|
||||
{% capture content %}My second goal was to improve the visual structure of the user interface as much as possible. This meant unifying the spacing (or padding) of elements, resizing them to fit the expected layouts, and other adjustments. For example, property groups are now clearly visible, instead of just being a thin almost invisible line.{% endcapture %}{% include blocks/paragraph.liquid content=content %}
|
||||
|
||||
{% capture content %}These two goals resulted in something that I can only describe as a theme that is directly oriented at content creators.{% endcapture %}{% include blocks/paragraph.liquid content=content %}
|
||||
|
||||
{% include blocks/heading.liquid level=1 content="Download & Source Code" %}
|
||||
|
||||
{% capture content %}This theme, including the source code for it, is available {% include inline/link.liquid content="on Github" url="https://github.com/xaymar/obs-oceanblue/releases" %} for free. If you deem this Theme useful, consider supporting me on {% include inline/link.liquid url="https://patreon.com/Xaymar" content="Patreon" %}, {% include inline/link.liquid url="https://github.com/sponsors/Xaymar" content="Github" %}, or {% include inline/link.liquid url="https://twitch.tv/Xaymar" content="Twitch" %}.{% endcapture %}{% include blocks/paragraph.liquid content=content %}
|
||||
|
||||
{% include blocks/heading.liquid level=1 content="Screenshots & Media" %}
|
||||
{% capture columns %}
|
||||
{% capture column %}
|
||||
{% include blocks/media.liquid type="image" url="https://cdn.xaymar.com/blog/2020/12/obs64_m7sDhBCWe5.png" link=true caption="Main Window" %}
|
||||
{% endcapture %}{% include blocks/column.liquid content=column %}
|
||||
|
||||
{% capture column %}
|
||||
{% include blocks/media.liquid type="image" url="https://cdn.xaymar.com/blog/2020/12/obs64_Xv1X1BIvsn.png" link=true caption="General Settings" %}
|
||||
{% endcapture %}{% include blocks/column.liquid content=column %}
|
||||
|
||||
{% capture column %}
|
||||
{% include blocks/media.liquid type="image" url="https://cdn.xaymar.com/blog/2020/12/obs64_uz5wmDLXlk.png" link=true caption="Output Settings" %}
|
||||
{% endcapture %}{% include blocks/column.liquid content=column %}
|
||||
|
||||
{% capture column %}
|
||||
{% include blocks/media.liquid type="image" url="https://cdn.xaymar.com/blog/2020/12/obs64_lcFx1KOO15.png" link=true caption="Hotkeys" %}
|
||||
{% endcapture %}{% include blocks/column.liquid content=column %}
|
||||
|
||||
{% capture column %}
|
||||
{% include blocks/media.liquid type="image" url="https://cdn.xaymar.com/blog/2020/12/obs64_eOLVrDEB9t.png" link=true caption="Text Source Properties" %}
|
||||
{% endcapture %}{% include blocks/column.liquid content=column %}
|
||||
|
||||
{% capture column %}
|
||||
{% include blocks/media.liquid type="image" url="https://cdn.xaymar.com/blog/2020/12/obs64_oncZVYZVHH.png" link=true caption="Filters" %}
|
||||
{% endcapture %}{% include blocks/column.liquid content=column %}
|
||||
{% endcapture %}{% include blocks/columns.liquid content=columns %}
|
||||
@@ -1,25 +0,0 @@
|
||||
---
|
||||
layout: default
|
||||
title: "StreamFX (for OBS Studio)"
|
||||
comments: false
|
||||
date: "2022-02-25"
|
||||
---
|
||||
|
||||
<figure class="block float clear" style="float: right; width: 33%; max-width: 256px;">
|
||||
<img src="{{ "projects/obs/streamfx/icon.png" | absolute_url }}"/>
|
||||
<figcaption>Official Icon (All Rights Reserved)</figcaption>
|
||||
</figure>
|
||||
<figure class="block float clear" style="float: right; width: 33%; max-width: 256px;">
|
||||
<img src="{{ "projects/obs/streamfx/logo.svg" | absolute_url }}"/>
|
||||
<figcaption>Official Logo (All Rights Reserved)</figcaption>
|
||||
</figure>
|
||||
<p class="block">StreamFX is the premier plugin to OBS Studio to take your stream or recording to the next level! Whether it is crafting advanced scene setups, recording in intermediate formats, bringing out a little bit of extra quality from encoders, StreamFX has everything you need. Bring your content creation to the future, no matter if you are a Power User or End User.</p>
|
||||
|
||||
<h2 class="block">Further Links</h2>
|
||||
<ul>
|
||||
<li><a href="https://streamfx.xaymar.com">Official Website</a></li>
|
||||
<li><a href="https://github.com/xaymar/obs-StreamFX">Source Code on GitHub</a></li>
|
||||
<li><a href="https://obsproject.com/forum/threads/streamfx-for-obs%C2%AE-studio.76619/">OBS Project Resource Page</a></li>
|
||||
</ul>
|
||||
|
||||
<h2 class="block">Media</h2>
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 52 KiB |
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 8.9 KiB |
@@ -1,72 +0,0 @@
|
||||
---
|
||||
layout: default
|
||||
title: "VoiceFX"
|
||||
comments: false
|
||||
date: "2022-02-25"
|
||||
---
|
||||
<figure class="block float" style="max-width: 256px; width: 33%; float: right"><img src="https://cdn.xaymar.com/blog/2020/10/VST_Compatible_Logo_Steinberg.png"/><figcaption>VST is a trademark of Steinberg Media Technologies GmbH, registered in Europe and other countries.</figcaption></figure>
|
||||
<figure class="block float" style="max-width: 256px; width: 33%; float: right; clear: both;"><img src="https://cdn.xaymar.com/blog/2020/10/powered-by-nvidia-broadcast-lockup-rgb-wht-for-screen.png"/><figcaption>The NVIDIA Audio Effects SDK gives you everything you need to rise above the noise every time. AI-powered noise removal filters both incoming and outgoing audio to make every conversation crystal-clear. No special equipment required.</figcaption></figure>
|
||||
|
||||
<p class="block">VoiceFX is a VST 2.x and VST 3.x plug-in enabling you to clean up noise and echo from recordings in post-processing<sup><a href="#ex1">1</a></sup> workflows. It is based on NVIDIA Broadcast SDKs, and as such is able to filter out fan noise, keyboard clicking, and a lot of other unwated noise. At the current time it is compatible with a number of VST 2.x and 3.x hosts, but may not work with all of them<sup><a href="#ex2">2</a></sup>.</p>
|
||||
|
||||
<details class="block" open>
|
||||
<summary><h2>Compare Features between Demo and Full</h2></summary>
|
||||
<p class="block">The table below explains the differences between each version, as well as what is planned for the future. Please note that this is not a guarantee, as sometimes features end up impossible upon closer inspection.</p>
|
||||
<table class="block">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="200px">Feature</th>
|
||||
<th>Demo Version</th>
|
||||
<th>Full Version</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tr>
|
||||
<td>VST 3.x Support</td>
|
||||
<td>✔ (v0.1)</td>
|
||||
<td>✔ (v0.1)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>VST 2.x Support</td>
|
||||
<td>✔ (v0.3)</td>
|
||||
<td>✔ (v0.2)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Noise Removal<sup><a href="#ex1">1</a></sup></td>
|
||||
<td>✔ (v0.3)</td>
|
||||
<td>✔ (v0.3)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Room Echo Removal<sup><a href="#ex3">3</a></sup></td>
|
||||
<td>❌</td>
|
||||
<td>✔ (v0.4)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Acoustic Echo Removal<sup><a href="#ex3">3</a></sup></td>
|
||||
<td>❌</td>
|
||||
<td>❌</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Intensity Control</td>
|
||||
<td>❌</td>
|
||||
<td>✔ (v0.4)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Automation</td>
|
||||
<td>❌</td>
|
||||
<td>✔ (v0.4)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>User Interface</td>
|
||||
<td>❌</td>
|
||||
<td>❌</td>
|
||||
</tr>
|
||||
</table>
|
||||
</details>
|
||||
|
||||
<div class="block"><iframe class="block" src="https://itch.io/embed/1190072?linkback=true&bg_color=252525&fg_color=ffffff&link_color=3373cc&border_color=07111e" width="100%" height="167" frameborder="0"><a href="https://xaymar.itch.io/voicefx">VoiceFX by Xaymar</a></iframe></div>
|
||||
|
||||
<ol class="block subscript">
|
||||
<li id="ex1">A volume difference between voice and noise of 25 dBFS or more may be required for ideal results. The effect will try its best to remove noise, but is not magic and may fail under certain conditions.</li>
|
||||
<li id="ex2">Most VST 2.x and 3.x hosts will work, however some hosts do unnatural modifications to sandbox plug-ins, which will break VoiceFX. A notable examples is DaVinci Resolve, but more are listed <a href="https://itch.io/t/2256497/welcome-take-some-time-to-orient-yourself-readme" target="_blank">here</a>.</li>
|
||||
<li id="ex3">Room/Acoustic Echo Removal may misidentify your own voice as an echo and remove it.</li>
|
||||
</ol>
|
||||
@@ -11,6 +11,10 @@ body {
|
||||
padding: 0;
|
||||
background: $theme-content-background;
|
||||
|
||||
min-height: 100vh;
|
||||
display: grid;
|
||||
grid-template-rows: min-content 1fr;
|
||||
|
||||
// Font
|
||||
font-size: 1.1rem;
|
||||
line-height: 1.5em;
|
||||
|
||||
+34
-27
@@ -1,34 +1,28 @@
|
||||
alert.block {
|
||||
position: relative;
|
||||
display: block;
|
||||
margin: .5em;
|
||||
margin-left: 1.5em;
|
||||
margin-right: 1.5em;
|
||||
margin: .5em -.5em;
|
||||
padding: .5em;
|
||||
padding-left: 4em;
|
||||
min-height: 4em;
|
||||
|
||||
border: 2px solid hsl($theme-hue, 30%, 40%);
|
||||
border-radius: 0.2rem;
|
||||
border-left: 1em solid hsl($theme-hue, 30%, 40%);
|
||||
background: hsl($theme-hue, 20%, 30%);
|
||||
box-shadow: 0px 0px 2px 2px rgb(0, 0, 0);
|
||||
box-shadow: 0px 0px 8px 2px rgb(0, 0, 0);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
alert::before {
|
||||
content: "✅";
|
||||
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
bottom: 0px;
|
||||
left: 0px;
|
||||
content: "📌";
|
||||
|
||||
display: block;
|
||||
min-width: 4rem;
|
||||
min-height: 4rem;
|
||||
|
||||
float: left;
|
||||
shape-outside: polygon(0em 0em, 3em 0em, 3em 3em, 0em 3em);
|
||||
|
||||
font-size: 3rem;
|
||||
white-space: no-wrap;
|
||||
white-space: nowrap;
|
||||
text-align: center;
|
||||
|
||||
display: flex;
|
||||
@@ -38,49 +32,62 @@ alert::before {
|
||||
}
|
||||
|
||||
alert.block[data-type*="good"] {
|
||||
border-color: oklch(75.52%, 0.1158, 150.35);
|
||||
background: oklch(54.45%, 0.1158, 150.35);
|
||||
border-color: oklch(60.0% 0.75 150.0);
|
||||
background: oklch(30.0% 0.75 150.0);
|
||||
}
|
||||
alert[data-type*="good"]::before {
|
||||
content: "👍";
|
||||
}
|
||||
|
||||
alert.block[data-type*="bad"] {
|
||||
border-color: oklch(62.8%, 0.2568, 29.234);
|
||||
background: oklch(52.37%, 0.1576, 29.234);
|
||||
border-color: oklch(60.0% 0.2568 29.234);
|
||||
background: oklch(30.00% 0.2576 29.234);
|
||||
}
|
||||
alert[data-type*="bad"]::before {
|
||||
content: "👎";
|
||||
}
|
||||
|
||||
alert.block[data-type*="info"] {
|
||||
border-color: oklch(69.41% 0.138 238.24);
|
||||
background: oklch(45.00% 0.0785 238.24);
|
||||
}
|
||||
alert[data-type*="info"]::before {
|
||||
content: "ℹ";
|
||||
border: 2px solid black;
|
||||
margin: .5rem;
|
||||
min-width: 3rem;
|
||||
min-height: 3rem;
|
||||
background: #0078d7;
|
||||
}
|
||||
|
||||
alert.block[data-type*="hint"] {
|
||||
border-color: oklch(69.41%, 0.138, 238.24);
|
||||
background: oklch(49.11%, 0.0785, 238.24);
|
||||
border-color: oklch(69.41% 0.138 238.24);
|
||||
background: oklch(45.00% 0.0785 238.24);
|
||||
}
|
||||
alert[data-type*="hint"]::before {
|
||||
content: "❔";
|
||||
}
|
||||
|
||||
alert.block[data-type*="notice"] {
|
||||
border-color: oklch(69.41%, 0.138, 238.24);
|
||||
background: oklch(49.11%, 0.0785, 238.24);
|
||||
border-color: oklch(69.41% 0.138 238.24);
|
||||
background: oklch(49.11% 0.0785 238.24);
|
||||
}
|
||||
alert[data-type*="notice"]::before {
|
||||
content: "🔍";
|
||||
}
|
||||
|
||||
alert.block[data-type*="warning"] {
|
||||
border-color: oklch(71.76%, 0.187, 49.76);
|
||||
background: oklch(52.65%, 0.113, 49.76);
|
||||
border-color: oklch(71.76% 0.187 49.76);
|
||||
background: oklch(52.65% 0.113 49.76);
|
||||
}
|
||||
alert[data-type*="warning"]::before {
|
||||
content: "⚠";
|
||||
}
|
||||
|
||||
alert.block[data-type*="error"] {
|
||||
border-color: oklch(62.8%, 0.2568, 29.234);
|
||||
background: oklch(52.37%, 0.1576, 29.234);
|
||||
border-color: oklch(62.8% 0.2568 29.234);
|
||||
background: oklch(52.37% 0.1576 29.234);
|
||||
}
|
||||
alert[data-type*="error"]::before {
|
||||
content: "❌";
|
||||
}
|
||||
}
|
||||
|
||||
+35
-22
@@ -14,36 +14,49 @@
|
||||
margin-top: 1.25em;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------------
|
||||
// Size
|
||||
// --------------------------------------------------------------------------------
|
||||
|
||||
@media (min-width: 600px) {
|
||||
.size-preview {
|
||||
width: 33%;
|
||||
max-width: 380px;
|
||||
}
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------------
|
||||
// Float
|
||||
// --------------------------------------------------------------------------------
|
||||
.float {
|
||||
margin: .75rem;
|
||||
}
|
||||
@media (min-width: 600px) {
|
||||
.float {
|
||||
margin: .75rem;
|
||||
}
|
||||
|
||||
.float-start {
|
||||
float: inline-start;
|
||||
}
|
||||
.float-start {
|
||||
float: inline-start;
|
||||
}
|
||||
|
||||
.float-end {
|
||||
float: inline-end;
|
||||
}
|
||||
.float-end {
|
||||
float: inline-end;
|
||||
}
|
||||
|
||||
.float-left {
|
||||
float: left;
|
||||
}
|
||||
.float-left {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.float-right {
|
||||
float: right;
|
||||
}
|
||||
.float-right {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.float-clear,
|
||||
.clear {
|
||||
clear: both;
|
||||
}
|
||||
.float-clear,
|
||||
.clear {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.float + .block {
|
||||
margin-top: 0em;
|
||||
.float + .block {
|
||||
margin-top: 0em;
|
||||
}
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------------
|
||||
@@ -83,4 +96,4 @@
|
||||
@import "_block-heading.scss";
|
||||
@import "_block-list.scss";
|
||||
@import "_block-table.scss";
|
||||
@import "_block-alert.scss";
|
||||
@import "_block-alert.scss";
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
body > .content {
|
||||
width: 100vw;
|
||||
max-width: $theme-width;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
#footer {
|
||||
justify-self: stretch;
|
||||
align-self: bottom;
|
||||
margin: 0;
|
||||
margin-top: 2rem;
|
||||
padding: 0;
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
function addNavigationControl() {
|
||||
// Support for Mobile Devices
|
||||
document.querySelector("#navigation-toggle").addEventListener("click", (ev) => {
|
||||
document.querySelector("#header #navigation").classList.toggle("open");
|
||||
});
|
||||
}
|
||||
|
||||
if (document.readyState === "complete"
|
||||
|| document.readyState === "loaded"
|
||||
|| document.readyState === "interactive") {
|
||||
addNavigationControl();
|
||||
} else {
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
addNavigationControl();
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
//import("js/navigation.mjs");
|
||||
import("./js/lazyload.mjs");
|
||||
import("./js/highlight.mjs");
|
||||
import("./js/mediaplayer.mjs");
|
||||
//import("./js/mediabox.mjs");
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
---
|
||||
layout: default
|
||||
title: "A mostly complete history of Projects"
|
||||
comments: false
|
||||
date: "2025-02-12"
|
||||
redirect_from:
|
||||
- /projects/obs/
|
||||
- /projects/voicefx/
|
||||
- /projects/obs/streamfx/
|
||||
- /projects/obs/amd-encoder/
|
||||
- /projects/obs/ffmpeg-encoder/
|
||||
- /projects/obs/ocean-blue/
|
||||
---
|
||||
|
||||
<p class="block">Over the years I've started, stopped, forgotten, and completed many projects. This is a list of all of them that I remember.</p>
|
||||
|
||||
<h1 class="block">2009</h1>
|
||||
<h2 class="block">BlitzHit</h2>
|
||||
<p class="block">My first complex project made in Blitz3D and possibly still the one I'm most proud of, as I was merely 16 years old at the time. It was a clone of Guitar Hero or Frets on Fire for PC/Windows and ended up being a massive learning experience for a lot of things. The final version which never saw the public had a fully implemented stage and music editor, calculated accuracy, had difficulty selection, and a lot more.</p>
|
||||
|
||||
<p class="block">Unfortunately real life eventually caught up and I had to abandon the project, and the project files were also lost due to various incidents and experiences.</p>
|
||||
|
||||
<ul class="block">
|
||||
<li><a class="inline" target="_blank" href="https://www.blitzforum.de/forum/viewtopic.php?t=33046&highlight=blitzhit">BlitzForum resource</a></li>
|
||||
</ul>
|
||||
|
||||
<h1 class="block">2016</h1>
|
||||
<h2 class="block">AMD Encoder <i>for OBS Studio</i></h2>
|
||||
<p class="block">My first endeaver into making plugins for <a class="inline" target="_blank" href="https://obsproject.com">OBS Studio</a> was spawned by being nerdsniped by <a class="inline" target="_blank" href="https://www.reddit.com/r/Amd/comments/4s38ju/">a reddit thread on /r/AMD</a> of all things. At the time I had an AMD Radeon HD 5770 (still have it boxed) and I was trying to get more quality out of my recordings. I had the option of using <a class="inline" target="_blank" href="https://obsproject.com/forum/threads/obs-branch-with-amd-vce-support.13996/">a fork of OBS Classic</a> (it had heavy performance penalty) or use the official "Plays.tv" app (which was filled with ads and tracking).</p>
|
||||
|
||||
<p class="block">But instead of choosing either, I decided that the most intelligent path forwards was to trial and error my way through the (now defunct) <a class="inline" target="_blank" href="https://web.archive.org/web/20150905172751/http://developer.amd.com/tools-and-sdks/media-sdk/">AMD Media SDK</a> (without AMDs permission). The plugin quickly took shape and its first working version was done within just a month, with it rapidly getting significantly more stable and versatile with each release. Eventually it caught the attention of AMD and it was credited as the reason why the Video Encoding team wasn't completely axed that year, eventually resulting in the new AMD Advanced Media Framework.</p>
|
||||
|
||||
<p class="block">The project was put on ice in late 2020 after repeated disagreements with the team being OBS Studio, especially the project lead. As of 2023 it has been replaced with a superior implementation which makes use of hardware texture sharing.</p>
|
||||
|
||||
<ul class="block">
|
||||
<li><a class="inline" target="_blank" href="https://obsproject.com/forum/threads/amd-hardware-encoder-s-deleted.52305/">OBS Forum Thread</a></li>
|
||||
<li><a class="inline" target="_blank" href="https://web.archive.org/web/20200302051056/https://obsproject.com/forum/resources/amd-hardware-encoder-s.427/">OBS Forum Resource (Archived)</a></li>
|
||||
<li><a class="inline" target="_blank" href="https://github.com/obsproject/obs-amd-encoder">Source Code (GPL 2.0)</a></li>
|
||||
</ul>
|
||||
|
||||
<h1 class="block">2017</h1>
|
||||
<h2 class="block">StreamFX <i>for OBS Studio</i></h2>
|
||||
<p class="block">Originally under the name Stream Effects, this project is what kickstarted my career and massively improved my C++ knowledge. I have learned basically all I know about modern C++ through this project alone, as it always was the place for new groundbreaking inventions and changes. Though some of these inventions were made by necessity or requirement, not by choice.</p>
|
||||
|
||||
<p class="block">At its core this project adds several sources, filters, encoders, and transitions to the popular <a class="inline" target="_blank" href="https://obsproject.com">OBS Studio</a> streaming solution. It was developed primarily for friends and family, but later gained an audience far beyond what I could handle - at its peak had an average of 200k active users. As funding was running out due to inflation, it was eventually migrated to a paid model.</p>
|
||||
|
||||
<p class="block">As of 2025 it is now owned and run by <a class="inline" target="_blank" href="https://vhonowslend.com/">Vhonowslend</a>.</p>
|
||||
|
||||
<ul class="block">
|
||||
<li><a class="inline" target="_blank" href="https://streamfx.vhonowslend.com">Website</a></li>
|
||||
<li><a class="inline" target="_blank" href="https://discord.gg/v7tpF9Ady7">Discord</a></li>
|
||||
<li><a class="inline" target="_blank" href="https://obsproject.com/forum/resources/streamfx-by-vhonowslend.578/">OBS Forum Resource</a></li>
|
||||
</ul>
|
||||
|
||||
<h2 class="block">BlitzLLM</h2>
|
||||
<p class="block">BlitzLLVM is an attempt at making a compiler or transpiler for the BlitzBasic language (Blitz2D, Blitz3D and BlitzPlus). The end goal is to be able to compile BlitzBasic-based games using a modern compiler, significantly improving performance and compatibility with modern systems. It is simultaneously a learning experience and an application of learned experience.</p>
|
||||
|
||||
<ul class="block">
|
||||
<li><a class="inline" target="_blank" href="https://github.com/Xaymar/BlitzLLVM">Source Code</a></li>
|
||||
</ul>
|
||||
|
||||
<h1 class="block">2020</h1>
|
||||
<h2 class="block">Last.FM Now Playing Overlay <i>for OBS Studio</i></h2>
|
||||
<p class="block">A simple "Now Playing" overlay that uses Last.fm and runs in a Browser Source. Kinda not much to write about, it was just a result of not wanting to install weird software with administrator rights.</p>
|
||||
|
||||
<ul class="block">
|
||||
<li><a class="inline" target="_blank" href="https://obsproject.com/forum/resources/now-playing-display-via-last-fm.893/">OBS Forum Resource</a></li>
|
||||
</ul>
|
||||
|
||||
<h2 class="block">VST 2.x SDK</h2>
|
||||
<p class="block">With Steinberg abandoning and removing the VST 2.x SDK from their website, I had to search for alternatives. All of the "open source" SDKs at the time were tainted and therefore could not be used in any way, so it was time to take matters into my own hands. It took about 9000€ in lawyer expenses and a year of documenting and writing code before I could make the worlds first untained clean room VST 2.x SDK.</p>
|
||||
|
||||
<p class="block">This was the most fun I've had reverse engineering software APIs in years. A shame it set me back a significant chunk of my savings, though thanks to sales of VoiceFX I've barely equalled out the expenses.</p>
|
||||
|
||||
<ul class="block">
|
||||
<li><a class="inline" target="_blank" href="https://github.com/Xaymar/vst2sdk">Source Code</a></li>
|
||||
</ul>
|
||||
|
||||
<h1 class="block">2022</h1>
|
||||
<h2 class="block">FFmpeg Encoders <i>for OBS Studio</i></h2>
|
||||
<p class="block">As the built-in encoders in OBS Studio felt too limiting, I made a plugin that provides the FFmpeg included encoders instead. Over time the code base further and further merged with StreamFX, and the two projects merged into one. It is now a core feature of StreamFX.</p>
|
||||
|
||||
<ul class="block">
|
||||
<li><a class="inline" target="_blank" href="https://github.com/Xaymar/obs-ffmpeg-encoder">Source Code</a></li>
|
||||
<li><a class="inline" target="_blank" href="https://obsproject.com/forum/resources/ffmpeg-encoders-for-obs-studio.826/">OBS Forum Resource</a></li>
|
||||
</ul>
|
||||
|
||||
<h2 class="block">Ocean Blue <i>Theme for OBS Studio</i></h2>
|
||||
<p class="block">Ocean Blue is a "dark mode" theme for OBS Studio with a focus on clarity and visual grouping without sacrificing style. It is a result of wanting to avoid the gray/black epidemic and after testing a lot of different colors I arrived at what I dubbed as "Ocean Blue". It is a color that is not too straining on the eyes in the night, yet still lends itself to nice styling options.</p>
|
||||
|
||||
<ul class="block">
|
||||
<li><a class="inline" target="_blank" href="https://github.com/xaymar/obs-oceanblue">Source Code</a></li>
|
||||
<li><a class="inline" target="_blank" href="https://obsproject.com/forum/resources/ocean-blue.1327/">OBS Forum Resource</a></li>
|
||||
</ul>
|
||||
|
||||
<h1 class="block">2023</h1>
|
||||
<h2 class="block">VoiceFX <i>(VST 2.x, VST 3.x)</i></h2>
|
||||
<p class="block">After seeing the announcement and release of RTX Voice I got a bit excited about how well it worked at the time, and wanted to turn it into a plugin usable for offline post-processing. The result was a barely functional plugin that broke under more situations than expected, and to this date still doesn't fully work.</p>
|
||||
|
||||
<p class="block">As of 2025 it is now owned and run by <a class="inline" target="_blank" href="https://vhonowslend.com/">Vhonowslend</a>.</p>
|
||||
|
||||
<ul class="block">
|
||||
<li><a class="inline" target="_blank" href="https://xaymar.itch.io/voicefx">Itch Store Page</a></li>
|
||||
</ul>
|
||||
+50
@@ -1,7 +1,57 @@
|
||||
---
|
||||
layout: null
|
||||
sitemap:
|
||||
exclude: true
|
||||
---
|
||||
|
||||
User-agent: *
|
||||
Sitemap: {{ "/robots.txt" | absolute_url }}
|
||||
Disallow: /assets/
|
||||
Disallow: /feed/
|
||||
Disallow: /feed.xml
|
||||
Disallow: /restricted/
|
||||
Disallow: /404.html
|
||||
Disallow: /redirects.json
|
||||
|
||||
User-agent: AI2Bot
|
||||
User-agent: Ai2Bot-Dolma
|
||||
User-agent: Amazonbot
|
||||
User-agent: Applebot
|
||||
User-agent: Applebot-Extended
|
||||
User-agent: Bytespider
|
||||
User-agent: CCBot
|
||||
User-agent: ChatGPT
|
||||
User-agent: ChatGPT-User
|
||||
User-agent: Claude-Web
|
||||
User-agent: ClaudeBot
|
||||
User-agent: Diffbot
|
||||
User-agent: FacebookBot
|
||||
User-agent: FriendlyCrawler
|
||||
User-agent: GPT
|
||||
User-agent: GPTBot
|
||||
User-agent: Google-Extended
|
||||
User-agent: GoogleOther
|
||||
User-agent: GoogleOther-Image
|
||||
User-agent: GoogleOther-Video
|
||||
User-agent: iaskspider/2.0
|
||||
User-agent: ICC-Crawler
|
||||
User-agent: ImagesiftBot
|
||||
User-agent: Meta-ExternalAgent
|
||||
User-agent: Meta-ExternalFetcher
|
||||
User-agent: OpenAI
|
||||
User-agent: OAI-SearchBot
|
||||
User-agent: OAI-Bot
|
||||
User-agent: PerplexityBot
|
||||
User-agent: PetalBot
|
||||
User-agent: Scrapy
|
||||
User-agent: Timpibot
|
||||
User-agent: VelenPublicWebCrawler
|
||||
User-agent: Webzio-Extended
|
||||
User-agent: YouBot
|
||||
User-agent: anthropic-ai
|
||||
User-agent: cohere-ai
|
||||
User-agent: facebookexternalhit
|
||||
User-agent: img2dataset
|
||||
User-agent: omgili
|
||||
User-agent: omgilibot
|
||||
Disallow: /
|
||||
|
||||
+5
-4
@@ -3,13 +3,13 @@ layout: null
|
||||
sitemap:
|
||||
exclude: true
|
||||
---
|
||||
|
||||
{% capture var %}
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
{% for post in site.posts %}
|
||||
{% unless post.published == false %}
|
||||
<url>
|
||||
<loc>{{ site.url }}{{ post.url }}</loc>
|
||||
<loc>{{ site.url | xml_encode }}{{ post.url | xml_encode }}</loc>
|
||||
{% if post.sitemap.lastmod %}
|
||||
<lastmod>{{ post.sitemap.lastmod | date: "%Y-%m-%d" }}</lastmod>
|
||||
{% elsif post.date %}
|
||||
@@ -41,7 +41,7 @@ sitemap:
|
||||
{% endfor %}
|
||||
{% unless skip == true or page.sitemap.exclude == true %}
|
||||
<url>
|
||||
<loc>{{ site.url }}{{ page.url | remove: "index.html" }}</loc>
|
||||
<loc>{{ site.url | xml_encode }}{{ page.url | remove: "index.html" | xml_encode }}</loc>
|
||||
{% if page.sitemap.lastmod %}
|
||||
<lastmod>{{ page.sitemap.lastmod | date: "%Y-%m-%d" }}</lastmod>
|
||||
{% elsif page.date %}
|
||||
@@ -62,4 +62,5 @@ sitemap:
|
||||
</url>
|
||||
{% endunless %}
|
||||
{% endfor %}
|
||||
</urlset>
|
||||
</urlset>
|
||||
{% endcapture %}{{ var | normalize_whitespace }}
|
||||
|
||||
Reference in New Issue
Block a user