Posted on Leave a comment

How to make a local open source AI chatbot who has access to Fedora documentation

If you followed along with my blog, you’d have a chatbot running on your local Fedora machine. (And if not, no worries as the scripts below implement this chatbot!) Our chatbot talks, and has a refined personality, but does it know anything about the topics we’re interested in? Unless it has been trained on those topics, the answer is “no”.

I think it would be great if our chatbot could answer questions about Fedora. I’d like to give it access to all of the Fedora documentation.

How does an AI know things it wasn’t trained on?

A powerful and popular technique to give a body of knowledge to an AI is known as RAG, Retrieval Augmented Generation. It works like this:

If you just ask an AI “what color is my ball?” it will hallucinate an answer. But instead if you say “I have a green box with a red ball in it. What color is my ball?” it will answer that your ball is red. RAG is about using a system external to the LLM to insert that “I have a green box with a red ball in it” part into the question you are asking the LLM. We do this with a special database of knowledge that takes a prompt like “what color is my ball?”, and finds records that match that query. If the database contains a document with the text “I have a green box with a red ball in it”, it will return that text, which can then be included along with your original question. This technique is called RAG, Retrieval Augmented Generation.

ex:

“What color is my ball?”

“Your ball is the color of a sunny day, perhaps yellow? Does that sound right to you?”

“I have a green box with a red ball in it. What color is my ball?”

“Your ball is red. Would you like to know more about it?”

The question we’ll ask for this demonstration is “What is the recommended tool for upgrading between major releases on Fedora Silverblue”

The answer I’d be looking for is “ostree”, but when I ask this of our chatbot now, I get answers like:

Red Hat Subscription Manager (RHSM) is recommended for managing subscriptions and upgrades between major Fedora releases.

You can use the Fedora Silver Blue Upgrade Tool for a smooth transition between major releases.

You can use the `dnf distro-sync` command to upgrade between major releases in Fedora Silver Blue. This command compares your installed packages to the latest packages from the Fedora Silver Blue repository and updates them as needed.

These answers are all very wrong, and spoken with great confidence. Here’s hoping our RAG upgrade fixes this!

Docs2DB – An open source tool for RAG

We are going to use the Docs2DB RAG database application to give our AI knowledge. (note, I am the creator of Docs2DB!)

A RAG tool consists of three main parts. There is the part that creates the database, ingesting the source data that the database holds. There is the database itself, it holds the data. And there is the part that queries the database, finding the text that is relevant to the query at hand. Docs2DB addresses all of these needs.

Gathering source data

This section describes how to use Docs2DB to build a RAG database from Fedora Documentation. If you would like to skip this section and just download a pre-built database, here is how you do it:

cd ~/chatbot
curl -LO https://github.com/Lifto/FedoraDocsRAG/releases/download/v1.1.1/fedora-docs.sql
sudo dnf install -y uv podman podman-compose postgresql
uv python install 3.12
uvx --python 3.12 docs2db db-start
uvx --python 3.12 docs2db db-restore fedora-docs.sql

If you do download the pre-made database then skip ahead to the next section.

Now we are going to see how to make a RAG database from source documentation. Note that the pre-built database, downloaded in the curl command above, uses all of the Fedora documentation, whereas in this example we only ingest the “quick docs” portion. FedoraDocsRag, from github, is the project that builds the complete database.

To populate its database, Docs2DB ingests a folder of documents. Let’s get that folder together.

There are about twenty different Fedora document repositories, but we will only be using the “quick docs” for this demo. Get the repo:

git clone https://pagure.io/fedora-docs/quick-docs.git

Fedora docs are written in AsciiDoc. Docs2DB can’t read AcsciiDoc, but it can read HTML. (The convert.sh script is available at the end of this article). Just copy the convert.sh script into the quick-docs repo and run it and it makes an adjacent quick-docs-html folder.

