▲ 2.7k r/NotHowGirlsWork+1 crossposts

Referring to women as "females", and categorizing them based on yoga posture

Literally just saw this on Reddit

u/Global-Eye-7326 — 18 days ago

Found on another Subreddit - this is so cringe

What's wrong with a woman from a CIS country wanting an iPhone? Why would women from NATO/EU countries want a short guy? Cringe here is even an understatement

Edit: quite a few have been asking what CIS countries are. It's the Commonwealth of Independent States - a defined list of former Soviet countries. Russia, Kazakhstan, Belarus and a few others. It has NOTHING to do with "cis vs. trans".

Secondly, quite a few people in the comments have been asking "what does this mean". I'll provide my understanding of this. I can't read the mind of the guy who made it, but I'll take a shot

TLDR based on my understanding...

  • The former Soviet state woman, who looks average, has a high barrier of entry - if a man wants to date her, he better be tall, she'll expect him to buy her an iPhone, pay her bills, etc.
  • The "hotter" Western woman, who looks like she'd be "out of a man's league", is low maintenance - she'll accept a short guy, go 50/50 on dates, etc.

So it's telling guys that they're better off with women of Western countries who "look hot", because they'll happily take an average guy and not expect too much from him.

Obviously the infographic is super cringe, as there's no way this categorizes women.

u/Global-Eye-7326 — 1 month ago

NYMHC Chapter 4 pt. 1 Game Bug

The chapter loads, I pull the trigger. Instead of triggering the usual cutscene "I don't know why I did it...", I got the "failed" message flash. The first shot has the trigger set on the enemy, so it's impossible to fail in working gameplay. What's interesting is the time counter stays at zero (because mission failed, right?). After waiting for some time, three characters walk in slow motion. Esc key triggers "pause" but not menu, so only way out is to force quit the game. This is an PC.

I'm tracking how I lose NYMHC every time, started this month. I may share some stats at some point. But for now, just sharing a game bug that I experienced for the first time.

Recently I saw a YouTuber who claimed to beat MP3 NYMHC in seven attempts (hard to believe). One bug he noticed is when the last enemy in the room respawns (happened to him with the last enemy in Chapter 6 pt 2). It's happened to me many times, but in Chapter 4 pt 2 the last sniper through the window near the start respawned twice, meaning I had to take him down three times!

u/Global-Eye-7326 — 2 months ago

Finally completed Max Payne 1 & 2 Dead on Arrival

It's actually very satisfying.

  • Max Payne 1 you get the bonus fight ending
  • Max Payne 2 you get the alternative ending
  • Max Payne 1 you get SEVEN saves per chapter, whereas Max Payne 2 you only get FOUR

Anyway, looking at Lutris...

  • Max Payne 1 - 87 hours and 49 minutes. This was from playing Fugitive/Hard Boiled/Dead on Arrival from start to finish
  • Max Payne 2 - 54 hours and 32 minutes. Also same deal...Fugitive/Hard Boiled/Dead on Arrival from start to finish - facts that it's a shorter game!
  • Max Payne 3 - 320 hours and 49 minutes. This was ONLY challenge mode last two chapters, New York Minute all chapters, a few random story mode replays and mostly NYMHC which I haven't beat yet
reddit.com
u/Global-Eye-7326 — 2 months ago
▲ 32 r/LXQt+2 crossposts

LXQt Wayland via Labwc with an attended script!

Hey, spent WAY too much time setting up LXQt on Wayland via Labwc, so I vibe coded a Bash script to make things easier for future deployments. Screenshots of my HP Z240 desktop. my Acer Swift 3 laptop and my Acer Aspire One 722 netbook, all three running Debian 13 with LXQt. Installed initially with X11 in both cases. No other desktop environments installed prior to this setup.

I have keyboard shortcuts for:

  • Launch terminal Ctrl+Alt+t
  • Launch PCManFM-Qt Winkey+e
  • Launch qalculate-qt Ctrl+Alt+c because the keyboards hooked up to those machines don't have a "calculator" button
  • Lxqt-runner Alt+F2 - couldn't find a way to launch mainmenu2 in Wayland. Any pointers would be appreciated
  • Screenlock Winkey+L
  • Screenshot PrintScr or Winkey+s - netbook has a dead PrintScr key

Aside from that, other configurations

  • Dark mode, same icons as I had in X11
  • Touchpad increased speed on the netbook - because otherwise the pointer was slow
  • clipboard manager, wifi and bluetooth on panel - note that the netbook doesn't have Bluetooth integrated
  • a custom power button. LXQt's integrated power button doesn't work on Wayland. Using a launcher pointing to a script that uses Kdialog, so it gives the options to log off, reboot or shutdown
  • launchers for qt6ct as well as a display manager. custom display manager (launcher and script using Kdialog) to give the user all the options (set screen resolution, setup multi-monitor configuration, etc.)
  • Keyboard configuration - Dvorak with right Ctrl as Compose key

The Netbook may be a silly device, but I plan on using it for pen testing. Since the HDD had already failed on me by the time I got it, I already bought an SSD for it and installed Debian LXQt on it. I ordered a Wifi adapter that should arrive within 2-3 weeks. Luckily I can easily swap the laptop wifi adapter in it. I already upgraded the RAM from 2GB to 8GB. Sadly, I'll be doing pen testing in X11 most likely (unless anyone has experience in pen testing on Wayland). But when I'm not pen testing, the netbook can be logged in with Wayland.

u/Global-Eye-7326 — 3 months ago
▲ 121 r/maxpayne

Max Payne 3 RGB Distortion Effect Script

Whether it's an intense fight, Max medicates with pain killers, engages in melee combat or gets blasted by an explosion, Rock⭐ gave us the RGB distortion effect. Ladies and Gentlemen, I replicated that effect in a script that you can run in terminal or add to the context menu of your file manager. I attached some sample output images. I grabbed some images of Max Payne from the first game in combat (including shootdodge and melee).

TLDR

  • First Disclaimer: I'm not claiming anyone else's intellectual property, whether it be Rockstar, Remedy, or whoever owns the rights to the images I took from an image search.
  • Second Disclaimer: I'm not self-promoting as I'm not monetizing the script. Use it if you wish, or don't use it. Doesn't affect me
  • Third Disclaimer: No AI is used in the script. The script runs offline and does not invoke any local AI model either
  • Script runs on Linux. As mentioned previously, I have ported scripts to Windows in the past, but it's a royal pain, and simply not worth my time of day. Linux runs on practically anything including a potato, so you can run it on metal, dual-boot, run it inside Windows, whatever you like. Or port it to run natively on Windows. Only dependency is ImageMagick. Usually comes preloaded on Linux anyway
  • It's literally /path/to/MaxPayne3RGBDistortion.sh /path/to/image.jpg (or whichever file extension). No arguments needed. You can run the script plus --help to see available arguments, but it's not designed to be a multi-option script

