Copied to Clipboard
Project Avatar

Doom Style Clone

Making a clone of Doom for fun and learning purposes, its made in Golang

View on GitHub

Golang Wolfenstein Clone

Remade a bit of the Wolfenstein game for fun to learn Golang

Project Progress

Making Walls

Texturing Walls

Finished World

I've added the gun too and want to add enemies and multiplayer next

Some pages I used to help make this: https://www.scratchapixel.com/lessons/3d-basic-rendering/computing-pixel-coordinates-of-3d-point/mathematics-computing-2d-coordinates-of-3d-points https://gamedev.stackexchange.com/questions/35263/converting-world-space-coordinate-to-screen-space-coordinate-and-getting-incorre

Project Avatar

Gallery

Django WebApp to view images like my personal image library from my PC anywhere.

View on GitHub View Demo

Media Library Browser

App made to browse media on my computer from anywhere in a nice graphical UI

Django for the backend, will handle user sign in logic and hosting User can view pictures and download them

TODO

  • List directory for images
  • Refresh .thumbnail directory
    • Check the directory images each have a thumbnail, create one if it doesnt exist
    • Delete thumbnails if the media itself doesnt exist

Want the GUI to look like made on the WII

Project Avatar

Bomberman

Bomberman is a school project to recreate the old school game in C++ from the ground up, making not only …

View on GitHub View Demo

Slime Bomberman

Built a custom bomberman game in a team of 3 for our collage final project. Coded in C/C++.

The project needed us to build as much as possible on our own. We had to write the maths and logic needed render 3D objects, lighting, animations, sound and menu's of the game.

Features

It has the core functionalities of the original bomberman game. Where the goal is to kill all enemies on the map and then find the hidden door to the next level.

Player has 3 lives and a timer to complete each level. The game includes: - 3 Maps - 2 Powerups

Preview

Build and run

There is a Cmake file provided, should compile for Unix, Mac and Windows

Windows

Needs specific .dll files which can be hard to find so they are included in a seperate branch called dependencies, just copy them to the games .exe directory

Project Avatar

suika

View on GitHub

Suika Game Godot

Play in your browser
Host Yourself: Prebuilt Web Build

This project is a remake of the game Suika.
It was made for fun as it is a simple game and a good way to learn Godot

Requires Godot 4.2.1+

Build and Serving

Designed with the addon Box2D for the physics, without it the fruit bounce too high and have bad physics

Designed to run in the browser.
To serve run:
npm i serve
npx serve --cors

Fix headers error


https://github.com/gzuidhof/coi-serviceworker
Project needs to run on HTTPS

Project Avatar

livepaste

None

View on GitHub

Live Paste

Project made because I wanted an easy way to copy text from 1 device to another.

You open the webpage and paste your text, any user connected to the same room will be able to see that text and copy it.

Works using websockets and django channels to update the messages live.

Build & Run

Install requirements pip install -r requirements.txt Run with gunicorn DJANGO_SETTINGS_MODULE='livepaste.settings' gunicorn livepaste.asgi:application -k uvicorn.workers.UvicornWorker

Demo

Project Avatar

Ray Tracer

Ray Tracer made in C

View on GitHub

Ray Tracer

This Ray Tracer is a port of the the ray tracer I did at school It has been re written in C++ from its code written in C
I rewrote it in C++ because I plan to add some more advanced features than the C version has

Current Features

It's able to trace 4 different shapes: - plane - sphere - cylinder - cone

2 types of light sources - Direct light source - Point light source

Effects - Dithering - Sepia - Greyscale

Reflections with n dimensions
Anti Aliasing
Multi Threaded Tracing

Settings file to make changes without needing to recompile the program

To Run

Make sure you have GCC, and Make installed and configured on your machine

make all
./RT <map file>

Preview

This map file will produce the image below
MAP FILE





Compare Directories

Script was made because sometimes I have a directory with almost the same files, like if I was coping files and it failed somehow, I wanted to know what files are missing and those existing which have different file sizes.

Copy to Clipboard
'''
Compare Directories
Script was made because sometimes I have a directory with almost the same files, 
like if I was coping files and it failed somehow,
I wanted to know what files are missing and those existing which have
different file sizes.
'''
import os