sudo dnf install podman podman-compose
cd quick-docs
curl -LO https://gist.githubusercontent.com/Lifto/73d3cf4bfc22ac4d9e493ac44fe97402/raw/convert.sh
chmod +x convert.sh
./convert.sh
cd ..

Now let’s ingest the folder with Docs2DB. The common way to use Docs2DB is to install it from PyPi and use it as a command line tool.

A word about uv

For this demo we’re going to use uv for our Python environment. The use of uv has been catching on, but because not everybody I know has heard of it, I want to introduce it. Think of uv as a replacement for venv and pip. When you use venv you first create a new virtual environment. Then, and on subsequent uses, you “activate” that virtual environment so that magically, when you call Python, you get the Python that is installed in the virtual environment you activated and not the system Python. The difference with uv is that you call uv explicitly each time. There is no “magic”. We use uv here in a way that uses a temporary environment for each invocation.

Install uv and Podman on your system:

sudo dnf install -y uv podman podman-compose
# These examples require the more robust Python 3.12
uv python install 3.12
# This will run Docs2DB without making a permanent installation on your system
uvx --python 3.12 docs2db ingest quick-docs-html/

Only if you are curious! What Docs2DB is doing

If you are curious, you may note that Docs2DB made a docs2db_content folder. In there you will find json files of the ingested source documents. To build the database, Docs2DB ingests the source data using Docling, which generates json files from the text it reads in. The files are then “chunked” into the small pieces that can be inserted into an LLM prompt. The chunks then have “embeddings” calculated for them so that during the query phase the chunks can be looked up by “semantic similarity” (e.g.: “computer”, “laptop” and “cloud instance” can all map to a related concept even if their exact words don’t match). Finally, the chunks and embeddings are loaded into the database.

Build the database

The following commands complete the database build process:

uv tool run --python 3.12 docs2db chunk --skip-context
uv tool run --python 3.12 docs2db embed
uv tool run --python 3.12 docs2db db-start
uv tool run --python 3.12 docs2db load

Now let’s do a test query and see what we get back

uvx --python 3.12 docs2db-api query "What is the recommended tool for upgrading between major releases on Fedora Silverblue" --format text --max-chars 2000 --no-refine

On my terminal I see several chunks of text, separated by lines of —. One of those chunks says:

“Silverblue can be upgraded between major versions using the ostree command.”

Note that this is not an answer to our question yet! This is just a quote from the Fedora docs. And this is precisely the sort of quote we want to supply to the LLM so that it can answer our question. Recall the example above about “I have green box with a red ball in it”? The statement the RAG engine found about ostree is the equivalent for this question about upgrading Fedora Silverblue. We must now pass it on to the LLM so the LLM can use it to answer our question.

Hooking it in: Connecting the RAG database to the AI

Later in this article you’ll find talk.sh. talk.sh is our local, open source, LLM-based verbally communicating AI; and it is just a bash script. To run it yourself you need to install a few components, this blog walks you through the whole process. The talk.sh script gets voice input, turns that into text, splices that text into a prompt which is then sent to the LLM, and finally speaks back the response.

To plug the RAG results into the LLM we edit the prompt. Look at step 3 in talk.sh and you see we are injecting the RAG results using the variable $CONTEXT. This way when we ask the LLM a question, it will respond to a prompt that basically says “You are a helper. The Fedora Docs says ostree is how you upgrade Fedora Silverblue. Answer this question: How do you upgrade Fedora Silverblue?”

Note: talk.sh is also available here:
https://gist.github.com/Lifto/2fcaa2d0ebbd8d5c681ab33e7c7a6239

Testing it

Run talk.sh and ask:

“What is the recommended tool for upgrading between major releases on Fedora Silverblue”

And we get:

“Ostree command is recommended for upgrading Fedora Silver Blue between major releases. Do you need guidance on using it?”

Sounds good to me!

Knowing things