Now onto the code. Save it as MaxPayne3RGBDistortion.sh in your ~/Scripts folder (or wherever you stash scripts). Follow the steps to add it to your file manager context menu if you like (it's convenient - adds it to your context menu when you right-click on an image. Copy the code, save it in the text editor as a Bash script, make it executable - chmod +x /path/to/MaxPayne3RGBDistortion.sh and enjoy.

#!/usr/bin/env bash

set -euo pipefail


#############################################
# Max Payne 3 RGB Distortion
# Radial chromatic aberration + effects
# Based on GIMP pipeline tutorial
# ImageMagick implementation
#############################################


VERSION="1.0"


#############################################
# Colors
#############################################

RED="\e[31m"
GREEN="\e[32m"
YELLOW="\e[33m"
RESET="\e[0m"


#############################################
# Dependency installer
#############################################

install_dependencies()
{

echo -e "${YELLOW}Missing dependencies detected.${RESET}"


if command -v apt >/dev/null 2>&1; then

    echo "Detected Debian-based system"
    sudo apt update
    sudo apt install -y \
        imagemagick \
        bc


elif command -v dnf >/dev/null 2>&1; then

    echo "Detected Fedora-based system"
    sudo dnf install -y \
        ImageMagick \
        bc


elif command -v pacman >/dev/null 2>&1; then

    echo "Detected Arch-based system"
    sudo pacman -Sy --needed --noconfirm \
        imagemagick \
        bc


else

    echo -e "${RED}"
    echo "Cannot automatically install dependencies."
    echo
    echo "Please install:"
    echo "  ImageMagick 7+"
    echo "  bc"
    echo -e "${RESET}"
    exit 1

fi

}


#############################################
# Check dependencies
#############################################

check_dependencies()
{

MISSING=()

command -v magick >/dev/null \
|| MISSING+=("imagemagick")

command -v bc >/dev/null \
|| MISSING+=("bc")


if [ ${#MISSING[@]} -gt 0 ]; then

    echo -e "${YELLOW}Missing: ${MISSING[*]}${RESET}"
    install_dependencies

fi

}



#############################################
# Usage
#############################################

usage()
{

cat <<EOF

Max Payne 3 RGB Distortion $VERSION

Radial chromatic aberration with optional
zoom blur, bloom, and color ghosting.
Clean center, increasingly distorted edges.

Usage:

$0 [options] <input...>


Input:

  <file>...         One or more image files
  --dir <path>      Process all images in directory


Presets:

  --subtle          Subtle cinematic effect
  --maxpayne        Max Payne style (default)
  --severe          Severe disorientation


Zoom blur:

  --no-zoom         Disable zoom blur


Output:

  --output-dir DIR  Output directory (default: same as input)
  --suffix STR      Output suffix (default: _mp3rgb)
  --format FMT      Output format (default: png)


Other:

  --debug           Keep intermediate files in /tmp
  --help            Show usage


Examples:

$0 photo.jpg
$0 photo.jpg --maxpayne
$0 photo.jpg --subtle --no-zoom
$0 --dir ./screenshots --severe

EOF

}



#############################################
# Defaults
#############################################

PRESET="maxpayne"
ZOOM_BLUR="on"
OUTPUT_DIR=""
SUFFIX="_mp3rgb"
FORMAT="png"
DEBUG=0
DIR_INPUT=""
INPUT_FILES=()


#############################################
# Parse arguments
#############################################

while [[ $# -gt 0 ]]
do

case "$1" in


--subtle)
PRESET="subtle"
;;


--maxpayne)
PRESET="maxpayne"
;;


--severe)
PRESET="severe"
;;


--no-zoom)
ZOOM_BLUR="off"
;;


--output-dir)
OUTPUT_DIR="$2"
shift
;;


--suffix)
SUFFIX="$2"
shift
;;


--format)
FORMAT="$2"
shift
;;


--debug)
DEBUG=1
;;


--dir)
DIR_INPUT="$2"
shift
;;


-h|--help)
usage
exit 0
;;


*)
INPUT_FILES+=("$1")
;;


esac

shift

done



#############################################
# Validate input
#############################################

if [ -z "$DIR_INPUT" ] && [ ${#INPUT_FILES[@]} -eq 0 ]; then

    usage
    exit 1

fi


if [ -n "$DIR_INPUT" ] && [ ! -d "$DIR_INPUT" ]; then

    echo "Directory not found: $DIR_INPUT"
    exit 1

fi


for f in "${INPUT_FILES[@]}"; do

    if [ ! -f "$f" ]; then

        echo "File not found: $f"
        exit 1

    fi

done



#############################################
# Check
#############################################

check_dependencies



#############################################
# Preset values
#############################################

case "$PRESET" in


subtle)

WARP_STRENGTH=0.02
BLUR_FACTOR=0.04
ZOOM_OPACITY=30
GHOST_OPACITY=12
BLOOM_OPACITY=8

;;


maxpayne)

WARP_STRENGTH=0.05
BLUR_FACTOR=0.07
ZOOM_OPACITY=45
GHOST_OPACITY=20
BLOOM_OPACITY=14

;;


severe)

WARP_STRENGTH=0.08
BLUR_FACTOR=0.10
ZOOM_OPACITY=60
GHOST_OPACITY=30
BLOOM_OPACITY=20

;;


esac



#############################################
# Image processing pipeline
#############################################

