DaMoekster 5 Posted February 3 Posted February 3 Is it feasible to run aperture on a raspberry pi 5? I tried installing but get the error:Error response from daemon: no matching manifest for linux/arm64/v8 in the manifest list entries: no match for platform in manifest: not found. Not being an expert on docker I'm not sure if this means a complete no or something has to be changed/added to get it working.
farfetchedchild 0 Posted February 13 Posted February 13 Hey, First off, thank you for making this! It's been amazing! Now, I'm running Aperture in Docker on Windows (well, in Docker in WSL2 on Windows). I've got it working mostly ok, but when I try to analyze watch history I get an error. Also, when I try to auto detect paths I get "Unable to find media server files in Aperture's /media/ mount. Make sure your media folder is mounted at /media in Aperture's container." I have media libraries across multiple drives. Could this be the problem? They're all mounted, but I don't know of a way to enter them all as a path prefix (though I use STRM). Also, would it be possible to create virtual libraries (or playlists/collections) from user personalized Discovery recommendations for movies not in your libraries? From there Jellyseerr could be used either in the Emby client if on the web, or at the least by adding library items you don't to a watchlist monitored by Radarr or Sonarr. It'd be great to be able to request from Emby.
TheGru 164 Posted February 16 Author Posted February 16 On 2/3/2026 at 3:51 AM, DaMoekster said: Is it feasible to run aperture on a raspberry pi 5? I tried installing but get the error:Error response from daemon: no matching manifest for linux/arm64/v8 in the manifest list entries: no match for platform in manifest: not found. Not being an expert on docker I'm not sure if this means a complete no or something has to be changed/added to get it working. I didn't build it against ARM and have been tied up with work. I will work on this at some point. 1
DaMoekster 5 Posted February 17 Posted February 17 10 hours ago, TheGru said: I didn't build it against ARM and have been tied up with work. I will work on this at some point. Thanks and good luck with work!
SultanOfTux 5 Posted February 17 Posted February 17 Hi, I disabled the "Enable Watching Libraries" option in the admin panel (see screenshot), but it's still displayed for regular users—only hidden for the admin account. How can I disable it globally for all users? Thanks!
olli1806 8 Posted February 17 Posted February 17 Hello everyone, I urgently need help with the installation on my Synology NAS. Unfortunately, I am not very familiar with Docker, so I am unable to complete the installation on my own. Could someone please explain step by step how to set this up correctly on a Synology system, or point out what I need to pay special attention to? Thank you very much in advance for your support. Best regards Oliver
SultanOfTux 5 Posted February 17 Posted February 17 (edited) This is my YAML, But if yout want to Bind the Library Folders you have to add the Path to the Library. You should check the YAML from the Github Repo https://github.com/dgruhin-hrizn/aperture. First you add all the Folders you need in volume1, then add a new Project in Containermanager, and start the Docker. version: "3.7" services: aperture-db: image: pgvector/pgvector:pg16 container_name: aperture-db environment: POSTGRES_USER: app POSTGRES_PASSWORD: app POSTGRES_DB: aperture volumes: - /volume1/docker/aperture/db:/var/lib/postgresql/data healthcheck: test: ['CMD-SHELL', 'pg_isready -U app -d aperture'] interval: 5s timeout: 5s retries: 5 restart: unless-stopped aperture: image: ghcr.io/dgruhin-hrizn/aperture:latest container_name: aperture user: root ports: - 3456:3456 environment: NODE_ENV: production DATABASE_URL: postgres://app:app@aperture-db:5432/aperture RUN_MIGRATIONS_ON_START: 'true' APP_BASE_URL: https://aperture.yourdomain.ch or IP SESSION_SECRET: 'X7kP9mW3qR8tY2uV5nL6jH4fD1sA0eZ9bC2xM7nK3pQ4wE6rT8yU1iO5aN9vB2cL' OPENROUTER_API_KEY: "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" DISABLE_STRM_GENERATION: 'true' DISABLE_EMBY_COLLECTIONS: 'true' depends_on: - aperture-db volumes: - /volume1/docker/emby/config:/emby-config:ro - /volume1/docker/aperture/backups:/backups restart: unless-stopped Edited February 17 by SultanOfTux
gihayes 47 Posted February 17 Posted February 17 Any chance this might ever work for Emby running in Docker on Windows 11?
SultanOfTux 5 Posted February 17 Posted February 17 I think so, theres an extra windows docker compose on GitHub 1
DaMoekster 5 Posted February 17 Posted February 17 1 hour ago, SultanOfTux said: This is my YAML, But if yout want to Bind the Library Folders you have to add the Path to the Library. You should check the YAML from the Github Repo https://github.com/dgruhin-hrizn/aperture. First you add all the Folders you need in volume1, then add a new Project in Containermanager, and start the Docker. version: "3.7" services: aperture-db: image: pgvector/pgvector:pg16 container_name: aperture-db environment: POSTGRES_USER: app POSTGRES_PASSWORD: app POSTGRES_DB: aperture volumes: - /volume1/docker/aperture/db:/var/lib/postgresql/data healthcheck: test: ['CMD-SHELL', 'pg_isready -U app -d aperture'] interval: 5s timeout: 5s retries: 5 restart: unless-stopped aperture: image: ghcr.io/dgruhin-hrizn/aperture:latest container_name: aperture user: root ports: - 3456:3456 environment: NODE_ENV: production DATABASE_URL: postgres://app:app@aperture-db:5432/aperture RUN_MIGRATIONS_ON_START: 'true' APP_BASE_URL: https://aperture.yourdomain.ch or IP SESSION_SECRET: 'X7kP9mW3qR8tY2uV5nL6jH4fD1sA0eZ9bC2xM7nK3pQ4wE6rT8yU1iO5aN9vB2cL' OPENROUTER_API_KEY: "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" DISABLE_STRM_GENERATION: 'true' DISABLE_EMBY_COLLECTIONS: 'true' depends_on: - aperture-db volumes: - /volume1/docker/emby/config:/emby-config:ro - /volume1/docker/aperture/backups:/backups restart: unless-stopped Your session secret and api key are visible. Did you change them first? Otherwise I would change these as soon as possible.
TheGru 164 Posted March 1 Author Posted March 1 Ok I am just about in a place where I can jump back in on Aperture, stay tuned! 1 3
Jdiesel 1442 Posted March 2 Posted March 2 I've had some time to play around with the new home screen sections a bit over the past few weeks and found that a mix of views using tags and playlists work best. For things like Trakt and MdbList tags work best as they are universal and are the same across all users. Also list ordering is less critical as most people, I suspect, will want some variability in what they see on the list and not just the top 10 over and over. I've been using the AutoTag plugin for this. For user specific recommendations and server specific popular/trending lists, playlists are the way to go. The ordering is more important in this case and there is no way to define the order when using tags other than the title, release date, added on, etc. I don't know that there is a way to create home section via the API yet. You can copy setting manually between users though. This might be a barrier to making things completely seem less. I personally don't mind setting things up once as long as the tags and playlists continue to update.
TheGru 164 Posted March 4 Author Posted March 4 On 3/2/2026 at 12:44 PM, Jdiesel said: I've had some time to play around with the new home screen sections a bit over the past few weeks and found that a mix of views using tags and playlists work best. For things like Trakt and MdbList tags work best as they are universal and are the same across all users. Also list ordering is less critical as most people, I suspect, will want some variability in what they see on the list and not just the top 10 over and over. I've been using the AutoTag plugin for this. For user specific recommendations and server specific popular/trending lists, playlists are the way to go. The ordering is more important in this case and there is no way to define the order when using tags other than the title, release date, added on, etc. I don't know that there is a way to create home section via the API yet. You can copy setting manually between users though. This might be a barrier to making things completely seem less. I personally don't mind setting things up once as long as the tags and playlists continue to update. I setup my homescreen and then quickly copied the setting to all other users, so far no complaints. One additional setting is apparently incoming on an upcoming beta, where individual dynamic rows can either hide or show played items. For me this completes things as you can build a pseudo DVR home row for shows or episodes now that are your shows you can about via aperture or just favorites, and hide watched, while still allowing watched to show for other rows where hiding things would potentially break Top Pick ordering and numbered display. I am looking forward to that. Then I will jump back in on aperture updates and upgrades based on user feedback 2
fabien_m2002 14 Posted March 12 Posted March 12 Hello i have an Gemini AI sub but when i set my API ket and test, i have this error. What's wrong? Connection failed: models/text-embedding-004 is not found for API version v1beta, or is not supported for embedContent. Call ListModels to see the list of available models and their supported methods 1
sayschia 0 Posted March 17 Posted March 17 Hi, thank you for developing this. It is working perfectly! Is it possible to change the AI explanation language to german?
akacharos 35 Posted March 17 Posted March 17 Well, in case you TheGru run out of ideas when you jump back into further development of existing features in Aperture, here is just some feedback and ideas which are merely suggestions: I mentioned this earlier: Create Collections the same way we can create custom recommendation playlists with genres and example movies. Given the new revamped home logic in Emby, Collections are back in fashion! With that being a permission, admins can grant Collection creation to non-admins in Emby.If that's not technically possible, at least let admins create Collections. Add "Favorites" functionality in Aperture while browsing items that syncs to Emby (when you add an item to Favorites in Aperture, is also added to Favorites in Emby". Align Graph and List Similar Movies items: Currently Graph has more items than in the List (more of a bug maybe?). Also personal preference would be to have the List as the default instead of Graph or maybe make the default a configuration option. And maybe the List view can also benefit from the relation data (eg. Same Director, Shared Actor etc.). More filters in Browse (eg. country, watched/unwatched, household reach) Add Person (next to Movies and Series). Given /person endpoint exists already, it's a same not to easily browse/search for it.
akacharos 35 Posted March 18 Posted March 18 And a minor api endpoint modification request: pass user id on /api/assistant/chat When calling /api/assistant/chat, there is no way to specify which user the request is on behalf of. All calls made with a single service API key are attributed to the key owner, making it impossible to maintain per-user context (recommendations, history, preferences). I believe is due to const user = request.user as SessionUser (API key owner) and const { messages } = request.body (no userId accepted). On a high level, it would be something like this on src/routes/assistant/handlers/chat.ts // NOW: interface ChatBody { messages: UIMessage[] system?: string } // AFTER Add userId? to the body interface: interface ChatBody { messages: UIMessage[] system?: string userId?: string // optional override from external system } // NOW: const user = request.user as SessionUser const { messages } = request.body // AFTER Resolve the effective user right after const user = ...: const user = request.user as SessionUser const { messages, userId: requestedUserId } = request.body const effectiveUserId = requestedUserId ?? user.id // ?? means: use requestedUserId if provided, otherwise fall back to user.id // NOW: const systemPrompt = await buildSystemPrompt(user.id, user.isAdmin) const toolContext = { userId: user.id, ... } // AFTER Replace the two occurrences of user.id downstream: const systemPrompt = await buildSystemPrompt(effectiveUserId, user.isAdmin) const toolContext = { userId: effectiveUserId, // ← this is what scopes recommendations/history to the right user ... } 1
Iceburnmarko 0 Posted April 2 Posted April 2 Read through all the comments , first what an excellent plug-in…. One thing I was thinking, could it be possible to add “JustWatch api” into it. Thinking to capture what ppl watched / like / hate outside of emby.
TheGru 164 Posted April 5 Author Posted April 5 Aperture v0.7.0 Release Notes Hey everyone I'm back!!!! This one is almost entirely feedback from the comments while I have been busy working on the stuff that pays the bills. This release is a big step for people and discovery: Browse → People, credits gap (GAP) on person pages, richer browse filters, and full Seerr integration improvements. Shows You Watch now syncs with Emby/Jellyfin series favorites instead of building STRM files or virtual libraries—see Breaking changes for what to change on your media server. Baseline: follows v0.6.5 (commit f97f574). Commit range: f97f574..6893d05 (13 commits). At a glance Theme What shipped People & credits gap (GAP) GAP = TMDb filmography titles not in your library, grouped by role and media type; person browse, discover APIs (getPersonCreditsGap), filters, TMDb detail modals, profile cache, actor personId linking Browse Country, watch status, watcher reach filters; preset save/load; countries list endpoints; view mode persistence Seerr User ↔ Seerr mapping, attributed requests, My Requests, rename Jellyseerr → Seerr, settings and migrations Shows You Watch Bidirectional favorites sync; scheduled sync-watching-favorites job; removal of STRM/virtual-library pipeline and sync-watching-libraries Quality SQL fix for movie resolution filter; carousel alignment fix Summary for users Browse has a People tab: open people like titles, with grid/list view modes remembered per area. People GAP (credits gap): on each person page, Aperture compares TMDb combined credits to your library and shows what’s missing—grouped by movie vs TV and by role (e.g. director vs actor), with filters. Open a TMDb detail modal from gap rows (backdrop, metadata, request flow where applicable). Movies and series lists support country, watch status (via your history), and watcher reach (how many users on this instance have watched an item), plus saved filter presets. Seerr: requests can map to your Seerr user; My Requests and clearer Seerr naming (replacing “Jellyseerr” in the product). Shows You Watch stays a list in Aperture but syncs with series favorites on the server. Remove old watching virtual libraries in Emby and use a Home row (see below). People & credits gap (GAP) What GAP is For a given person (actor, director, writer, etc.), GAP is the set of TMDb-credited movies and TV shows that do not map to an item in your Aperture-managed library—“on TMDb but not in your server’s library.” It answers: what am I missing from this person’s filmography? How it works Core: getPersonCreditsGap loads combined TMDb credits (cached via person_tmdb_profile_cache), compares to catalog coverage, and returns role-grouped missing titles (f4cc40c). API: Discover routes expose the credits gap payload (with person browse, portrait push, TMDb movie/TV detail) using Zod schemas (1211fe6). Web: Person page: missing credits grouped by media type and role, filters, TMDb detail modals (cb83c66). MediaPosterCard compact meta for dense rows (d0904e3). Technical summary Migration: person_tmdb_profile_cache for TMDb profile images and combined credits. Helpers: listPeopleForBrowse, getPersonCreditsGap (GAP engine), findPersonMediaServerItemId for portrait push; getTVCredits / getTVExternalIds exported. Media server sync: personId on Emby/Jellyfin actor sync for TMDb linking. Browse → People: TMDb-backed grid, fallbacks, browsePeople + useViewMode (044b636). UI: Carousel align-items: flex-start for mixed-height poster rows (2bc5ba2). Browse filters (movies & series) API (59e5b01 Query params country, watchStatus, minWatchers, maxWatchers on movie and series lists; GET /api/movies/countries and GET /api/series/countries. Watch status uses watch_history; watcher reach uses distinct user counts on the instance. Web (961cd33 FilterPopper — production countries, watch status toggles, min/max watchers; wired to Browse fetch, chips, and preset save/load. Seerr (formerly “Jellyseerr” in-product) User mapping to Seerr user ids (email / username / Jellyfin match, admin override). Settings: optional seerr_require_user_mapping; migrations for seerr_user_id and 0104_rename_jellyseerr_to_seerr. API: /api/seerr — POST /api/seerr/request with userId; GET /api/seerr/requests; admin PUT for seerrUserId on users. Web: My Requests, navigation and settings renamed for Seerr. Core: seerr module, userMapping, listAllSeerrUsers; docs/OpenAPI updated. Breaking changes: Shows You Watch STRM / virtual libraries Aperture no longer: Writes STRM files, symlinks, or NFOs for Shows You Watch. Creates or updates Emby/Jellyfin virtual libraries for per-user watching output. Exposes sync-watching-libraries, STRM vs symlink settings, or the library cover image admin block for that virtual library. Database: strm_libraries rows with library_type = 'watching' and watching_library_use_symlinks are removed by migration (see Database migrations). Emby / Jellyfin: recommended Home screen row Remove the old virtual folder / library that pointed at Aperture’s watching output, and clean up aperture-watching (or similar) on disk if present. Add a Home row with Dynamic Content: Libraries: all TV Series libraries you use. Sort: Date last content added (wording may vary by server version). Sort order: Descending. Playstate: Unplayed. Favorite: Enabled. That surfaces favorited, unplayed series aligned with server favorites instead of a synthetic library. What stays in Aperture user_watching_series and /api/watching CRUD. Favorites reconcile (reconcileWatchingFavoritesForUser). POST /api/watching/refresh — reconcile only (skipped, reason, pushedToServer, removedFromDb, pulledIntoDb, pushErrors). Job sync-watching-favorites; web Shows You Watch with Sync favorites. Bug fixes Movies — resolution filter (b92cdf1 resolution counts use a subquery so GROUP BY stays valid when filtering by resolution. Database migrations Run your usual migration command so these apply in order: Migration Purpose 0101_person_tmdb_profile_cache.sql TMDb person profile / credits cache 0102_users_jellyseerr_user_id.sql Seerr user id on users 0103_jellyseerr_require_user_mapping.sql Optional require-mapping flag 0104_rename_jellyseerr_to_seerr.sql Rename identifiers and system_settings keys to Seerr 0105_remove_watching_strm_libraries.sql Remove watching strm_libraries rows and watching_library_use_symlinks (If some migrations already ran before you tag 0.7.0, confirm db/migrations state for your environment.) Update instructions For Docker users docker compose pull docker compose up -d Database migrations run on startup (or use your usual pnpm db:migrate / deployment process). Operator checklist Migrate the database before API/web versions that need new columns and caches. Emby: remove old watching virtual libraries and configure the Home row above if you used STRM watching. Seerr: confirm URL/API keys and user mapping; set admin seerrUserId overrides when auto-match fails. Jobs: schedule sync-watching-favorites; remove any references to sync-watching-libraries. API quick reference Browse filters: country, watchStatus, minWatchers, maxWatchers; GET /api/movies/countries, GET /api/series/countries. Discover (people): browse; credits gap (GAP); portrait push; TMDb movie/TV detail (see OpenAPI under discover). Watching: POST /api/watching/refresh — favorites reconcile (no written / libraryCreated). Seerr: /api/seerr/* — request, requests list, user mapping admin. Full changelog (commits since v0.6.5) f4cc40c feat(core): TMDb person cache, people browse, credits gap, portrait helpers b92cdf1 fix(api): movie resolutions filter after GROUP BY 1211fe6 feat(api): discover person routes and TMDb movie/TV detail 2bc5ba2 fix(ui): align carousel items to flex-start d0904e3 feat(web): MediaPosterCard compact meta layout 044b636 feat(web): browse people tab and view mode persistence cb83c66 feat(web): person page credits gap, filters, TMDb detail modal 59e5b01 feat(api): browse filters — country, watch status, watcher reach 961cd33 feat(web): browse filter UI for country, audience, and presets 10c58ed feat(seerr): attribute requests to users, My Requests, rename Jellyseerr to Seerr 764f9ec feat(watching): sync Shows you watch with Emby/Jellyfin favorites db84e48 feat(jobs): add sync-watching-favorites as separate scheduled job 6893d05 Remove Shows You Watch STRM libraries; keep favorites sync 3
TheGru 164 Posted April 5 Author Posted April 5 On 4/2/2026 at 10:32 AM, Iceburnmarko said: Read through all the comments , first what an excellent plug-in…. One thing I was thinking, could it be possible to add “JustWatch api” into it. Thinking to capture what ppl watched / like / hate outside of emby. Unfortunately that api is very expensive
TheGru 164 Posted April 5 Author Posted April 5 Aperture v0.7.1 Release Notes This release introduces Movie Collection Gap Analysis — a new admin tool that compares TMDb movie collections against your library to surface missing titles — plus Seerr request options so you can pick your Radarr/Sonarr server, quality profile, and root folder before submitting a request. Baseline: follows v0.7.0 (commit 6893d05). Commit range: 6893d05..94337ae (8 commits). At a glance Theme What shipped Gap Analysis Admin page comparing TMDb collections to your library; background scan persists all parts with library + Seerr status; collection-level sort & filter; movie detail modal with in-app Seerr requests TMDb Collection Cache Persistent tmdb_collection_cache table avoids repeated TMDb API calls for the same collection data Seerr Request Options Choose Radarr/Sonarr server, root folder, quality profile, and language profile before submitting requests — wired into Discovery, Person Detail, Top Picks, My Requests, and Gap Analysis Summary for users Gap Analysis is available in left nav menu under Admin → Gap Analysis. Run a scan, and Aperture fetches every TMDb movie collection referenced by your library, then shows which titles you own, which are already in Seerr's pipeline, and which are still missing. Sort collections by most missing, most complete, or name. Filter by minimum missing count with a slider to focus on the biggest gaps. Click any poster to open a detail modal with backdrop, metadata, and a Request via Seerr button — no need to leave Aperture. Request options dialog — when requesting through Seerr from anywhere in Aperture, you now pick the destination server, root folder, and quality profile. Bulk requests (select all missing in a collection, or multi-select across collections) go through the same flow. Movie Collection Gap Analysis What it is For every movie in your library that belongs to a TMDb collection (e.g. The Dark Knight Collection, Alien Collection), Aperture fetches the full collection and checks which released parts you own, which are in Seerr (requested/processing/available), and which are missing. Collections where all missing parts are already covered by Seerr are hidden entirely. How it works Background scan (refresh-library-gaps job): fetches TMDb collection data (cached in tmdb_collection_cache), cross-references your library and Seerr, and persists every released part with in_library and seerr_status into gap_analysis_results. Display path is pure SQL — zero Seerr or TMDb HTTP calls at page-load time. Fast even with hundreds of collections. UI groups results into collapsible collection cards with a responsive MoviePoster grid. Status overlays show "In Library", "Requested", "Processing", etc. Key features Collection-level sort: Most missing, Most complete, Name A–Z. Min-missing slider: hide collections with fewer than N missing titles. Search: filter by title or collection name. Bulk select + request: select individual posters or all missing in a collection, then request via Seerr with your chosen options. Detail modal: click any poster to see the TMDb detail view with backdrop, cast, overview, and request button. Technical summary Core module: packages/core/src/gap-analysis/index.ts — runLibraryGapAnalysis, getGapCollectionSummaries, listGapResults, getGapCollectionParts (all pure SQL reads). TMDb cache: packages/core/src/tmdb/collection-cache.ts — upsertCollectionCache, getCachedCollectionDataBatch, fetchCollectionDataAndCache. API routes: apps/api/src/routes/gap-analysis/index.ts — GET /latest, GET /results, GET /collection-parts, POST /refresh, POST /request. Job: refresh-library-gaps registered in jobConfig and wired in the executor. Seerr Request Options When submitting a request through Seerr, a new RequestSeerrOptionsDialog lets you choose: Server (Radarr or Sonarr instance) Root folder Quality profile Language profile (Sonarr) The dialog is wired into every request flow: Discovery cards/list items, Person Detail gap rows, Top Picks preview, My Requests, and Gap Analysis. The Seerr provider now exposes listRadarrServers, getRadarrServerDetails, listSonarrServers, getSonarrServerDetails, and batchGetMediaStatus. Database migrations Run your usual migration command so these apply in order: Migration Purpose 0106_gap_analysis.sql gap_analysis_runs and gap_analysis_results tables; source column on discovery_requests 0107_tmdb_collection_cache.sql tmdb_collection_cache table for persistent TMDb collection data 0108_gap_results_status.sql in_library and seerr_status columns on gap_analysis_results; wipes prior runs due to schema change Update instructions For Docker users docker compose pull docker compose up -d Database migrations run on startup (or use your usual pnpm db:migrate / deployment process). Operator checklist Migrate the database — the three new migrations must apply before starting the updated API. TMDb API key must be configured (Admin → Settings) for gap analysis to work. Seerr must be configured and enabled for the request flow. Without Seerr, gap analysis still shows owned vs missing but the request buttons are disabled. Run an analysis — go to Admin → Gap Analysis and click "Run analysis" to populate the initial snapshot. Re-run after syncing new movies. API quick reference Gap Analysis: GET /api/admin/gap-analysis/latest, GET /api/admin/gap-analysis/results, GET /api/admin/gap-analysis/collection-parts, POST /api/admin/gap-analysis/refresh, POST /api/admin/gap-analysis/request. Seerr services: GET /api/seerr/radarr, GET /api/seerr/radarr/:serverId, GET /api/seerr/sonarr, GET /api/seerr/sonarr/:serverId. Batch status: POST /api/seerr/batch-status. Full changelog (commits since v0.7.0) eef6397 feat(seerr): add Radarr/Sonarr request options and batch media status abea84a feat(tmdb): add persistent collection cache and helper types 952acdb feat(core): add gap analysis engine with pre-computed Seerr status 2f55407 feat(api): add gap analysis REST routes and background job executor 03b275d feat(web): add Gap Analysis admin page with detail modal 12d4676 docs: add gap analysis section to admin guide and API reference 94337ae feat(web): replace row-level sort with collection sort and min-missing filter
TheGru 164 Posted April 5 Author Posted April 5 Good lord making this thing multi-language is a huge pain in the ass! 2
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now