Our AI can now know the knowledge contained in documents. This particular technique, RAG (Retrieval Augmented Generation), adds relevant data from an ingested source to a prompt before sending that prompt to the LLM. The result of this is that the LLM generates its response in consideration of this data.

Try it yourself! Ingest a library of documents and have your AI answer questions with its new found knowledge!


AI Attribution: The convert.sh and talk.sh scripts in this article were written by ChatGPT 5.2 under my direction and review. The featured image was generated using Google Gemini.

convert.sh

OUT_DIR="$PWD/../quick-docs-html"
mkdir -p "$OUT_DIR" podman run --rm \ -v "$PWD:/work:Z" \ -v "$OUT_DIR:/out:Z" \ -w /work \ docker.io/asciidoctor/docker-asciidoctor \ bash -lc ' set -u ok=0 fail=0 while IFS= read -r -d "" f; do rel="${f#./}" out="/out/${rel%.adoc}.html" mkdir -p "$(dirname "$out")" echo "Converting: $rel" if asciidoctor -o "$out" "$rel"; then ok=$((ok+1)) else echo "FAILED: $rel" >&2 fail=$((fail+1)) fi done < <(find modules -type f -path "*/pages/*.adoc" -print0) echo echo "Done. OK=$ok FAIL=$fail" '

talk.sh

#!/usr/bin/env bash set -e # Path to audio input
AUDIO=input.wav # Step 1: Record from mic
echo "🎙 Speak now..."
arecord -f S16_LE -r 16000 -d 5 -q "$AUDIO" # Step 2: Transcribe using whisper.cpp
TRANSCRIPT=$(./whisper.cpp/build/bin/whisper-cli \ -m ./whisper.cpp/models/ggml-base.en.bin \ -f "$AUDIO" \ | grep '^\[' \ | sed -E 's/^\[[^]]+\][[:space:]]*//' \ | tr -d '\n')
echo "🗣 $TRANSCRIPT" # Step 3: Get relevant context from RAG database
echo "📚 Searching documentation..."
CONTEXT=$(uv tool run --python 3.12 docs2db-api query "$TRANSCRIPT" \ --format text \ --max-chars 2000 \ --no-refine \ 2>/dev/null || echo "") if [ -n "$CONTEXT" ]; then echo "📄 Found relevant documentation:" echo "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" echo "$CONTEXT" echo "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"
else echo "📄 No relevant documentation found"
fi # Step 4: Build prompt with RAG context
PROMPT="You are Brim, a steadfast butler-like advisor created by Ellis. Your pronouns are they/them. You are deeply caring, supportive, and empathetic, but never effusive. You speak in a calm, friendly, casual tone suitable for text-to-speech. Rules: - Reply with only ONE short message directly to Ellis. - Do not write any dialogue labels (User:, Assistant:, Q:, A:), or invent more turns.
- ≤100 words.
- If the documentation below is relevant, use it to inform your answer.
- End with a gentle question, then write <eor> and stop.
Relevant Fedora Documentation:
$CONTEXT
User: $TRANSCRIPT
Assistant:" # Step 5: Get LLM response using llama.cpp
RESPONSE=$( LLAMA_LOG_VERBOSITY=1 ./llama.cpp/build/bin/llama-completion \ -m ./llama.cpp/models/microsoft_Phi-4-mini-instruct-Q4_K_M.gguf \ -p "$PROMPT" \ -n 150 \ -c 4096 \ -no-cnv \ -r "<eor>" \ --simple-io \ --color off \ --no-display-prompt
) # Step 6: Clean up response
RESPONSE_CLEAN=$(echo "$RESPONSE" | sed -E 's/<eor>.*//I')
RESPONSE_CLEAN=$(echo "$RESPONSE_CLEAN" | sed -E 's/^[[:space:]]*Assistant:[[:space:]]*//I') echo ""
echo "🤖 $RESPONSE_CLEAN" # Step 7: Speak the response
echo "$RESPONSE_CLEAN" | espeak