process_image()
{

local INPUT="$1"
local OUTPUT="$2"

local TMP
TMP=$(mktemp -d)

if [ "$DEBUG" -eq 0 ]; then
    trap "rm -rf '$TMP'" RETURN
else
    echo "  Debug: intermediate files in $TMP"
fi


echo
echo "Processing: $INPUT"
echo "Preset: $PRESET  Zoom: $ZOOM_BLUR  Warp: $WARP_STRENGTH  Blur: $BLUR_FACTOR"


# --- Step 1: Normalize ---
# Auto-orient, sRGB, strip metadata.
# Flatten alpha onto white background.

magick "$INPUT" \
    -auto-orient \
    -colorspace sRGB \
    -strip \
    -background white -alpha remove -alpha off \
    "$TMP/normalized.png"


# Get dimensions

local DIMS
DIMS=$(magick identify -format "%w %h" "$TMP/normalized.png" 2>&1)
local IMG_W IMG_H
IMG_W=$(echo "$DIMS" | cut -d' ' -f1)
IMG_H=$(echo "$DIMS" | cut -d' ' -f2)

local SHORT_DIM
if [ "$IMG_H" -lt "$IMG_W" ]; then
    SHORT_DIM=$IMG_H
else
    SHORT_DIM=$IMG_W
fi

echo "  ${IMG_W}x${IMG_H}  short=${SHORT_DIM}"



# --- Step 2: Decompose to RGB channels ---

magick "$TMP/normalized.png" -channel R -separate "$TMP/ch_r.png"
magick "$TMP/normalized.png" -channel G -separate "$TMP/ch_g.png"
magick "$TMP/normalized.png" -channel B -separate "$TMP/ch_b.png"



# --- Step 3: Warp Red outward (barrel distortion) ---

magick "$TMP/ch_r.png" \
    -distort Barrel "${WARP_STRENGTH} 0 0 1" \
    -virtual-pixel Edge \
    "$TMP/ch_r_warped.png"



# --- Step 4: Warp Blue inward (pincushion distortion) ---

magick "$TMP/ch_b.png" \
    -distort BarrelInverse "${WARP_STRENGTH} 0 0 1" \
    -virtual-pixel Edge \
    "$TMP/ch_b_warped.png"



# --- Step 5: Create radial masks ---
# Black center (clean) to white edges (distorted).
# Offset controls how much of the center stays clean.
# White point controls where full distortion begins.

local MAX_RADIUS
MAX_RADIUS=$(echo "scale=4; sqrt($IMG_W * $IMG_W + $IMG_H * $IMG_H) / 2" | bc -l)

# RGB channel mask: 20% offset, full effect at 75% of short dim
local RGB_WHITE_PCT
RGB_WHITE_PCT=$(echo "scale=2; 75 * $SHORT_DIM / $MAX_RADIUS" | bc -l)

magick -size "${IMG_W}x${IMG_H}" radial-gradient: \
    -negate \
    -level "20%${RGB_WHITE_PCT}%" \
    "$TMP/mask_rgb.png"

# Ghost/zoom mask: 10% offset, full effect at 65% of short dim
local GHOST_WHITE_PCT
GHOST_WHITE_PCT=$(echo "scale=2; 65 * $SHORT_DIM / $MAX_RADIUS" | bc -l)

magick -size "${IMG_W}x${IMG_H}" radial-gradient: \
    -negate \
    -level "10%${GHOST_WHITE_PCT}%" \
    "$TMP/mask_ghost.png"



# --- Step 6: Blend warped channels with originals using masks ---
# Where mask is black (center): original shows through
# Where mask is white (edges): warped version shows through

# Red: warped over original
magick "$TMP/ch_r.png" \
    \( "$TMP/ch_r_warped.png" "$TMP/mask_rgb.png" -compose CopyOpacity -composite \) \
    -compose Over -composite \
    "$TMP/ch_r_final.png"

# Blue: warped over original
magick "$TMP/ch_b.png" \
    \( "$TMP/ch_b_warped.png" "$TMP/mask_rgb.png" -compose CopyOpacity -composite \) \
    -compose Over -composite \
    "$TMP/ch_b_final.png"

# Green: untouched
cp "$TMP/ch_g.png" "$TMP/ch_g_final.png"



# --- Step 7: Recompose RGB ---

magick "$TMP/ch_r_final.png" \
       "$TMP/ch_g_final.png" \
       "$TMP/ch_b_final.png" \
    -combine \
    "$TMP/rgb_radial_base.png"

echo "  RGB radial base: done"



# --- Step 8: Zoom blur (optional) ---
# Simulate radial zoom blur by computing the
# weighted average of multiple scaled copies.
# Normalizes weights to sum to 1.0 so the
# accumulation never exceeds 1.0 (avoids clamping).
# Starts from the first weighted copy to preserve
# RGB colorspace through Add compositing.

if [ "$ZOOM_BLUR" = "on" ]; then

    echo "  Creating zoom blur..."

    local ZOOM_N=11

    # Pre-compute gaussian weights and sum them
    local SUM_WEIGHTS="0"
    local WEIGHTS=()
    local j=0
    while [ "$j" -lt "$ZOOM_N" ]; do
        local center_j dist_j w_j
        center_j=$(echo "scale=6; ($ZOOM_N - 1) / 2" | bc -l)
        dist_j=$(echo "scale=6; ($j - $center_j) / (($ZOOM_N - 1) / 4)" | bc -l)
        w_j=$(echo "scale=6; d2 = $dist_j * $dist_j; e(-d2 / 2)" | bc -l)
        WEIGHTS+=("$w_j")
        SUM_WEIGHTS=$(echo "scale=6; $SUM_WEIGHTS + $w_j" | bc -l)
        j=$((j + 1))
    done

    # Normalize weights to sum to 1.0
    local NORM_WEIGHTS=()
    local nw
    for nw in "${WEIGHTS[@]}"; do
        NORM_WEIGHTS+=("$(echo "scale=6; $nw / $SUM_WEIGHTS" | bc -l)")
    done

    # Start accumulation from the first weighted copy (preserves RGB)
    local i=0
    local t_i scale_i scale_pct_i
    t_i=$(echo "scale=6; $i / ($ZOOM_N - 1)" | bc -l)
    scale_i=$(echo "scale=6; 1 - $BLUR_FACTOR + 2 * $BLUR_FACTOR * $t_i" | bc -l)
    scale_pct_i=$(echo "scale=2; $scale_i * 100" | bc)

    magick "$TMP/rgb_radial_base.png" \
        -resize "${scale_pct_i}%" \
        -gravity center -extent "${IMG_W}x${IMG_H}" \
        -evaluate multiply "${NORM_WEIGHTS[$i]}" \
        "$TMP/zoom_accum.png"

    # Add remaining weighted copies
    i=1
    while [ "$i" -lt "$ZOOM_N" ]; do

        t_i=$(echo "scale=6; $i / ($ZOOM_N - 1)" | bc -l)
        scale_i=$(echo "scale=6; 1 - $BLUR_FACTOR + 2 * $BLUR_FACTOR * $t_i" | bc -l)
        scale_pct_i=$(echo "scale=2; $scale_i * 100" | bc)

        magick "$TMP/rgb_radial_base.png" \
            -resize "${scale_pct_i}%" \
            -gravity center -extent "${IMG_W}x${IMG_H}" \
            -evaluate multiply "${NORM_WEIGHTS[$i]}" \
            "$TMP/zoom_weighted.png"

        magick "$TMP/zoom_accum.png" "$TMP/zoom_weighted.png" \
            -compose Add -composite \
            "$TMP/zoom_accum.png"

        i=$((i + 1))

    done

    # The accum IS the zoom-blurred image (normalized weights sum to 1.0)
    cp "$TMP/zoom_accum.png" "$TMP/zoom_blurred.png"

    # Apply ghost mask and final opacity
    magick "$TMP/zoom_blurred.png" \
        "$TMP/mask_ghost.png" -compose CopyOpacity -composite \
        -channel A -evaluate multiply "$(echo "scale=4; $ZOOM_OPACITY / 100" | bc -l)" \
        "$TMP/zoom_final.png"

    echo "  Zoom blur: done"

fi



# --- Step 9: Bloom ---
# Gaussian blur + Screen blend at reduced opacity.
# Creates the bright overexposed glow at the edges.

echo "  Creating bloom..."

local BLOOM_BLUR
BLOOM_BLUR=$(echo "scale=2; $SHORT_DIM * 0.006" | bc)

# Gaussian blur of the base
magick "$TMP/rgb_radial_base.png" \
    -blur 0x${BLOOM_BLUR} \
    "$TMP/bloom_blurred.png"

# Screen blend: 1 - (1 - base) * (1 - bloom)
magick "$TMP/rgb_radial_base.png" "$TMP/bloom_blurred.png" \
    -compose Screen -composite \
    "$TMP/bloom_screen.png"

# Blend at bloom opacity: base * (1-O) + screen * O
local BLOOM_INVERSE
BLOOM_INVERSE=$((100 - BLOOM_OPACITY))

magick "$TMP/rgb_radial_base.png" "$TMP/bloom_screen.png" \
    -compose Blend -define compose:args="${BLOOM_OPACITY},${BLOOM_INVERSE}" -composite \
    "$TMP/bloom_final.png"

echo "  Bloom: done"



# --- Step 10: Side ghost ---
# Slightly shifted duplicate with blur and radial mask.
# Creates the uneven lateral color separation.

echo "  Creating side ghost..."

local GHOST_X GHOST_Y GHOST_BLUR
GHOST_X=$(echo "scale=0; $IMG_W * 0.002" | bc)
GHOST_Y=$(echo "scale=0; $IMG_H * 0.0008" | bc)
GHOST_BLUR=$(echo "scale=2; $SHORT_DIM * 0.0005" | bc)

# Shift the image and blur
magick "$TMP/rgb_radial_base.png" \
    -background black \
    -page "+${GHOST_X}+${GHOST_Y}" \
    -flatten \
    -gravity center -crop "${IMG_W}x${IMG_H}+0+0" +repage \
    -blur 0x${GHOST_BLUR} \
    "$TMP/ghost_shifted.png"

# Apply ghost mask and opacity
magick "$TMP/ghost_shifted.png" \
    "$TMP/mask_ghost.png" -compose CopyOpacity -composite \
    -channel A -evaluate multiply "$(echo "scale=4; $GHOST_OPACITY / 100" | bc -l)" \
    "$TMP/ghost_final.png"

echo "  Side ghost: done"



# --- Step 11: Final composite ---
# Layer order (bottom to top):
#   RGB RADIAL BASE
#   SIDE GHOST (Normal, masked, 18%)
#   ZOOM BLUR (Normal, masked, 25%)
#   BLOOM (Screen, 12%)

echo "  Compositing final..."

# Start with base
cp "$TMP/rgb_radial_base.png" "$TMP/final.png"

# Layer 1: Side ghost
magick "$TMP/final.png" "$TMP/ghost_final.png" \
    -compose Over -composite \
    "$TMP/final.png"

# Layer 2: Zoom blur
if [ "$ZOOM_BLUR" = "on" ]; then
    magick "$TMP/final.png" "$TMP/zoom_final.png" \
        -compose Over -composite \
        "$TMP/final.png"
fi

# Layer 3: Bloom (already blended at correct opacity)
cp "$TMP/bloom_final.png" "$TMP/final_bloom.png"

# Actually, bloom needs to be composited over the current composite.
# Re-do bloom using the current composite as base for screen blend.
magick "$TMP/final.png" "$TMP/bloom_blurred.png" \
    -compose Screen -composite \
    "$TMP/bloom_screen_final.png"

magick "$TMP/final.png" "$TMP/bloom_screen_final.png" \
    -compose Blend -define compose:args="${BLOOM_OPACITY},${BLOOM_INVERSE}" -composite \
    "$TMP/final.png"



# --- Output ---

magick "$TMP/final.png" "$OUTPUT"

echo -e "${GREEN}Created:${RESET} $OUTPUT"

}