def compare_directories(dir1, dir2):
    # Get a list of files in both directories
    files1 = {f: os.path.getsize(os.path.join(dir1, f)) for f in os.listdir(dir1) if os.path.isfile(os.path.join(dir1, f))}
    files2 = {f: os.path.getsize(os.path.join(dir2, f)) for f in os.listdir(dir2) if os.path.isfile(os.path.join(dir2, f))}

    # Find files present in both directories with differing sizes
    differing_files = [f for f in files1 if f in files2 and files1[f] != files2[f]]

    # Print the differing files
    if differing_files:
        print("Files with different sizes:")
        for f in differing_files:
            print(f"  {f}: {files1[f]} bytes (dir1) vs {files2[f]} bytes (dir2)")
    else:
        print("No differing files found.")

# Directories to compare
dir1 = "C:\Users\Heagan\Desktop\Meta\Games\Batman\com.camouflaj.manta"
dir2 = "This PC\Quest 3\Internal shared storage\Android\obb\com.camouflaj.manta"

compare_directories(dir1, dir2)

pySmartDL Example

Its a download manager, script shows basic example for usage.

Copy to Clipboard
"""
pySmartDL Example
Its a download manager, script shows basic example for usage.
"""
from pySmartDL import SmartDL

url = input("URL: ")
dest = "." # or '~/Downloads/' on linux

obj = SmartDL(url, dest)
obj.start()
path = obj.get_dest()

Youtube Downloader Example

Contains 2 example scripts on using youtube downloader. One uses pytubefix, the other youtube_dl

Copy to Clipboard
"""
Youtube Downloader Example
Contains 2 example scripts on using youtube downloader.
One uses pytubefix, the other youtube_dl
"""

from pytubefix import YouTube
from pytubefix.cli import on_progress

url = "https://www.youtube.com/watch?v=KJwYBJMSbPI"

yt = YouTube(url, on_progress_callback=on_progress, use_po_token=True, allow_oauth_cache=True)
print(yt.title)
ys = yt.streams.get_highest_resolution()
ys.download()


from __future__ import unicode_literals
import youtube_dl

# https://www.youtube.com/watch?v=qaRkqu7PJpQ

ydl_opts = {
    'format': 'bestaudio/best',
    'postprocessors': [{
        'key': 'FFmpegExtractAudio',
        'preferredcodec': 'mp3',
        'preferredquality': '192',
    }],
}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    ydl.download(["https://www.youtube.com/watch?v=qaRkqu7PJpQ"])
    # ydl.download([input('url -> ')])

Start an FTP server.

Made to share files on my local network easily.

Copy to Clipboard
"""
Start an FTP server.
Made to share files on my local network easily.
"""
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer

LOCAL_IP = '192.168.0.171'


def main():
    # Instantiate a dummy authorizer for managing 'virtual' users
    authorizer = DummyAuthorizer()

    # Define a new user having full r/w permissions and anonymous user
    authorizer.add_user('user', '12345', 'C:/Users/George/Downloads/Share', perm='elradfmw')
    authorizer.add_anonymous('C:/Users/George/Downloads/Share')

    # Instantiate FTP handler and apply authorizer
    handler = FTPHandler
    handler.authorizer = authorizer

    # Define a banner (string returned when client connects)
    handler.banner = "Welcome to my FTP server."

    # Instantiate FTP server and serve
    address = (LOCAL_IP, 21)  # listens on all interfaces on port 21
    server = FTPServer(address, handler)
    server.serve_forever()

if __name__ == '__main__':
    main()

Video Compressor

Script using ffmpeg to compress all videos in a directory. Made and run on my Google Drive to reduce videos file sizes.

Copy to Clipboard
"""
Video Compressor
Script using ffmpeg to compress all videos in a directory.
Made and run on my Google Drive to reduce videos file sizes.
"""

import os
import subprocess
import requests
from pathlib import Path
import os
import concurrent.futures
from tqdm import tqdm  # Install with: pip install tqdm
from threading import Lock
import shutil
from time import sleep
import json
import psutil


input_dir = 'D:\My Drive\Media'
output_dir = Path('C:\Processed')
video_extensions = [
    ".mp4",
    # ".mov"
]
lock = Lock()


def has_been_processed(input_file):
    command = [
        "ffprobe",
        "-v", "quiet",
        "-select_streams", "v:0",
        "-show_entries", "stream=codec_name,profile,level",
        "-of", "default=noprint_wrappers=1",
        input_file
    ]
    result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
    processed_with = result.stdout.strip()
    return processed_with == 'codec_name=hevc\nprofile=Main\nlevel=123'