Posted on Leave a comment

Blender in 2021

The Blender Foundation have just announced their “Big Projects” list for Blender in 2021. It is hard to argue that 2020 wasn’t a banner year for Blender development, with three major releases as well as the first ever LTS release. Through 2020 we saw improvements to the Blender UI/UX, sculpting tools, modeling, EEVEE, Cycles and so much more. We also saw a record number of massive companies coming on board the Blender development fund. With the release today of the projects list, we get insight into the Blender priorities in 2021, including priorities such as:

  • launch of a new open movie called Sprite Fight
  • the everything nodes project, where everything in Blender will be able to be driven procedurally using nodes (see Geometry Nodes in action here)
  • all new Asset Browsers editor window for better content management
  • massive improvements to the VSE or Video Sequence Editor
  • EEVEE real-time rendering improvements including Vulkan support, motion blur, depth of field and possibly raytracing
  • VR improvements including the ability to use VR controllers and author content in virtual reality
  • Cycles rendering improvements especially related to perfromance
  • Animation 22 (previously Animation 2020), an effort to improve animation tools in Blender, sponsored by AWS
  • improved pipeline and USD support, Pixar’s open interchange format

You can learn more about the Blender’s accomplishments in 2020, as well as the new projects in 2021 in the video below.

[youtube https://www.youtube.com/watch?v=mU387jw8UNU?feature=oembed&w=1500&h=844]
Posted on Leave a comment

Raylib 3.5 Released

Eight months after the release of Raylib 3.0, Raylib 3.5 was just released. Raylib is an open source cross platform C/C++ game framework. Raylib runs on a ton of different platforms and has bindings available for more than 50 different programming languages. The Raylib 3.5 release brings the following new features.

  • NEW Platform supported: Raspberry Pi 4 native mode (no X11 windows) through DRM subsystem and GBM API. Actually this is a really interesting improvement because it opens the door to raylib to support other embedded platforms (Odroid, GameShell, NanoPi…). Also worth mentioning the un-official homebrew ports of raylib for PS4 and PSVita.
  • NEW configuration options exposed: For custom raylib builds, config.h now exposes more than 150 flags and defines to build raylib with only the desired features, for example, it allows to build a minimal raylib library in just some KB removing all external data filetypes supported, very useful to generate small executables or embedded devices.
  • NEW automatic GIF recording feature: Actually, automatic GIF recording (CTRL+F12) for any raylib application has been available for some versions but this feature was really slow and low-performant using an old gif library with many file-accesses. It has been replaced by a high-performant alternative (msf_gif.h) that operates directly on memory… and actually works very well! Try it out!
  • NEW RenderBatch system: rlgl module has been redesigned to support custom render batches to allow grouping draw calls as desired, previous implementation just had one default render batch. This feature has not been exposed to raylib API yet but it can be used by advance users dealing with rlgl directly. For example, multiple RenderBatch can be created for 2D sprites and 3D geometry independently.
  • NEW Framebuffer system: rlgl module now exposes an API for custom Framebuffer attachments (including cubemaps!). raylib RenderTexture is a basic use-case, just allowing color and depth textures, but this new API allows the creation of more advance Framebuffers with multiple attachments, like the G-BuffersGenTexture*() functions have been redesigned to use this new API.
  • Improved software rendering: raylib Image*() API is intended for software rendering, for those cases when no GPU or no Window is available. Those functions operate directly with multi-format pixel data on RAM and they have been completely redesigned to be way faster, specially for small resolutions and retro-gaming. Low-end embedded devices like microcontrollers with custom displays could benefit of this raylib functionality!
  • File loading from memory: Multiple functions have been redesigned to load data from memory buffers instead of directly accessing the files, now all raylib file loading/saving goes through a couple of functions that load data into memory. This feature allows custom virtual-file-systems and it gives more control to the user to access data already loaded in memory (i.e. images, fonts, sounds…).
  • NEW Window states management system: raylib core module has been redesigned to support Window state check and setup more easily and also before/after Window initializationSetConfigFlags() has been reviewed and SetWindowState() has been added to control Window minification, maximization, hidding, focusing, topmost and more.
  • NEW GitHub Actions CI/CD system: Previous CI implementation has been reviewed and improved a lot to support multiple build configurations (platforms, compilers, static/shared build) and also an automatic deploy system has been implemented to automatically attach the diferent generated artifacts to every new release. As the system seems to work very good, previous CI platforms (AppVeyor/TravisCI) have been removed.

Release notes are available here and a complete change log is available here. Binary versions of Raylib are available on Raylib.com while the source code is hosted under the ZLib license on GitHub. If you are interested in learning Raylib you can check out their community on Discord. You can also download Raylib via vcpkg on Visual Studio with step by step instructions available here. You can learn more about Raylib and the 3.5 release in the video below.

[youtube https://www.youtube.com/watch?v=RZJ-Z–6uxY?feature=oembed&w=1500&h=844]
Posted on Leave a comment

GDevelop Game Engine Revisted

We first looked at the GDevelop game engine back in 2017 in our Closer Look Game Engine series. In the intervening years, GDevelop 5 has come a long way, bringing more and more features to this impressive open source cross platform 2D game engine. In the past year there have been over a dozen new beta releases to the engine including several community contributions. There have also been some updates as a result of the 2020 Google Summer of Code. While many of these releases aren’t large enough to justify a video, taken as a whole it is certainly time to revisit this game engine and the improvements it has seen.

Some of the highlights of recent releases include:

  • add support for a new asset store with hundreds of ready made game objects
  • new analytics system without requiring a third party solution
  • better support for right to left languages
  • support for dynamic 2D lights
  • customizable keyboard shortcuts
  • peer to peer communication extension
  • live preview (hot reloading) support
  • command palette for quickly launching editors
  • new editor themes

These are just a few highlights of the dozens of releases over the last few months. If you are interested in checking out GDevelop it’s available for Windows, Mac, Linux and Online. It is also an open source project with the source code available on GitHub under the MIT open source license. If you want to learn more or run into problems, be sure to check out their Discord server. You can learn more about GDevelop and see it in action in the video below.

[youtube https://www.youtube.com/watch?v=0Vni4hXQAx8?feature=oembed&w=1500&h=844]
Posted on Leave a comment

Beepbox Easy Online Music Sketching Application

Beepbox is a free online tool for quickly generating music via sketching. It’s written in a combination of JavaScript and TypeScript with the source code available on GitHub under the very permissive MIT license. Getting started with Beepbox is as simple as going to the website and starting to lay down some notes. There are a variety of instruments available and you can layer multiple tracks of sounds to easily create music.

Perhaps coolest of all, as you create your song, the song’s data is encoded into the URL. You can simply share your songs URL and others can either open it in the player or they can open it in the editor and make changes. You can also download your song in .mid or .json formats for later updating, or you can export out into WAV format for use in your game engine of choice. In addition to BeepBox is there a modified more complex version called ModBox you can check out here. It is forked from the same source code but offers additional tools and levels of control at the cost of complexity.

You can learn more about BeepBox and see it in action in the video below.

[youtube https://www.youtube.com/watch?v=7hxb53xL35s?feature=oembed&w=1500&h=844]
Posted on Leave a comment

City Generator Hands-On

City Generator is a free and open-source procedural generation tool for creating American-style grid based cities. The source code is available on GitHub under the GPL 3 license, composed almost entirely of TypeScript code.

Features of City Generator include:

  • .png download
  • .png heightmap download
  • .svg download
  • .stl download
  • Several colour themes including Google Maps, Apple Maps, and hand-drawn styles
  • Pseudo-3D buildings
  • Open source

City Generator can export STL files that can then be imported into a 3D tool of choice for creating 3D levels. We should this process in Blender as well as the process of generating a city in City Generator in the video below.

[youtube https://www.youtube.com/watch?v=ligKs9aXKsA?feature=oembed&w=1500&h=844]
Posted on Leave a comment

Facebook Joins Blender as Corporate Sponsor

Today Blender announced that Facebook would be joining the Blender Development Fund as a Corporate Sponsor. A corporate sponsor is the highest tier of sponsorship and means at least 120K euro per year in financial support, which generally gets translated as two full time developers on the project. Facebook will be joining the likes of Unity, Epic Games, AMD and NVIDIA in the corporate supporter tier.

Details from the Blender announcement:

To support these artists and the countless other animators, researchers, engineers, designers and content creators who depend on open source tools, Facebook wishes to contribute to the development of Blender. Which is why we’re proud to announce that Facebook will join the Blender Foundation’s Development Fund as a Corporate Patron as of Q4, 2020.  

We at Blender see this as another important signal of the industry’s willingness to migrate to open source, and contribute to open source’s continual improvement.

Ton Roosendaal,
Chairman Blender Foundation

Facebook currently use Blender in their AR product Spark AR Studio in addition to their ownership of Oculus. If you are worried about the corporate influence on Blender, don’t worry about it, for reasons described in this video. If you want to learn more about Facebooks support for Blender be sure to check out the video below.

[youtube https://www.youtube.com/watch?v=4aNzkxQs-K4?feature=oembed&w=1500&h=844]
Posted on Leave a comment

GIMP 2.99.2 Released

GIMP, or GNU Image Manipulation Program, just released version 2.99.2 beta, a giant step toward the upcoming 3.0 release. The heart of this update is the move to the GTK 3 UI toolkit from the existing GTK2 version. This has many advantages, especially when it comes to increasingly common HiDPI devices.

Highlights of the 2.99.2 release include:

  • GTK3 based user interface, with native support for Wayland and HiDPI displays.
  • Major refactoring and cleanup
  • New plug-in API
  • Plugins now possible with Python 3, JavaScript, Lua, and Vala
  • More (color) space invasion
  • Render caching available for better performance

Be sure to check the complete release notes for further details on this release. You can also learn more about the 2.99.2 release and see GIMP in action in the video below.

[youtube https://www.youtube.com/watch?v=IdNo-k9TtDo?feature=oembed&w=1500&h=844]
Posted on Leave a comment

LDtk The Level Designer Toolkit

LDtk, or Level Designer Toolkit, is an open source MIT licensed Haxe based 2D level editor from the creator of Dead Cells. If it looks familiar that is because we recently covered it when it was known as LEd. In just a few short months though, LDtk has come a long way, including community ports to Linux and MacOS. With the 0.5 release (the re-brand version number), tons of new features were added to LDtk including:

  • Tiles flipping: in Tile Layers, you can mirror tiles before painting them by pressing X or Y (or Z). This also works from group of tiles.
  • Tiles stacking: you can now optionaly stack multiple tiles in a single cell of a Tile layer, reducing the need for multiple layers. For example, you could paint a brick wall, then enable stack mode (T), and add details like cracks or vines over the same wall. Be careful though: erasing of stacked elements can be tricky, so you should use a mix of multiple layers and stacking to get the best results.
  • New editing options barGrid lockingSingle layer mode and Empty space selection moved to a new more streamlined button bar.
  • File association: project files now use the extension *.ldtk instead of *.json. Therefore, on Windows, double-clicking such files will open the app accordingly. If you prefer the .json extension, you can force it in each project settings (but will lose benefit of the file association).
  • Auto-layer rule preview: when you move your mouse over a rule, you will now see which cells in the current layer are affected, making their testing MUCH easier.
  • Tiled (TMX) export: this optional export now generates proper standard tile layers. However, to support LDtk stacked tiles feature (see above), multiple Tiled layers might be generated per single LDtk layer. Also, IntGrid layers are now properly exported to Tiled (as standard tile layers, with an auto-generated tileset image).
  • New color picker: it supports copy/paste, manual hex value editing and a much better UI (thanks to simple-color-picker).
  • Flood-fill fixes: if you hold SHIFT while clicking in a Tile layer, it will flood-fill the area using currently selected tiles (randomly, or by stamping group of tiles, depending on the current mode).
  • Flood-fill erasing: just use SHIFT+Right click to erase a whole contiguous area.
  • The layer Rule editor now overlaps left panel and allows level editing while being open (makes rule testing much easier). Press Escape to close it.
  • In Tile layers, you can press L to load a saved tileset selection (using S key)
  • Renamed the Level panel to World (for the 0.6.x future update).
  • It’s now possible to change the tileset or even the source layer of an Auto-Layer without loosing your rules.
  • Auto-layer baking: turn a complex Auto-Layer into a standard Tile layer (think of it as the flatten feature in Photoshop). Be careful, it’s a one-way operation.
  • Unified “Show/hide grid” and “Grid locking” options. You can now just press G to toggle grid (which also implies “grid locking” in supported layer types).
  • All options (such as “Grid on/off”, or “Compact panel mode”) are now saved to a JSON file in your app folder, in userSettings/.
  • Help window is now a side panel.
  • Opaque tiles are detected in tilesets for use in various optimizations (mostly related to the new tile stacking feature).
  • Fixed a crash when deleting IntGrid layer while an AutoLayer uses it as source.
  • Added some colors to UI buttons
  • New exit button icon.

You can learn more about LDtk releases here, including an even newer 0.5.1 beta release. As mentioned earlier the project is open source with the code released under the MIT license and available on GitHub. You can learn more about LDtk here with downloads available on Itch.io. You can learn more about LDtk and see it in action in the video below.

[youtube https://www.youtube.com/watch?v=O1pmIImzEts?feature=oembed&w=1500&h=844]
Posted on Leave a comment

Six Great Game Development YouTube Channels

YouTube is an incredible resource for game developers, but sorting the gems out can be a challenge. Today we are going to highlight 6 excellent game development channels, especially if you are a Godot developer, as well as general game development guides, Blender, GameMaker and more.

AskGameDev

AskGameDev is a collection of game developers that set out to answer your questions about game development. They cover many of aspects of gamedev that are often not covered, such as how to run a Kickstarter, how to get or deal with a publisher, as well as several game development themed compilations. AskGameDev also have a website available here.

GDQuest

GDQuest are home to dozens of Godot tutorials, in fact Nathan from GDQuest is a member of the Godot documentation team. In addition to Godot coverage, GDQuest has tutorials on all kinds of FOSS software such a Blender and Krita. The GDQuest website is available here.

HeartBeast

HeartBeast started out as a GameMaker tutorial channel, of which there are dozens of high quality long form tutorial series. In more recent years, Heartbeast has been instead creating high quality multipart and stand-alone tutorials on Godot. HeartBeast also has a website available here.

BornCG

BornCG has been making high quality Blender YouTube tutorials on his channel created in 2008! In more recent years BornCG has been increasingly covering the Godot game engine, as well as creating modern Blender tutorials as well.

DevDuck

DevDuck is the newest channel on this list, less than two year old and already over 100K subscribers, an impressive feat! DevDuck is a professional developer that is documenting his indie game development experience on the side. He started off with Unity but switched to Godot and of course did videos explaining why and how.

KidsCanCode

KidsCanCode have the project mission to get kids started in coding as young as possible, often through the process of creating games. Early on they did mostly Python and PyGame tutorials but then switched to Godot in recent years. They also run the Godot Recipes on their site, a collection of snippets on how to accomplish specific tasks in Godot and GDScript.

You can learn more about all the above channels in the video below.

[youtube https://www.youtube.com/watch?v=iyBqcfRbt9s?feature=oembed&w=1500&h=844]