From f59d2b9c1cac1a28c0cc360477cf6e4d139da602 Mon Sep 17 00:00:00 2001 From: "J. Ian Irby" Date: Mon, 2 Mar 2026 23:39:00 -0500 Subject: [PATCH 1/2] hf: kid mode image gen --- .../llmhub/imagegen/StableDiffusionHelper.kt | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/llmhub/llmhub/imagegen/StableDiffusionHelper.kt b/app/src/main/java/com/llmhub/llmhub/imagegen/StableDiffusionHelper.kt index 7ae6a1a5..9d92ca14 100644 --- a/app/src/main/java/com/llmhub/llmhub/imagegen/StableDiffusionHelper.kt +++ b/app/src/main/java/com/llmhub/llmhub/imagegen/StableDiffusionHelper.kt @@ -217,10 +217,27 @@ class StableDiffusionHelper(private val context: Context) { } } + val kidModeManager = com.llmhub.llmhub.utils.KidModeManager(context) + val isKidMode = kidModeManager.isKidModeEnabled.value + + var finalPrompt = prompt + var finalNegativePrompt = negativePrompt + + if (isKidMode) { + val lowerPrompt = prompt.lowercase() + val blockedWords = listOf("nsfw", "nude", "naked", "sex", "porn", "gore", "blood", "kill", "murder", "violence", "explicit","erotic", "hentai") + if (blockedWords.any { lowerPrompt.contains(it) }) { + throw Exception("Kid Mode: Inappropriate content detected in prompt.") + } + + finalPrompt = "safe, family friendly, educational, $prompt" + finalNegativePrompt = "$negativePrompt, nsfw, nude, naked, sexually suggestive, explicit, gore, violence, blood, scary" + } + // Build JSON request body val json = JSONObject().apply { - put("prompt", prompt) - put("negative_prompt", negativePrompt) + put("prompt", finalPrompt) + put("negative_prompt", finalNegativePrompt) put("steps", steps) put("cfg", cfg.toDouble()) if (seed != null) put("seed", seed) From 9c782e7c02032b494780ca6b60166b3716b6b99f Mon Sep 17 00:00:00 2001 From: "J. Ian Irby" Date: Mon, 2 Mar 2026 23:46:32 -0500 Subject: [PATCH 2/2] UI: throw specific kid mode exception --- .../java/com/llmhub/llmhub/imagegen/ImageGeneratorHelper.kt | 2 ++ .../java/com/llmhub/llmhub/imagegen/StableDiffusionHelper.kt | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/llmhub/llmhub/imagegen/ImageGeneratorHelper.kt b/app/src/main/java/com/llmhub/llmhub/imagegen/ImageGeneratorHelper.kt index 5dd556e9..b7bc1f16 100644 --- a/app/src/main/java/com/llmhub/llmhub/imagegen/ImageGeneratorHelper.kt +++ b/app/src/main/java/com/llmhub/llmhub/imagegen/ImageGeneratorHelper.kt @@ -111,6 +111,8 @@ class ImageGeneratorHelper(private val context: Context) { } bitmap + } catch (e: SecurityException) { + throw e } catch (e: Exception) { Log.e(TAG, "Failed to generate image: ${e.message}", e) null diff --git a/app/src/main/java/com/llmhub/llmhub/imagegen/StableDiffusionHelper.kt b/app/src/main/java/com/llmhub/llmhub/imagegen/StableDiffusionHelper.kt index 9d92ca14..43dda138 100644 --- a/app/src/main/java/com/llmhub/llmhub/imagegen/StableDiffusionHelper.kt +++ b/app/src/main/java/com/llmhub/llmhub/imagegen/StableDiffusionHelper.kt @@ -227,7 +227,7 @@ class StableDiffusionHelper(private val context: Context) { val lowerPrompt = prompt.lowercase() val blockedWords = listOf("nsfw", "nude", "naked", "sex", "porn", "gore", "blood", "kill", "murder", "violence", "explicit","erotic", "hentai") if (blockedWords.any { lowerPrompt.contains(it) }) { - throw Exception("Kid Mode: Inappropriate content detected in prompt.") + throw SecurityException("Kid Mode violation: can't generate that.") } finalPrompt = "safe, family friendly, educational, $prompt" @@ -366,6 +366,8 @@ class StableDiffusionHelper(private val context: Context) { } bitmap + } catch (e: SecurityException) { + throw e } catch (e: Exception) { Log.e(TAG, "Failed to generate image: ${e.message}", e) null