#############################################
# Build file list
#############################################

FILES=()

if [ -n "$DIR_INPUT" ]; then

    for f in "$DIR_INPUT"/*.{jpg,jpeg,png,bmp,tiff,tif,webp}; do

        [ -f "$f" ] || continue
        FILES+=("$f")

    done

else

    FILES=("${INPUT_FILES[@]}")

fi


if [ ${#FILES[@]} -eq 0 ]; then

    echo "No images found to process."
    exit 1

fi



#############################################
# Output directory
#############################################

if [ -n "$OUTPUT_DIR" ]; then

    mkdir -p "$OUTPUT_DIR"

fi



#############################################
# Process
#############################################

COUNT=0
TOTAL=${#FILES[@]}

echo
echo "Max Payne 3 RGB Distortion $VERSION"
echo "Preset: $PRESET  Zoom: $ZOOM_BLUR  Warp: $WARP_STRENGTH  Blur: $BLUR_FACTOR"
echo "Processing $TOTAL image(s)..."


for INPUT_FILE in "${FILES[@]}"; do

    COUNT=$((COUNT + 1))

    # Determine output path
    DIR="$(dirname "$INPUT_FILE")"
    BASE="$(basename "$INPUT_FILE")"
    NAME="${BASE%.*}"

    if [ -n "$OUTPUT_DIR" ]; then
        OUT_DIR="$OUTPUT_DIR"
    else
        OUT_DIR="$DIR"
    fi

    OUTPUT_FILE="$OUT_DIR/${NAME}${SUFFIX}.${FORMAT}"

    echo
    echo "[$COUNT/$TOTAL]"

    if ! process_image "$INPUT_FILE" "$OUTPUT_FILE"; then

        echo -e "${RED}Failed:${RESET} $INPUT_FILE"
        continue

    fi

done



#############################################
# Notification
#############################################

if command -v notify-send >/dev/null 2>&1; then

    notify-send \
        "Max Payne 3 RGB Distortion" \
        "Processed $COUNT image(s)" \
        2>/dev/null || true

fi


echo
echo -e "${GREEN}Done:${RESET} $COUNT/$TOTAL images processed"

There you have it! Now you can enjoy flipping your images into a Max Payne 3 style RGB distortion effect!

u/Global-Eye-7326 — 3 months ago
▲ 101 r/maxpayne

Max Payne 1 & 2 Graphic Novel Conversion Script

DISCLAIMER: This is an unofficial fan-made tool inspired by the graphic novel presentation of Max Payne 1 and Max Payne 2. Max Payne is property of Remedy Entertainment and Rockstar Games. This project is not affiliated with or endorsed by them (although endorsement is welcome).

SECOND DISCLAIMER: I'm not doing self-promotion, since I'm not selling anything. Use the script if you want to, or don't, doesn't affect me either way. This script is not monetized.

I whipped up a Bash script to convert an image into the style of Max Payne 1 & 2 graphic novels. It may or may not be in its final form (I'm really happy with it for now). I'm sharing a few example outputs...first image - the famous image of Sam Lake dressed as Max Payne. Second image is randomly pulled from a web image search (I claim no ownership over either image, by the way). The second image looks more similar to a more typical scene in a Max Payne 1 graphic novel, which is why it looks closer to what you'd expect to see. Sam Lake is in a bright room, so the effect may not be as obvious. Script works on images of any resolution (including 4K), though processing time can be longer. Third image uses the Max Payne 2 style rendering for graphic novel, also pulled from web image search, I claim no ownership.

Only dependency is ImageMagick. Since I run Linux on metal, I've only tested it on Linux (Windows users can grab WSL, or even setup a VM, or better yet dedicate a machine to Linux on metal). I've ported scripts for ImageMagick to Windows in the past and it's a royal pain (more effort to test & debug, get some weird quirks too) anyone is welcome to do it if that's your thing. I know MacOS has Bash in terminal, but I'm not a Mac user so I'm not gonna troubleshoot that. Pretty sure it'd be minimal effort to make it work on a Mac.

Anyway, I'll share the code. Should auto-install missing dependencies on Debian/Fedora/Arch based distros. Just make it executable (in right-click->properties or chmod +x /path/to/MaxPayneGraphicNovel.sh).

To run it, open Bash terminal and run /path/to/MaxPayneGraphicNovel.sh /path/to/file.jpg --mp1

You can switch --mp1 to --mp2 or --noir (Noir is basically MP1 filters but output is in Black and White). Should work with any image file (JPG, PNG, WEBP).

NOT HANDLED BY THE SCRIPT: for your text boxes, well you can design speech bubbles with background colour #ABB5B6 and narration boxes background colour #A8D7A8 for Max Payne 1 style and #A5AFAE for Max Payne 2 style (black outline). For the text, use all caps with the Graphite font (bold, semi-condensed). Here's the link to the main font but you can look up the other variants (bold, bold-narrow, bold-wide, light, light-narrow), assuming you'll be using bold-narrow in all caps the whole time. Note that the font that I linked is FREE FOR PERSONAL USE. I have no idea what the IP rights are on replicating filters used by Remedy for Max Payne 1 & 2 graphic novels, so it's more of a personal use kind of thing. TLDR good for fan art, NOT FOR CREATING your own game called Pax Mayne and claiming it to be entirely your IP.

#!/usr/bin/env bash

set -euo pipefail
#############################################
# Max Payne Graphic Novel Generator
# Painted oil-brush style — v2.1
#############################################


VERSION="2.1"


#############################################
# Colors
#############################################

RED="\e[31m"
GREEN="\e[32m"
YELLOW="\e[33m"
RESET="\e[0m"


#############################################
# Dependency installer
#############################################

install_dependencies()
{

echo -e "${YELLOW}Missing dependencies detected.${RESET}"


if command -v apt >/dev/null 2>&1; then

    echo "Detected Debian-based system"

    sudo apt update

    sudo apt install -y \
        imagemagick \
        libnotify-bin


elif command -v dnf >/dev/null 2>&1; then

    echo "Detected Fedora-based system"

    sudo dnf install -y \
        ImageMagick \
        libnotify


elif command -v pacman >/dev/null 2>&1; then

    echo "Detected Arch-based system"

    sudo pacman -Sy --needed --noconfirm \
        imagemagick \
        libnotify


else

    echo -e "${RED}"
    echo "Cannot automatically install dependencies."
    echo "Unsupported Linux distribution."
    echo
    echo "Please install:"
    echo "  ImageMagick"
    echo "  libnotify"
    echo -e "${RESET}"

    exit 1

fi

}


#############################################
# Check dependencies
#############################################

check_dependencies()
{

MISSING=()

command -v magick >/dev/null \
|| MISSING+=("imagemagick")


command -v notify-send >/dev/null \
|| MISSING+=("libnotify")


if [ ${#MISSING[@]} -gt 0 ]; then

    install_dependencies

fi

}


#############################################
# Check
#############################################

check_dependencies



#############################################
# Defaults
#############################################

PROFILE="mp1"


#############################################
# Usage
#############################################

usage()
{

cat <<EOF

Max Payne Graphic Novel Filter $VERSION

Usage:

$0 image [options]


Profiles:

--mp1       Original Max Payne style (warm, gritty)
--mp2       Max Payne 2 graphic novel (sharp, high-contrast, inked)
--noir      Black and white noir


Examples:

$0 photo.jpg --mp1

EOF

}



#############################################
# Parse arguments
#############################################

INPUT=""

while [[ $# -gt 0 ]]
do

case "$1" in


--mp1)
PROFILE="mp1"
;;


--mp2)
PROFILE="mp2"
;;


--noir)
PROFILE="noir"
;;


-h|--help)
usage
exit
;;


*)
INPUT="$1"
;;

esac

shift

done



if [[ -z "$INPUT" ]]
then

usage
exit 1

fi



if [[ ! -f "$INPUT" ]]
then

echo "File not found:"
echo "$INPUT"

exit 1

fi



#############################################
# Profiles
#############################################

case "$PROFILE" in


mp1)

PAINT=3
BILATERAL_SIGMA=3
SHADOW_BLACK=5
SHADOW_WHITE=100
SATURATION=55
WARM="#70533a"
COLORIZE=10
GRAIN=0.18
NOISE_ATTENUATE=0.6

;;


mp2)

PAINT=2
SHADOW_BLACK=14
SHADOW_WHITE=97
SHARPEN_RADIUS=1
SHARPEN_AMOUNT=0.5
LOCAL_CONTRAST_RADIUS=20
LOCAL_CONTRAST_AMOUNT=0.15
SATURATION=55
WARM="#4a5868"
COLORIZE=3
SIGMOIDAL_AMT=4
SIGMOIDAL_MID=45
GRAIN=0.22
NOISE_ATTENUATE=0.7
VIGNETTE_SIZE=55

;;


noir)

PAINT=5
BILATERAL_SIGMA=5
SHADOW_BLACK=10
SHADOW_WHITE=95
SATURATION=0
WARM=""
COLORIZE=0
GRAIN=0.25
NOISE_ATTENUATE=0.7

;;


esac



#############################################
# Output filename
#############################################

DIR="$(dirname "$INPUT")"
FILE="$(basename "$INPUT")"

NAME="${FILE%.*}"

OUTPUT="$DIR/${NAME}_mpgn_${PROFILE}.png"



#############################################
# Temporary workspace
#############################################

TMP=$(mktemp -d)

trap 'rm -rf "$TMP"' EXIT



#############################################
# Pipeline
#############################################


echo "Processing:"
echo "$INPUT"


# --- Step 1: Normalize ---

magick "$INPUT" \
-auto-orient \
-colorspace sRGB \
-strip \
"$TMP/01.png"


# --- Scale factors for resolution ---
# Effects are tuned for 1080p. Scale parameters
# with a power curve so larger images get disproportionately
# stronger effects to maintain perceived visual impact.

DIMS=$(magick identify -format "%w %h" "$TMP/01.png" 2>&1)
IMG_W=$(echo "$DIMS" | cut -d' ' -f1)
IMG_H=$(echo "$DIMS" | cut -d' ' -f2)

if [ "$IMG_W" -ge "$IMG_H" ]; then
    LONGEST=$IMG_W
else
    LONGEST=$IMG_H
fi

SCALE=$(awk "BEGIN { printf \"%.2f\", ($LONGEST / 1920) ^ 2.0 }")

# Linear scale for intensity effects (color, shadow) —
# these don't need the aggressive power curve.
LIN_SCALE=$(awk "BEGIN { printf \"%.2f\", $LONGEST / 1920 }")

PAINT_S=$(awk "BEGIN { v = $PAINT * $SCALE; printf \"%.0f\", (v < 2) ? 2 : v }")
COLORIZE_S=$(awk "BEGIN { v = $COLORIZE * $LIN_SCALE; printf \"%.0f\", (v < 1) ? 1 : v }")
SHADOW_S=$(awk "BEGIN { v = $SHADOW_BLACK * $LIN_SCALE; printf \"%.0f\", (v > 25) ? 25 : v }")



case "$PROFILE" in


mp1|noir)

# --- MP1 / Noir Pipeline ---
# Painted oil-brush look — warm, gritty, atmospheric.

BIL_R_S=$(awk "BEGIN { v = 4 * $SCALE; printf \"%.0f\", (v < 3) ? 3 : v }")
BIL_S_S=$(awk "BEGIN { v = $BILATERAL_SIGMA * $SCALE; printf \"%.0f\", (v < 2) ? 2 : v }")

echo "Resolution: ${IMG_W}x${IMG_H}  scale: ${SCALE}x  paint: ${PAINT_S}  blur: ${BIL_R_S}x${BIL_S_S}  colorize: ${COLORIZE_S}%  shadow: ${SHADOW_S}%"


# Step 2: Oil paint brush effect

magick "$TMP/01.png" \
-paint "$PAINT_S" \
"$TMP/02.png"


# Step 3: Bilateral blur

magick "$TMP/02.png" \
-bilateral-blur ${BIL_R_S}x${BIL_S_S} \
"$TMP/03.png"


# Step 4: Color grading

magick "$TMP/03.png" \
-modulate 100,$SATURATION,100 \
${WARM:+-fill "$WARM" -colorize "${COLORIZE_S}"%} \
"$TMP/04.png"


# Step 5: Shadow deepening

magick "$TMP/04.png" \
-level "${SHADOW_S}%,${SHADOW_WHITE}%" \
"$TMP/05.png"


# Step 6: Film grain

magick "$TMP/05.png" \
-seed 42 \
-attenuate "$NOISE_ATTENUATE" \
+noise Gaussian \
"$TMP/06.png"


# Step 7: Output

magick "$TMP/06.png" \
"$OUTPUT"

;;


mp2)

# --- Max Payne 2 Pipeline ---
# High-contrast graphic novel — sharp edges, deep blacks,
# printed ink texture. Less painterly than MP1, more photographic.

SHARPEN_S=$(awk "BEGIN { v = $SHARPEN_RADIUS * $LIN_SCALE; printf \"%.1f\", (v < 0.5) ? 0.5 : v }")
SHARPEN_A=$(awk "BEGIN { printf \"%.2f\", $SHARPEN_AMOUNT * $LIN_SCALE }")
LOCAL_R=$(awk "BEGIN { v = $LOCAL_CONTRAST_RADIUS * $LIN_SCALE; printf \"%.0f\", (v < 10) ? 10 : v }")
LOCAL_A=$(awk "BEGIN { printf \"%.2f\", $LOCAL_CONTRAST_AMOUNT * $LIN_SCALE }")
VIG_S=$(awk "BEGIN { v = $VIGNETTE_SIZE * $LIN_SCALE; printf \"%.0f\", (v < 50) ? 50 : v }")

echo "Resolution: ${IMG_W}x${IMG_H}  scale: ${SCALE}x  paint: ${PAINT_S}  sharpen: ${SHARPEN_S}x${SHARPEN_A}  local: ${LOCAL_R}x${LOCAL_A}  colorize: ${COLORIZE_S}%  vig: ${VIG_S}"


# Step 2: Subtle oil paint
# Just enough to break up photographic fine detail without
# making it look "painted" — MP2 is graphic, not painterly.

magick "$TMP/01.png" \
-paint "$PAINT_S" \
"$TMP/02.png"


# Step 3: Sharpen edges
# MP2 has crisp, well-defined edges. Unsharp mask brings
# back and enhances detail lost by the light paint step.

magick "$TMP/02.png" \
-unsharp "${SHARPEN_S}x${SHARPEN_A}+0.05+0" \
"$TMP/03.png"


# Step 4: Local contrast boost
# Large-radius unsharp mask increases midtone contrast
# without affecting fine detail — makes skin and surfaces
# look dramatically lit, which is core to the MP2 look.

magick "$TMP/03.png" \
-unsharp "${LOCAL_R}x${LOCAL_A}+0+0" \
"$TMP/04.png"


# Step 5: Color grading
# Muted, slightly cool/neutral tones. MP2 has less warm
# cast than MP1 — more steel blue-grey than amber.

magick "$TMP/04.png" \
-modulate 100,$SATURATION,100 \
${WARM:+-fill "$WARM" -colorize "${COLORIZE_S}"%} \
"$TMP/05.png"


# Step 6: S-curve contrast
# Crush blacks first, then apply sigmoidal contrast for
# the dramatic shadow/highlight pop of the MP2 graphic novel.

magick "$TMP/05.png" \
-level "${SHADOW_S}%,${SHADOW_WHITE}%" \
-sigmoidal-contrast "${SIGMOIDAL_AMT}x${SIGMOIDAL_MID}%" \
"$TMP/06.png"


# Step 7: Heavy film grain
# MP2's graphic novel panels have a visible printed texture.
# Much heavier grain than MP1 for that comic-book halftone feel.

magick "$TMP/06.png" \
-seed 42 \
-attenuate "$NOISE_ATTENUATE" \
+noise Gaussian \
"$TMP/07.png"


# Step 8: Vignette
# Manual radial gradient vignette — darkens edges to draw
# focus center and approximate MP2's close-up depth feel.

magick "$TMP/07.png" \
\( +clone -fill black -colorize 100% \
   -fill white -draw "roundrectangle 15,15,%[fx:w-16],%[fx:h-16] 30,30" \
   -blur 0x"${VIG_S}" \
\) \
-compose multiply -composite \
"$TMP/08.png"


# Step 9: Output

magick "$TMP/08.png" \
"$OUTPUT"

;;

esac



#############################################
# Notification
#############################################

notify-send \
"Max Payne Graphic Novel" \
"Created $(basename "$OUTPUT")" \
2>/dev/null || true



echo
echo -e "${GREEN}Finished:${RESET}"
echo "$OUTPUT"

Note for Max Payne 3, there's two ways to go. There's the filters/effects for cover art, and there's the actual comic books which use a Marvel Hero style. That's going to be a separate script of its own.

u/Global-Eye-7326 — 3 months ago

Breaking the Fourth Wall in Max Payne 1

Weapon statistics hanging in the air, glimpsed out of the corner of my eye. Endless repetition of the act of shooting, time slowing down to show off my moves. The paranoid feel of someone controlling my every step...I was in a computer game. Funny as Hell, it was the most horrible thing I could think of.

u/Global-Eye-7326 — 3 months ago
▲ 14 r/Fedora

[Tutorial] Fixing a Broken NVIDIA Driver Update on Fedora 44 (RPM Fusion) and Rolling Back to a Stable Version

This is a step-by-step recovery process for fixing a broken NVIDIA driver setup on Fedora caused by mixed driver branches, COPR interference, version locks, and DNF exclusions. It's important for anyone with an EOL Nvidia GPU (Quadro M 2k series on laptops, and any GTX GPU on desktop). For older GPU's (GT series), stick with Nouveau. Newer GPU's (RTX series), you can still use the latest driver.

1. Boot into a working kernel

Reboot the system and open the GRUB menu:

  • Hold Shift (BIOS) or Esc (UEFI) during boot
  • Use the down arrow key to select an older kernel version to boot from
  • Select a previous working kernel (not the newest one)

Verify once booted:

uname -r

2. Disable COPR NVIDIA driver sources

If installed via COPR, disable it:

sudo dnf copr disable t0xic0der/nvidia-auto-installer-for-fedora

If that does not work, manually remove the repo file:

sudo rm -f /etc/yum.repos.d/*t0xic0der*

Then refresh DNF:

sudo dnf clean all
sudo dnf makecache

3. Remove all NVIDIA packages

Completely remove installed NVIDIA drivers:

sudo dnf remove '*nvidia*'

Then clean leftover dependencies:

sudo dnf autoremove

4. Fix DNF exclusions (critical)

Open DNF configuration:

sudo nano /etc/dnf/dnf.conf

Look for and remove this line if present:

exclude=akmod-nvidia* kmod-nvidia* xorg-x11-drv-nvidia*

This line prevents NVIDIA packages from installing and caused dependency failures.

Save and exit.

5. Remove version locks - we'll lock it again later

Check current locks:

sudo dnf versionlock list

Remove NVIDIA-related locks:

sudo dnf versionlock delete 'akmod-nvidia*'
sudo dnf versionlock delete 'kmod-nvidia*'
sudo dnf versionlock delete 'nvidia-*'
sudo dnf versionlock delete 'xorg-x11-drv-nvidia*'

Or fully reset:

sudo dnf versionlock clear

6. Remove conflicting CUDA and legacy drivers

Clean mixed driver remnants (important if multiple branches were installed):

sudo dnf remove '*cuda*' '*libnvidia*' '*390xx*'
sudo dnf autoremove

7. Rebuild initramfs

sudo dracut --force --regenerate-all

Note: If you see /boot/efi errors, check your EFI mount or /etc/fstab.

8. Reboot

Reboot and confirm fallback graphics are active:

lsmod | grep nvidia

At this stage, it should be empty or using Intel/Nouveau.

9. Reinstall NVIDIA driver

Legacy 580xx branch

sudo dnf install akmod-nvidia-580xx xorg-x11-drv-nvidia-580xx

Do NOT mix driver branches.

10. Re-lock driver version (only after everything works)

Install versionlock plugin:

sudo dnf install python3-dnf-plugin-versionlock

Lock working packages:

sudo dnf versionlock add akmod-nvidia\*
sudo dnf versionlock add xorg-x11-drv-nvidia\*
sudo dnf versionlock add nvidia-modprobe\*

Open DNF configuration:

sudo nano /etc/dnf/dnf.conf

Make sure your dnf.conf file looks like this:

[main]
gpgcheck=True
installonly_limit=3
clean_requirements_on_remove=True
best=False
skip_if_unavailable=True
exclude=akmod-nvidia* kmod-nvidia* xorg-x11-drv-nvidia*

This will allow DNF to work, and not update certain key packages to a newer driver version, while allowing other secondary packages to update (which is fine).

I'm now successfully on Fedora 44 with Nvidia driver 580.xx. Hopefully others will find this guide useful.

reddit.com
u/Global-Eye-7326 — 3 months ago
▲ 438 r/thepassportbros+1 crossposts

Philippines Named Best Country For Retirement - Do You Agree?

We brought my father to the Philippines and he really liked it, while staying single/widowed! - I really don’t like this stereotypical photo, but it came with the article:

The Philippines just claimed the top spot.

In a ranking that may surprise many people, the Philippines has been named the best country in the world for retirement in the Retirement Abroad Index 2026.

The ranking, compiled by UK-based insurance provider Expatriate Group, gave the Philippines a score of 78 out of 100. The country stood out for its affordable cost of living and one of the most accessible retirement visa programs available to foreigners.

According to the report, a retired couple can live comfortably on about £750 to £1,000 per month, especially outside Metro Manila, where costs tend to be lower in smaller cities and coastal communities.

The study also highlighted the Special Resident Retiree’s Visa, describing it as one of the easiest retirement pathways among the countries evaluated.

Not everything was perfect. Researchers pointed out that healthcare quality can vary significantly between major urban centers and rural areas, making comprehensive health insurance an important consideration for retirees planning to settle in the country.

The Department of Tourism welcomed the recognition, while Philippine Retirement Authority General Manager Bob Zozobrado said the ranking reflects the country's growing appeal to retirees looking for affordability, comfort, and a better quality of life.

The Philippines finished ahead of other popular retirement destinations including Thailand, Colombia, Portugal, South Africa, and Sri Lanka. The index measured countries based on healthcare, cost of living, visa accessibility, insurance requirements, and how well expatriates integrate into local communities.

For a country often discussed for its challenges, this ranking highlights a different side of the story. Sometimes the places people dream of leaving are the same places others dream of spending the rest of their lives.

Top Destinations

Philippines (78/100): Top-ranked due to affordable living, accessible visas requiring a ~£11,000 deposit, and strong expat integration.

Thailand (77/100): Second place, excelling in healthcare (joint highest score with Spain/France) and insurance requirements (20/20), though scoring lower on integration.

Colombia (73/100): Noted for straightforward visa routes and low living costs.

Portugal (71/100): Highest-ranked European nation, favored for its D7 visa, mild climate, and low crime.

South Africa (69/100): Tied for fifth.
Sri Lanka (69/100): Tied for fifth.
UAE/Dubai (68/100): Tied for seventh.
Malaysia (68/100): Tied for seventh.
Mexico (66/100)
Indonesia (64/100): Tied for tenth.

Spain (64/100): Tied for tenth, held back by high living costs despite excellent healthcare.

Panama (63/100)

u/ChrisWayg — 4 months ago

France Refugee Passport

Found the France Refugee passport rather interesting! Met a handful of Sudanese guys who've settled in France to be travelling with it.

u/Global-Eye-7326 — 4 months ago

Success in Uganda

Now am travelling home. After shy of three months in East Africa for freedom, chaos and bad manners (and most importantly dating), the ending has a very incredible plot twist.

Coming back to Uganda from Kenya, I dated a couple ladies knowing I had little time before the end of my trip. Both struggled to express their emotions in the moment. One of them was otherwise fine and great beyond that (even paid her own transport!). But the other one turned out to be a hot mess. Emotionally unstable, lacks self-control with alcohol, and even ran off with the cash in my phone case (yet she left her bags and belongings in my room at the guesthouse). Given how obnoxious that one was, I hit up the dating app and found another lady.

Then everything changed. Although I had less than a week with her, she's just perfect for me (so far). It's going to continue as a long distance relationship until the next trip. She's not only respectful, but is upfront about her feelings (also non-judgemental and non-confrontational), practicing liturgical Christian, childfree (always a bonus), emotionally mature, matches on love languages, is beautiful and has a entrepreneurial mindset. Best thing is, she and I listen to each other. She even helped me through a hot mess that I had gotten myself into (nothing to do with women though).

Finding respectful women in Uganda is not hard. Most of them are respectful (let's say at least eight out of ten of them are respectful). Many of them expect you to pay for transport and food when you go out together (and guesthouse). Some will voluntarily pay for some things (not an exact 50/50, but more of a turn based thing where they may pay for things up to half the time). Finding a woman who can be upfront about her feelings in a kind way? They're there, though fewer (meaning you may need to date a bunch before you pick one).

I deleted my dating app account. I'll continue the long distance relationship. Next trip I'm going exclusive.

I LOVE UGANDA! Happy Ugandan Martyrs Day!

🇺🇬🇺🇬🇺🇬🇺🇬🇺🇬🇺🇬🇺🇬🇺🇬🇺🇬🇺🇬🇺🇬🇺🇬🇺🇬🇺🇬🇺🇬🇺🇬🇺🇬🇺🇬🇺🇬🇺🇬

reddit.com
u/Global-Eye-7326 — 4 months ago

Uganda 🇺🇬 Rwanda 🇷🇼 Kenya 🇰🇪 - AMA

TLDR, Kenya is

  • Double the price of Uganda, half the price of Rwanda
  • The most opportunistic people. Bus boys will carry your suitcase and then demand money. Women will date you and then ask for money for their pocket
  • Great for tourism. Great place to reach the coast (use sunblock, even if you're in the sun for 10 minutes...the coast can be unforgiving) and to see animals
  • Very Westernized. Tattoos, piercings and even T-Rex!
  • Unstable. Riots and protests can happen at any time (both happened while I was there) because Kenyans take democracy seriously
  • less alcoholic than Uganda (same league as Rwanda for alcohol)
  • cleaner than Uganda for exhaust, but not as clean as Rwanda. They also burn garbage in the streets like in Uganda
  • mostly reliable for Internet (similar to Rwanda)

You can find a genuine Kenyan lady, though they are rare. Just like opportunistic Ugandan ladies are there, but also rare. The numbers aren't even close. Arriving in Kampala on a Kenyan bus, the Kenyan guys were welcoming me to Uganda, reminding me that I reached the destination for the ladies (even the Kenyan men know). Even the street food has a better selection in Uganda.

Am so glad I'm finishing my trip in Uganda. It's so easy to have ladies lined up in Kampala.

I could go back to Kenya for the right woman, but other than that, maybe just for tourism. Uganda is a must on every East African trip. Heck, even with a Kenyan or Rwandan lady, I'd propose we chill in Uganda and enjoy life.

reddit.com
u/Global-Eye-7326 — 5 months ago

Uganda 🇺🇬 & Rwanda 🇷🇼 - two months in

Two months into my East African trip. TLDR, Uganda HOT, Rwanda NOT. Why'd I go to Rwanda? Got a bunch of friends in Kigali, so why not lol.

Dating app works incredibly well in East Africa as a PPB. They're a wasteland for local guys, but as a PPB, we have options!

  • I had been swiping right about 3-5 times out of 10 in Uganda, only 1/10 in Rwanda
  • Rwanda is about 4x the price of Uganda for food and maybe 3x the price for accommodations. Not a deal breaker for me because I have a boatload of Rwandan friends
  • Rwandan women can be tall, but few are pretty in the face. I had fun with one Rwandan lady as I knew her as friends prior, but I didn't meet any Rwandan ladies from dating app here (no point). Still a great time!
  • The two countries are more culturally similar than different. Obviously Ugandan women wear gomas dresses and that remains exclusively within their borders. Ugandans put the meat or fish in the sauce whereas the Rwandans put it on the plate. Rwandans serve food with mayo, salt and hot pepper. Condiments are more "upon request" in Uganda
  • Language barrier - travelling on only English is MUCH easier in Uganda than Rwanda. In fact, in Uganda it's the Baganda who struggle the most with English because Luganda is the most widely used local language, but Ugandans of different tribes who don't have a common root language will end up speaking to each other in English. But... travelling on other Western languages in Uganda is basically a dead end. In Rwanda, ALL Rwandans speak Kinyarwanda - meaning they RARELY use English outside of school. Signs are in English everywhere in Rwanda, and they may do web searches in English, but many are even too shy to speak English. Their "switchover" from French to English is somewhat incomplete. Many Rwandans still have a French Christian name, Catholic churches still use French, and many older Rwandans are better in French than English. Knowing French gives you a bump up in Rwanda, but you may rely on a friend who's educated to interpret Kinyarwanda for you. I have NEVER had this issue in Uganda where I needed a friend to interpret a local language for me (only friends would fill me in on what I'd miss in conversation in their language, which is to be expected). In Uganda, even deep in the village, pretty much anyone is ready to talk to you in English
  • In Rwanda, there's no burning garbage in the streets (better waste management), street vendors are limited to bus parks (bus "terminals"), and there are no roadside kiosks. In Uganda, there are street vendors everywhere, local guys will come up and talk to you from anywhere (in Rwanda it'll only happen if the guys are very drunk, and that's rare compared to Uganda), and there's street food everywhere. Common street food in Uganda includes what they call a "Rolex" (chiapati which is flatbread rolled with an omelet)
  • Customs are not harmonized (yet). Each time you cross borders, you'll have to declare what you have. Immigration and customs was much more organized entering Uganda, but in Rwanda, they didn't seem to know what they were doing (immigration officer repeated the same basic questions multiple times, customs ignored the x-ray machine, went through everyone's bags piece by piece, brought me to secondary for customs and were literally talking nonsense, I called them out and then they let me go). As usual, don't let them intimidate you with their incompetence. At Entebbe airport, I was formerly able to haggle with customs
  • Quick pro tip for Rwanda...take $100 USD notes TO Rwanda and leave with smaller USD notes. Rwanda trades $100 notes higher (both buy and sell) than smaller notes. Not the case in Uganda.

Rwandans can be nice people. I have definitely dealt with some drama (not dating related) here, but was otherwise great. Credit cards are widely accepted in Rwanda (Uganda is almost exclusively cash or mobile money only). Crypto is easy to swap in Uganda but basically illegal in Rwanda.

Back to topic regarding the ladies. I'll cover my overall impression of the different tribes. Note that I lack experience with the Lugbara or Nileo-Hamite ladies....Lugbara are an isolated tribe, might as well be the "Basques of East Africa" and the Nilo-Hamites are primarily from the Eastern region.

  • Nyankole/Banyankole - they're in both Uganda and Rwanda (obviously many more in Uganda). This is THE MOST FEMININE Bantu tribe in Uganda. If you meet a dime who's Nyankole, you've found a true beauty! Their language is similar to Luganda. Have them teach you some common phrases in their language and you'll be understood in Luganda as well
  • Mutooro - Western region. Very beautiful ladies here. Good amount of 8/9/10's. Similar to the Banyankole but somewhat further North (Fort Portal Town is their biggest city...it has a colder climate as it's in the Highlands)
  • Muganda/Baganda - majority tribe in the Central region. Many are mixed with Rwandan, boosting their apple bottoms lol. The Baganda are the real "mixed bag" of Uganda. Most of the ugly women in Uganda are Baganda, but...the Baganda have a boatload of 7/8/9's. Dimes may be rare, but 8's and 9's are abundant. If you date one, have her teach you some Luganda (at least the greetings) because this will take you far around Kampala
  • Heading North...Acholi - biggest Nilotic tribe of the North. If you date any, try to learn some of their language. They'll look more like the Sudanese as many South Sudanese are also Acholi. There are some real beauties here but...be warned, Acholi people have been heavily relocated and damaged due to wars, LRA, etc. They also get silenced in politics. Among the older Acholi, many suffer disfigurement and trauma. The Gen Z are mostly fine (some grew up in orphanages). If you find an Acholi queen, there's nothing wrong with that. But, before chasing the Acholi, there's the...
  • Langi/Lango - sister tribe to the Acholi. Their language is mutually intelligible with Acholi and many even speak Acholi as well (since Acholi music & urban population dominate among the Nilotic languages in Uganda). The Langi haven't suffered the same way as the Acholi. There are tall, beautiful, dark Langi ladies. You can get them in different body types. If you find a Langi who's a dime, you're in good hands. There's also the Alu (a bit more central) who are also Nilotic, but I lack experience and exposure to them

TLDR, if you get a dime who's Nyankole or Langi, you've done well. Other tribes have dimes as well. There's no tribe to 100% avoid, as everything will depend more on the person, and the selection per tribe will heavily depend on the region where you stay. Uganda is cheap (lunch that can feed one or two people for just over $3 USD, guest houses for $17-35 USD per night), you could go to a cheaper destination, but then you're chancing everything else. Skip Rwanda unless you're going for a specific lady (or visiting for other reasons). Ugandans of all tribes reside in Kampala, with the Baganda obviously being the majority. Don't be afraid to travel to remote places in Uganda.

Hope this helps!!

reddit.com
u/Global-Eye-7326 — 5 months ago