def compress_video(input_file, outdir):
    command = [
        "ffmpeg",
        "-i", input_file,
        "-c:v", "hevc_nvenc",
        "-preset", "slow",
        "-rc", "vbr_hq",
        "-cq", "30",
        "-b:v", "0",
        "-rc-lookahead", "32",
        "-spatial_aq", "1",
        "-aq-strength", "8",
        "-c:a", "copy",
        "-metadata", "processed_with=hevc",
        outdir
    ]
    result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)


def convert(filepath):
    suf = Path(filepath).suffix.lower()
    if suf in video_extensions:
        try:
            full_output_dir = output_dir / '/'.join(filepath.parts[1:-1])
            full_output_dir.mkdir(parents=True, exist_ok=True)
            if not has_been_processed(filepath):
                shutil.move(filepath, full_output_dir)
                compress_video(full_output_dir / filepath.name, filepath)# if filepath.suffix == '.mp4' else str(filepath).replace(filepath.suffix, '.mp4'))

        except Exception as e:
            print(f'Error {e} with:', filepath)


def list_files_and_folders(directory):
    # Collect all file and folder paths
    items = []
    for root, dirs, files in os.walk(directory):
        items.extend([Path(os.path.join(root, f)) for f in files if Path(os.path.join(root, f)).suffix.lower() in video_extensions])
    total_items = len(items)
    if total_items == 0:
        print("No files or folders found.")
        return
    with tqdm(total=total_items, desc="Processing", unit="item") as pbar:
        for item in items:
            convert(item)
            pbar.update(1)


    # # Use tqdm to display a progress bar
    #     with concurrent.futures.ThreadPoolExecutor(max_workers=1) as executor:
    #         futures = [executor.submit(convert, item) for item in items]

    #         # Update the progress bar as each task completes
    #         for future in concurrent.futures.as_completed(futures):
    #             with lock:

list_files_and_folders(input_dir)

Audio to Text

Converts an audio file clip and transcribes the text.

Copy to Clipboard
"""
Audio to Text
Converts an audio file clip and transcribes the text. 
"""

import speech_recognition as sr
from moviepy.audio.io.AudioFileClip import AudioFileClip

# Extract audio from video
video_path = input('Video file name: ')
audio_path = "example_audio.wav"
audio_clip = AudioFileClip(video_path)
audio_clip.write_audiofile(audio_path)

# Transcribe the audio
recognizer = sr.Recognizer()
with sr.AudioFile(audio_path) as source:
    audio_data = recognizer.record(source)
    text = recognizer.recognize_google(audio_data)
with open('transcribed_text.md', 'w') as f:
    f.write(text)

I have my own web server and like to run a few projects.

  • Home

    Home Page of my server and domain. 🌐 I'm always updating this page since I use it to test out whatever new thing I'm working on.

  • Planka

    Self-hosted Planka, an alternative to Trello / Jira. πŸ—‚οΈ I use it to plan my side projects, create cards, and keep track of progress.

  • Jellyfin

    Self-hosted Jellyfin, an alternative to Plex. 🎢 Makes it easy to access my music from any device.

  • VS Code Web

    Self-hosted VS Code Editor πŸ’» Runs on my server so I can code and manage it from anywhere, on any device.

  • Excalidraw

    Self-hosted Excalidraw ✏️ A draw.io alternative, great for sketching out project ideas and designs.

  • TOTP Authenticator

    Side project πŸ” I built my own 2FA Authenticator after losing my phone and getting locked out of everything. This way I add my own security and access it from the web instead of being tied to a device.

  • Peer-to-Peer File Transfer

    Side project πŸ“€ Transfers files directly between devices without storing them on the server.

  • Paste Room

    Side project πŸ“ A simple way to share text between devices (like my PC and laptop). Create a 'room' by changing the URL, and it becomes your unique space for shared text.

  • Media Gallery

    I wanted an easy way to show off pictures without filling up my phone storage. πŸ“Έ This site displays media from any folder I choose, and I can share it with anyone via ngrok.

  • Suika Game Clone

    I made a Suika Game clone in Godot πŸ‰ β€” simple but fun!

  • EagleCraft

    Minecraft in your browser! ⛏️ I used to run a dedicated server, but if it’s offline you can always connect to another public server.