Compare commits

...

10 commits

147 changed files with 3158 additions and 2057 deletions

19
.vscode/settings.json vendored
View file

@ -2,24 +2,9 @@
"files.associations": {
"*.css": "tailwindcss"
},
"json.schemas": [
{
"fileMatch": ["/src/content/series/**"],
"url": "./.astro/collections/series.schema.json"
},
{
"fileMatch": ["/src/content/tag-categories/**"],
"url": "./.astro/collections/tag-categories.schema.json"
},
{
"fileMatch": ["/src/content/users/**"],
"url": "./.astro/collections/users.schema.json"
}
],
"yaml.schemas": {
"./.astro/collections/series.schema.json": "/src/content/series/**",
"./.astro/collections/tag-categories.schema.json": "/src/content/tag-categories/**",
"./.astro/collections/users.schema.json": "/src/content/users/**"
"./.astro/collections/series.schema.json": "/src/data/series/**",
"./.astro/collections/users.schema.json": "/src/data/users/**"
},
"[astro]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"

View file

@ -2,6 +2,8 @@
Static website built in Astro + Typescript + TailwindCSS.
For attributions, see [`licenses.toml`](src/data/licenses.toml).
## Requirements
- Node.js 20+
@ -32,6 +34,7 @@ The following optional environment variables can be set within a `.env` file:
| Name | Type | Description |
| ---------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `APACHE_CONFIG` | boolean | If set to true, generates an `.htaccess` Apache config file at the root of the output directory. |
| `PUBLISH_DRAFTS` | boolean | If set to true, includes drafts in the production build. Published drafts still won't be directly indexed by any other pages. |
### Export story for upload
@ -53,14 +56,3 @@ Then, if you're using rsync, after configuring the `gallerybm` host (or the name
```bash
rsync --delete-after -acP dist/ gallerybm:/home/public
```
Or if you prefer LFTP, create a `.env` file at the root of the project:
```env
DEPLOY_LFTP_HOST=https://example-webdav-server.com
DEPLOY_LFTP_USER=example_user
DEPLOY_LFTP_PASSWORD=sup3r_s3cr3t_password
DEPLOY_LFTP_TARGETFOLDER=sites/gallery.badmanners.xyz/
```
Then run `npm run deploy-lftp`.

View file

@ -3,7 +3,7 @@ import tailwindIntegration from "@astrojs/tailwind";
import markdownIntegration from "@astropub/md";
import mdxIntegration from "@astrojs/mdx";
import htaccessIntegration from "astro-htaccess";
import pagefindIntegration from "astro-pagefind";
import pagefindIntegration from "./src/integrations/pagefind";
import alpinejsIntegration from "@astrojs/alpinejs";
import { AI_BOTS } from "./src/data/ai_bots";
@ -17,7 +17,9 @@ export default defineConfig({
markdownIntegration(),
mdxIntegration(),
alpinejsIntegration(),
pagefindIntegration(),
pagefindIntegration({
forceLanguage: "en",
}),
htaccessIntegration({
generateHtaccessFile: import.meta.env.APACHE_CONFIG === "true",
customRules: [
@ -58,15 +60,14 @@ export default defineConfig({
redirects: {
"/stories/1": "/stories",
},
experimental: {
env: {
schema: {
PUBLISH_DRAFTS: envField.boolean({
context: "server",
access: "public",
default: false,
}),
},
env: {
schema: {
APACHE_CONFIG: envField.boolean({ context: "server", access: "public", default: false }),
PUBLISH_DRAFTS: envField.boolean({
context: "server",
access: "public",
default: false,
}),
},
},
});

View file

@ -1,5 +1,5 @@
---
# slug: some-custom-slug
# id: some-custom-id
title: Example Blog Post
# pubDate: 2024-01-01
isDraft: true

View file

@ -1,5 +1,5 @@
---
# slug: some-custom-slug
# id: some-custom-id
title: Example Game
# shortTitle: Example
# pubDate: 2024-01-01

View file

@ -1,5 +1,5 @@
---
# slug: some-custom-slug
# id: some-custom-id
title: Example Story
# shortTitle: Example
# pubDate: 2024-01-01

2971
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,7 +1,7 @@
{
"name": "gallery.badmanners.xyz",
"type": "module",
"version": "1.12.1",
"version": "1.15.1",
"scripts": {
"postinstall": "astro sync",
"dev": "astro dev",
@ -12,27 +12,26 @@
"check": "astro check",
"astro": "astro",
"prettier": "prettier --write .",
"export-story": "tsx scripts/export-story.ts",
"deploy-lftp": "dotenv tsx scripts/deploy-lftp.ts --"
"export-story": "tsx scripts/export-story.ts"
},
"dependencies": {
"@astrojs/alpinejs": "^0.4.0",
"@astrojs/check": "^0.9.4",
"@astrojs/mdx": "^3.1.7",
"@astrojs/rss": "^4.0.7",
"@astrojs/tailwind": "^5.1.1",
"@astrojs/mdx": "^4.0.1",
"@astrojs/rss": "^4.0.9",
"@astrojs/tailwind": "^5.1.3",
"@astropub/md": "^1.0.0",
"@pagefind/default-ui": "^1.2.0",
"@tailwindcss/typography": "^0.5.15",
"@types/alpinejs": "^3.13.10",
"alpinejs": "^3.14.1",
"astro": "^4.15.11",
"astro-htaccess": "^0.2.0",
"astro-pagefind": "^1.6.0",
"astro": "^5.0.1",
"astro-htaccess": "^0.2.3",
"clsx": "^2.1.1",
"fluid-tailwind": "^1.0.3",
"github-slugger": "^2.0.0",
"marked": "^14.1.2",
"pagefind": "^1.1.1",
"pagefind": "^1.2.0",
"polywasm": "^0.1.5",
"reading-time": "^1.5.0",
"sanitize-html": "^2.13.1",
@ -46,11 +45,11 @@
"@types/node": "^22.7.4",
"@types/sanitize-html": "^2.13.0",
"commander": "^12.1.0",
"dotenv-cli": "^7.4.2",
"fetch-retry": "^6.0.0",
"prettier": "^3.3.3",
"prettier-plugin-astro": "^0.14.1",
"prettier-plugin-tailwindcss": "^0.6.8",
"sirv": "^3.0.0",
"tsx": "^4.19.1"
}
}

View file

@ -1,63 +0,0 @@
import { spawn } from "node:child_process";
import { join, normalize as n } from "node:path/posix";
import { program, Option } from "commander";
interface DeployLftpOptions {
host: string;
user: string;
password: string;
targetFolder: string;
sourceFolder: string;
assetsFolder: string;
}
async function deployLftp({ host, user, password, targetFolder, sourceFolder, assetsFolder }: DeployLftpOptions) {
const process = spawn(
"lftp",
[
"-c",
[
`open -u ${user},${password.replaceAll(/([ \t.,:;?!`'"^|*+#&$\(\)\[\]{}<>\\/-])/, "\\$1")} ${host}`,
`mirror --reverse --include-glob ${join(assetsFolder, "*")} --delete --only-missing --no-perms --verbose ${n(sourceFolder)} ${n(targetFolder)}`,
`mirror --reverse --exclude-glob ${join(assetsFolder, "*")} --delete --no-perms --verbose ${n(sourceFolder)} ${n(targetFolder)}`,
`bye`,
].join("\n"),
],
{
stdio: "inherit",
},
);
await new Promise((resolve, reject) => {
process.on("close", (code) => (code === 0 ? resolve(0) : reject(`lftp failed with code ${code}`)));
});
}
await program
.name("deploy-lftp")
.description("Deploy files to remote server with LFTP")
.addOption(
new Option("-h, --host <hostname>", "Hostname of the LFTP (i.e. WebDav, SCP, SFTP...) remote.").env(
"DEPLOY_LFTP_HOST",
),
)
.addOption(new Option("-u, --user <username>", "Username portion of the LFTP credentials").env("DEPLOY_LFTP_USER"))
.addOption(
new Option("-p, --password <pass>", "Password portion of the LFTP credentials").env("DEPLOY_LFTP_PASSWORD"),
)
.addOption(
new Option("-t, --target-folder <remoteDir>", "Folder to mirror files to in the LFTP remote").env(
"DEPLOY_LFTP_TARGETFOLDER",
),
)
.addOption(
new Option("-s, --source-folder <localDir>", "Folder to read files from in the local machine")
.env("DEPLOY_LFTP_SOURCEFOLDER")
.default("dist/"),
)
.addOption(
new Option("-a, --assets-folder <localDir>", "Directory inside of --source-folder of assets with hash-based names")
.env("DEPLOY_LFTP_ASSETSFOLDER")
.default("assets/"),
)
.action(deployLftp)
.parseAsync();

View file

@ -7,7 +7,7 @@ import { createInterface } from "node:readline";
import { program } from "commander";
import fetchRetryWrapper from "fetch-retry";
import type { HealthcheckResponse } from "../src/pages/api/healthcheck";
import type { ExportStoryResponse } from "../src/pages/api/export-story/[...slug]";
import type { ExportStoryResponse } from "../src/pages/api/export-story/[...id]";
function getRTFStyles(rtfSource: string) {
const matches = rtfSource.matchAll(
@ -46,7 +46,7 @@ const isLibreOfficeRunning = async () =>
lines.on("close", () => res(false));
});
async function exportStory(slug: string, options: { outputDir: string }) {
async function exportStory(id: string, options: { outputDir: string }) {
/* Check that LibreOffice is not running */
if (await isLibreOfficeRunning()) {
console.error("ERROR: LibreOffice cannot be open while this command is running!");
@ -83,7 +83,7 @@ async function exportStory(slug: string, options: { outputDir: string }) {
lines.on("close", reject);
});
console.log(`Astro listening on ${astroURL}`);
const response = await fetchRetry(new URL(`api/healthcheck`, astroURL), { retries: 5, retryDelay: 2000 });
const response = await fetchRetry(new URL(`/api/healthcheck`, astroURL), { retries: 5, retryDelay: 2000 });
if (!response.ok) {
throw new Error(response.statusText);
}
@ -103,7 +103,11 @@ async function exportStory(slug: string, options: { outputDir: string }) {
let storyText = "";
try {
console.log("Getting data from Astro...");
const response = await fetch(new URL(`api/export-story/${slug}`, astroURL));
const response = await fetchRetry(new URL(`/api/export-story/${id}`, astroURL), {
retries: 5,
retryDelay: 1000,
retryOn: [404],
});
if (!response.ok) {
throw new Error(`Failed to reach export-story API (status code ${response.status})`);
}
@ -114,7 +118,7 @@ async function exportStory(slug: string, options: { outputDir: string }) {
// Story
(async () => {
storyText = data.story;
await writeFile(join(outputDir, `${slug}.txt`), storyText);
await writeFile(join(outputDir, `${id}.txt`), storyText);
})(),
// Descriptions
Object.entries(data.description).map(
@ -129,7 +133,7 @@ async function exportStory(slug: string, options: { outputDir: string }) {
.replace(/\?(&?[a-z][a-zA-Z0-9_-]+=[a-zA-Z0-9_-]*)*$/, "");
await copyFile(thumbnailPath, join(outputDir, `thumbnail${thumbnailPath.match(/\.[^.]+$/)![0]}`));
} else {
const thumbnail = await fetchRetry(data.thumbnail, { retries: 2, retryDelay: 10000 });
const thumbnail = await fetchRetry(data.thumbnail, { retries: 2, retryDelay: 2000 });
if (!thumbnail.ok) {
throw new Error("Failed to get thumbnail");
}
@ -153,9 +157,9 @@ async function exportStory(slug: string, options: { outputDir: string }) {
console.log("Parsing story into output formats...");
// Process output files in parallel
await Promise.all([
// ${slug}.md
writeFile(join(outputDir, `${slug}.md`), storyText.replaceAll(/=(?==)/g, "= ").replaceAll("*", "\\*")),
// ${slug}.rtf
// ${id}.md
writeFile(join(outputDir, `${id}.md`), storyText.replaceAll(/=(?==)/g, "= ").replaceAll("*", "\\*")),
// ${id}.rtf
(async () => {
const tempDir = await mkdtemp(join(tmpdir(), "export-story-"));
await writeFile(join(tempDir, "temp.txt"), storyText.replaceAll(/\n\n+/g, "\n"));
@ -174,7 +178,7 @@ async function exportStory(slug: string, options: { outputDir: string }) {
console.warn(`Missing RTF style "Normal"! Skipping RTF file generation.`);
} else {
await writeFile(
join(outputDir, `${slug}.rtf`),
join(outputDir, `${id}.rtf`),
rtfText.replaceAll(rtfStyles["Preformatted Text"], rtfStyles["Normal"]),
);
}
@ -187,7 +191,7 @@ async function exportStory(slug: string, options: { outputDir: string }) {
await program
.name("export-story")
.description("Generate and export formatted upload files for a story")
.argument("<story-slug>", `Slug portion of the story's URL (eg. "the-lost-of-the-marshes/chapter-1")`)
.argument("<story-id>", `ID portion of the story's URL (eg. "the-lost-of-the-marshes/chapter-1")`)
.option("-o, --output-dir <directory>", `Empty or inexistent directory path to export files to`)
.action(exportStory)
.parseAsync();

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -1,5 +1,5 @@
---
import type { CopyrightedCharacters } from "@content/config";
import type { CopyrightedCharacters } from "src/content.config";
import { t, type Lang } from "@i18n";
import UserComponent from "./UserComponent.astro";
import CopyrightedCharactersItem from "./CopyrightedCharactersItem.astro";

View file

@ -1,5 +1,5 @@
---
import type { Posts } from "@content/config";
import type { Posts } from "src/content.config";
import { t, type Lang } from "@i18n";
import { IconEkasPortal, IconFurAffinity, IconInkbunny, IconSoFurry, IconWeasyl } from "./icons/brands";
@ -16,90 +16,53 @@ const isVisible = eka || furaffinity || inkbunny || sofurry || weasyl;
{
isVisible ? (
<section id="external-posts-section" class="my-5 px-2 font-serif" aria-describedby="title-external-posts">
<>
<Fragment>
<h2 id="title-external-posts" class="py-2 font-serif text-xl font-semibold text-stone-800 dark:text-stone-100">
{t(lang, "published_content/syndication_see_also_on")}
</h2>
<ul id="external-posts" class="flex flex-wrap justify-around">
{eka ? (
<li class="min-w-12 grow">
<a
class="u-syndication text-link w-full"
href={eka.link}
target="_blank"
aria-label={t(lang, "published_content/syndication_eka")}
>
<a class="u-syndication text-link flex w-full flex-col" href={eka.link} target="_blank">
<IconEkasPortal class="mx-auto" width="2rem" height="2rem" />
<span class="sr-only">{t(lang, "published_content/syndication_eka")}</span>
<span class="text-center text-xs">{t(lang, "published_content/syndication_eka")}</span>
</a>
</li>
) : null}
{furaffinity ? (
<li class="min-w-12 grow">
<a
class="u-syndication text-link w-full"
href={furaffinity.link}
target="_blank"
aria-label={t(lang, "published_content/syndication_furaffinity")}
>
<a class="u-syndication text-link flex w-full flex-col" href={furaffinity.link} target="_blank">
<IconFurAffinity class="mx-auto" width="2rem" height="2rem" />
<span class="sr-only">{t(lang, "published_content/syndication_furaffinity")}</span>
<span class="text-center text-xs">{t(lang, "published_content/syndication_furaffinity")}</span>
</a>
</li>
) : null}
{inkbunny ? (
<li class="min-w-12 grow">
<a
class="u-syndication text-link w-full"
href={inkbunny.link}
target="_blank"
aria-label={t(lang, "published_content/syndication_inkbunny")}
>
<a class="u-syndication text-link flex w-full flex-col" href={inkbunny.link} target="_blank">
<IconInkbunny class="mx-auto" width="2rem" height="2rem" />
<span class="sr-only">{t(lang, "published_content/syndication_inkbunny")}</span>
<span class="text-center text-xs">{t(lang, "published_content/syndication_inkbunny")}</span>
</a>
</li>
) : null}
{sofurry ? (
<li class="min-w-12 grow">
<a
class="u-syndication text-link w-full"
href={sofurry.link}
target="_blank"
aria-label={t(lang, "published_content/syndication_sofurry")}
>
<a class="u-syndication text-link flex w-full flex-col" href={sofurry.link} target="_blank">
<IconSoFurry class="mx-auto" width="2rem" height="2rem" />
<span class="sr-only">{t(lang, "published_content/syndication_sofurry")}</span>
<span class="text-center text-xs">{t(lang, "published_content/syndication_sofurry")}</span>
</a>
</li>
) : null}
{weasyl ? (
<li class="min-w-12 grow">
<a
class="u-syndication text-link w-full"
href={weasyl.link}
target="_blank"
aria-label={t(lang, "published_content/syndication_weasyl")}
>
<a class="u-syndication text-link flex w-full flex-col" href={weasyl.link} target="_blank">
<IconWeasyl class="mx-auto" width="2rem" height="2rem" />
<span class="sr-only">{t(lang, "published_content/syndication_weasyl")}</span>
<span class="text-center text-xs">{t(lang, "published_content/syndication_weasyl")}</span>
</a>
</li>
) : null}
</ul>
</>
</Fragment>
</section>
) : null
}
<script>
import tippy from "tippy.js";
import "tippy.js/dist/tippy.css";
const clipboardItems = document.querySelectorAll<HTMLElement>("ul#external-posts a[aria-label]");
tippy(clipboardItems, {
content: (el) => (el as HTMLElement).getAttribute("aria-label")!,
theme: "bm",
});
</script>

View file

@ -1,4 +1,5 @@
import { defineCollection, reference, z } from "astro:content";
import { file, glob } from "astro/loaders";
// Constants
@ -258,7 +259,7 @@ export type Posts = PublishedContent["posts"];
// Content collections
const storiesCollection = defineCollection({
type: "content",
loader: glob({ pattern: "**/*.{md,mdx}", base: "./src/data/stories" }),
schema: ({ image }) =>
z
.object({
@ -287,7 +288,7 @@ const storiesCollection = defineCollection({
});
const gamesCollection = defineCollection({
type: "content",
loader: glob({ pattern: "**/*.{md,mdx}", base: "./src/data/games" }),
schema: ({ image }) =>
z
.object({
@ -309,7 +310,7 @@ const gamesCollection = defineCollection({
});
const blogCollection = defineCollection({
type: "content",
loader: glob({ pattern: "**/*.{md,mdx}", base: "./src/data/blog" }),
schema: ({ image }) =>
z
.object({
@ -328,7 +329,7 @@ const blogCollection = defineCollection({
// Data collections
const usersCollection = defineCollection({
type: "data",
loader: glob({ pattern: "*.{yml,yaml}", base: "./src/data/users" }),
schema: ({ image }) =>
z
.object({
@ -349,7 +350,7 @@ const usersCollection = defineCollection({
});
const seriesCollection = defineCollection({
type: "data",
loader: glob({ pattern: "*.{yml,yaml}", base: "./src/data/series" }),
schema: z.object({
// Required parameters
name: z.string(),
@ -358,11 +359,10 @@ const seriesCollection = defineCollection({
});
const tagCategoriesCollection = defineCollection({
type: "data",
loader: file("./src/data/tags.yaml"),
schema: z.object({
// Required parameters
name: z.string(),
index: z.number().int(),
category: z.string(),
tags: z
.array(
z.object({

View file

@ -1,23 +0,0 @@
name: Types of vore
index: 1
tags:
- name: { en: oral vore, tok: moku musi kepeken uta }
description:
en: Scenarios where prey are consumed by the predator's mouth.
tok: jan li moku musi e jan ante kepeken uta.
- name: anal vore
description: Scenarios where prey are consumed by the predator's butt/anus.
- name: cock vore
description: Scenarios where prey are consumed by the predator's penis.
- name: unbirth
description: Scenarios where prey are consumed by the predator's vagina/vulva, sometimes also called "vaginal vore".
- name: tail vore
description: Scenarios where prey are consumed by the predator's tail, through an opening or mouth on the appendage.
- name: slit vore
description: Scenarios where prey are consumed by the predator's genital slit.
- name: sheath vore
description: Scenarios where prey are consumed by the predator's genital sheath around their penis.
- name: nipple vore
description: Scenarios where prey are consumed by the predator's breast, through the nipples or cleavage.
- name: chest maw vore
description: Scenarios where prey are consumed by the predator's chest, through a maw on their chest cavity.

View file

@ -1,13 +0,0 @@
name: Recurring characters
index: 10
tags:
- name: Sam Brendan
description: |
Content that features my character and fursona <a href="https://badmanners.xyz/sam_brendan/" x-data="{ href: 'https://badmanners.xyz/sam_brendan', suffix: '?ageVerified=true' }" x-bind:href="ageVerified ? href + suffix : href" target="_blank" >Sam, the mimic x maned wolf hybrid</a>.
- name: Beetle
description: |
Content that features my character <a href="https://booru.badmanners.xyz/index.php?q=post/view/3" target="_blank">Beetle, the gryphon</a>.
- name: Muno
description: Content that features my character Muno, the snake.
- name: Yolk
description: Content that features <a href="https://www.furaffinity.net/user/vampire101" target="_blank" rel="nofollow">Vampire101's</a> fursona, Yolk the monkey.

View file

@ -1,23 +0,0 @@
name: Body types
index: 2
tags:
- name: anthro predator
description: Scenarios where at least one of the predators is an anthropomorphic animal, i.e. generally regarded as a "furry".
- name: feral predator
description: Scenarios where at least one of the predators is an animal based on a real or mythological creature.
- name: taur predator
description: Scenarios where at least one of the predators is a multi-legged centaur-like creature, with an animal lower body and anthropomorphic upper body.
- name: { en: ambiguous predator, tok: sijelo pi jan pi wawa mute li ale }
description:
en: Scenarios where the body type of at least one of the predators is left ambiguous.
tok: jan pi moku musi pi wawa mute la toki tan sijelo li lon ala.
- name: human prey
description: Scenarios where at least one of the prey is a human person.
- name: anthro prey
description: Scenarios where at least one of the prey is an anthropomorphic animal, i.e. generally regarded as a "furry".
- name: feral prey
description: Scenarios where at least one of the predators is an animal based on a real or mythological creature.
- name: { en: ambiguous prey, tok: sijelo pi jan pi wawa lili li ale }
description:
en: Scenarios where the body type of at least one of the predators is left ambiguous.
tok: jan pi moku musi pi wawa lili la toki tan sijelo li lon ala.

View file

@ -1,35 +0,0 @@
name: Genders
index: 3
tags:
- name: male predator
description: Scenarios where at least one of the predators is a man and/or male-presenting.
related:
- trans male predator
- name: trans male predator
description: Scenarios where at least one of the predators is a man and/or male-presenting; more specifically, undergoing or or having undergone gender transition.
related:
- male predator
- name: female predator
description: Scenarios where at least one of the predators is a woman and/or female-presenting.
- name: non-binary predator
description: Scenarios where at least one of the predators has a non-binary gender expression, be they genderless/agender, intersex, androgynous, gender-fluid, non-binary and/or non-binary-presenting, et cetera, regardless of undergoing or having undergone gender transition or not.
- name: { en: ambiguous gender predator, tok: jan pi wawa mute li meli anu mije }
description:
en: Scenarios where the gender at least one of the predators is left ambiguous.
tok: jan pi moku musi pi wawa mute la toki tan meli anu mije anu tonsi li lon ala.
- name: male prey
description: Scenarios where at least one of the prey is a man and/or male-presenting.
- name: female prey
description: Scenarios where at least one of the prey is a woman and/or female-presenting.
related:
- trans female prey
- name: trans female prey
description: Scenarios where at least one of the prey is a woman and/or female-presenting; more specifically, undergoing or having undergone gender transition.
related:
- female prey
- name: non-binary prey
description: Scenarios where at least one of the predators has a non-binary gender expression, be they genderless/agender, intersex, androgynous, gender-fluid, non-binary and/or non-binary-presenting, et cetera, regardless of undergoing or having undergone gender transition or not.
- name: { en: ambiguous gender prey, tok: jan pi wawa lili li meli anu mije }
description:
en: Scenarios where the gender at least one of the predators is left ambiguous.
tok: jan pi moku musi pi wawa lili la toki tan meli anu mije anu tonsi li lon ala.

View file

@ -1,17 +0,0 @@
name: Relative size
index: 4
tags:
- name: macro predator
description: Scenarios where at least one of the predators has a size/height one or more orders of magnitude larger than average.
- name: micro prey
description: Scenarios where at least one of the prey has a size/height one or more orders of magnitude smaller than average.
- name: size difference
description: Scenarios where at least one of the predators has a notably larger size/height than one of their prey.
- name: similar size
description: Scenarios where at least one of the predators has a slightly larger size/height than one of their prey.
- name: same size
description: Scenarios where at least one of the predators has the same size/height as one of their prey, or their sizes are comparable.
- name: smaller predator
description: Scenarios where at least one of the predators has a notably smaller size/height than one of their prey.
related:
- role reversal

View file

@ -1,23 +0,0 @@
name: Willingness
index: 5
tags:
- name: { en: willing predator, tok: jan pi wawa mute li wile e moku musi }
description:
en: Scenarios where at least one of the predators participates in vore willingly.
tok: jan pi moku musi pi wawa mute la jan li wile e moku musi.
- name: semi-willing predator
description: Scenarios where the willingness of at least one of the predators might be partial, oscillating between willing and unwilling, somewhere in-between, or ambiguous.
- name: unwilling predator
description: Scenarios where at least one of the predators participates in vore unwillingly.
- name: asleep predator
description: Scenarios where at least one of the predators participates in vore while asleep.
- name: willing prey
description: Scenarios where at least one of the prey participates in vore willingly.
- name: semi-willing prey
description: Scenarios where the willingness of at least one of the prey might be partial, oscillating between willing and unwilling, somewhere in-between, or ambiguous.
- name: { en: unwilling prey, tok: jan pi wawa lili li wile ala e moku musi }
description:
en: Scenarios where at least one of the prey participates in vore unwillingly.
tok: jan pi moku musi pi wawa lili la jan li wile ala e moku musi.
- name: asleep prey
description: Scenarios where at least one of the predators participates in vore while asleep.

View file

@ -1,73 +0,0 @@
name: Vore-related scenarios
index: 6
tags:
- name: point of view
description: Scenarios where the narration takes the perspective of one of the characters, generally in first person.
- name: long-term endo
description: Scenarios where prey remains safely inside of their predator for an extended period of time.
related:
- perma endo
- implied perma endo
- name: perma endo
description: Scenarios where prey remains safely inside of their predator for an indefinite period of time.
related:
- long-term endo
- implied perma endo
- name: implied perma endo
description: Scenarios where prey is implied to remain safely inside of their predator for an indefinite period of time.
related:
- long-term endo
- perma endo
- name: full tour
description: Scenarios where prey passes all the way through their predator's gastrointestinal system, entering through one end and exiting through the opposite one.
related:
- implied full tour
- name: implied full tour
description: Scenarios where prey is implied to pass all the way through their predator's gastrointestinal system, entering through one end and supposedly exiting through the opposite one.
related:
- full tour
- name: regurgitation
description: Scenarios where prey are explicitly let out through the same spot they entered their predator, specifically their mouth.
related:
- implied regurgitation
- oral vore
- name: implied regurgitation
description: Scenarios where prey are implied to have been let out through the same spot they entered their predator, specifically their mouth.
related:
- regurgitation
- oral vore
- name: prey transfer
description: Scenarios where prey are transferred from one predator into another, or transferred from one part of their predator to another.
- name: object vore
description: Scenarios where predators consume objects, alongside their prey or in place of them.
- name: role reversal
description: Scenarios where predators become prey and vice-versa, where dominant characters become prey, or where submissive characters become predators.
related:
- smaller predator
- name: nested vore
description: Scenarios where a predator becomes prey to another predator, or a prey consumes another prey.
related:
- multiple prey
- role reversal
- name: multiple prey
description: Scenarios where one predator consumes multiple prey at once.
- name: messy stomach
description: Scenarios where a prey visits a messy stomach, usually with semi-digested food inside.
related:
- oral vore
- name: hammerspace vore
description: Scenarios where a predator's body doesn't grow proportionally around the prey they consume, either at a substantially lower rate or not at all.
related:
- multiple prey
- name: bladder vore
description: Scenarios where prey consumed through the predator's urethra end up in their bladder.
related:
- cock vore
- name: soul vore
description: Scenarios where predators consume a soul instead of their prey's body.
- name: endo trait theft
description: Scenarios where predators acquire traits from their prey without digestion.
related:
- transformation
- name: Vore Day
description: Stories created in commemoration of Vore Day, which is celebrated on August 8th, and/or are set in said day.

View file

@ -1,25 +0,0 @@
name: Sexual content
index: 7
tags:
- name: nudity
description: Scenarios where a character is nude and displaying their sexual features, without necessarily participating in a sexual situation.
- name: masturbation
description: Scenarios where a character sexually stimulates themselves.
- name: straight sex
description: Scenarios where two or more characters of different genders participate in sexual activity.
related:
- orgy
- name: gay sex
description: Scenarios where two or more characters of the same gender, both men and/or male-presenting, participate in sexual activity.
related:
- orgy
- name: lesbian sex
description: Scenarios where two or more characters of the same gender, both women and/or female-presenting, participate in sexual activity.
related:
- orgy
- name: orgy
description: Scenarios where more than two characters participate in sexual activity freely.
related:
- straight sex
- gay sex
- lesbian sex

View file

@ -1,31 +0,0 @@
name: Other kinks
index: 8
tags:
- name: hyper
description: Scenarios where a character has abnormally large features compared to their body, usually genitalia.
- name: egg play
description: Scenarios with sexual action involving eggs.
related:
- object vore
- name: transformation
description: Scenarios where a character changes body and/or species.
related:
- endo trait theft
- name: netorare
description: Scenarios involving a character cheating on their partner with or without consent, and/or cuckoldry.
- name: sizeplay
description: Scenarios where a character changes size.
- name: inflation
description: Scenarios where a character expands out with the excessive intake of fluids, including semen.
- name: daddy play
description: Scenarios where a character refers to another as their "daddy" in a kinky manner, as part of a sexual situation or roleplay.
- name: BDSM
description: Scenarios related to bondage, sadism, masochism, dominance, and/or submission in a kinky manner, such as roleplay.
- name: dubcon
description: Scenarios where sexual consent is dubious.
- name: plushie
description: Scenarios with sexual action involving stuffed toys or plushie-like characters.
- name: wardrobe malfunction
description: Scenarios where a mishap happens with someone's clothes, such as accidentally revealing body parts and/or bursting open.
- name: pet play
description: Scenarios with roleplay where one (or more) of the participants plays the part of "pet".

View file

@ -1,27 +0,0 @@
name: Type of content
index: 9
tags:
- name: request
description: Stories made by someone else's request, as a gift.
- name: commission
description: Stories made as part of a commission to someone else.
- name: { en: flash fiction, tok: lipu lili }
description:
en: Short-format stories with no more than 2,500 words.
tok: lipu li jo e nanpa nimi lili.
- name: toki pona
description:
en: Stories written in toki pona, the language of good.
tok: lipu li kepeken toki pona.
- name: behind the scenes
description: Content where I go over the process of making other content.
- name: retrospective
description: Document detailing the good and bad parts during the creation process of a certain project.
- name: commentary
description: Content where the creator gives their thoughts on a certain project of theirs.
- name: technical post
description: Content where I explain the technical details of a certain system or technology.
- name: programming
description: Posts dedicated to programming, coding, and system architecture.
- name: game development
description: Content where I detail the process of creating a game.

View file

@ -1,4 +0,0 @@
name: Dee Lumeni
links:
eka: https://aryion.com/g4/user/KeeperofLillies
preferredLink: eka

View file

@ -1,5 +1,4 @@
---
slug: ssh-all-the-way-down
title: SSH all the way down!
pubDate: 2024-09-22
isAgeRestricted: false

View file

@ -1,5 +1,4 @@
---
slug: supercharged-ssh-apps-on-sish
title: Supercharged SSH applications on sish
pubDate: 2024-09-23
isAgeRestricted: false

View file

@ -1,15 +1,16 @@
# licenses.toml
file = "licenses.toml"
url = "https://gallery.badmanners.xyz/licenses.toml"
[copyright]
title = "gallery.badmanners.xyz"
description = "Bad Manners's self-hosted gallery."
type = "website"
date = "2024"
author = { name = "Bad Manners", url = "https://badmanners.xyz", email = "me@badmanners.xyz>" }
author = { name = "Bad Manners", url = "https://badmanners.xyz", email = "me@badmanners.xyz" }
source = "https://git.badmanners.xyz/badmanners/gallery.badmanners.xyz"
license = { name = "MIT", url = "https://opensource.org/license/mit" }
notes = """All rights reserved.
The MIT License applies only to the source code; see additional copyrights for details."""
notes = """All rights reserved. \
The MIT License applies only to the source code; see additional copyrights for details."""
[[copyright.additional]]
type = "logo"
@ -18,13 +19,13 @@ notes = "The briefcase logo is copyrighted and trademarked by me. All rights res
[[copyright.additional]]
type = "characters"
notes = """My characters, whether directly attributed to me or unattributed, are copyrighted by me. \
All rights reserved."""
All rights reserved."""
[[copyright.additional]]
type = "content"
description = "Content hosted on this website, i.e. the stories, games, and blog posts."
date = "2022-2024"
author = { name = "Bad Manners", url = "https://badmanners.xyz", email = "me@badmanners.xyz>" }
author = { name = "Bad Manners", url = "https://badmanners.xyz", email = "me@badmanners.xyz" }
source = "https://git.badmanners.xyz/badmanners/gallery.badmanners.xyz/src/branch/main/src/content"
license = { name = "CC-BY-NC-ND-4.0", url = "https://creativecommons.org/licenses/by-nc-nd/4.0/" }
notes = "All rights reserved."
@ -32,7 +33,7 @@ notes = "All rights reserved."
[[copyright.additional]]
type = "third-party trademarks"
notes = """All third-party copyrights, trademarks, and attributed characters belong to their respective owners, \
and I'm not affiliated with any of them."""
and I'm not affiliated with any of them."""
[[attributions]]
title = "Noto"
@ -55,12 +56,12 @@ items = [
"Weasyl",
]
notes = """All third-party copyrights and trademarks belong to their respective owners, \
and I'm not affiliated with any of them."""
and I'm not affiliated with any of them."""
[[attributions]]
description = "Edited icons for other websites."
type = "icons"
author = { name = "Bad Manners", url = "https://badmanners.xyz", email = "me@badmanners.xyz>" }
author = { name = "Bad Manners", url = "https://badmanners.xyz", email = "me@badmanners.xyz" }
source = "https://git.badmanners.xyz/badmanners/badmanners.xyz/src/branch/main/src/components/icons/brands"
license = { name = "CC0 1.0 Universal", url = "https://creativecommons.org/publicdomain/zero/1.0/" }
items = [
@ -69,9 +70,9 @@ items = [
"Inkbunny",
"SoFurry",
]
notes = """Original icons edited for personal use and released under a permissive license.
All third-party copyrights and trademarks belong to their respective owners, \
and I'm not affiliated with any of them."""
notes = """Original icons edited for personal use and released under a permissive license. \
All third-party copyrights and trademarks belong to their respective owners, \
and I'm not affiliated with any of them."""
[[attributions]]
author = "Font Awesome"
@ -106,6 +107,6 @@ type = "icons"
source = "https://github.com/twitter/twemoji"
license = { name = "CC-BY-4.0", url = "https://creativecommons.org/licenses/by/4.0/" }
items = [
"U+1F51E No One Under Eighteen Symbol",
"U+2728 Sparkles",
"🔞 U+1F51E No One Under Eighteen Symbol",
"U+2728 Sparkles",
]

View file

@ -32,6 +32,7 @@ tags:
- similar size
- implied perma endo
- endo trait theft
- partial vore
- straight sex
- gay sex
- hyper

View file

@ -9,7 +9,7 @@ thumbnail: /src/assets/thumbnails/stories/bm_10_birdroom.png
description: |
Beetle finds an odd-shaped friend deep in his work, and does what he does best: be a messy distraction.
This silly short was inspired by <a href="https://booru.badmanners.xyz/index.php?q=post/view/4" target="_blank">a wonderful commission</a> that I got from [Eli-Eternity](https://www.furaffinity.net/user/eli-eternity) and was supposed to go along with it, but this story doesn't even come close to doing it justice. Seriously, check out his piece if you haven't! It's turned out amazing, and he's done an incredible job, and I love it so much!
This silly short was inspired by <a href="https://booru.badmanners.xyz/post/14" target="_blank">a wonderful commission</a> that I got from [Eli-Eternity](https://www.furaffinity.net/user/eli-eternity) and was supposed to go along with it, but this story doesn't even come close to doing it justice. Seriously, check out his piece if you haven't! It's turned out amazing, and he's done an incredible job, and I love it so much!
Why are you still reading this instead of clicking the link above?!
posts:

View file

@ -0,0 +1,158 @@
---
title: Catfishin'
pubDate: 2025-04-19
isAgeRestricted: true
authors: bad-manners
wordCount: 2800
contentWarning: >
Contains: Similar size safe vore/endosoma (cock vore), with willing anthro male catfish predator and willing anthro male mimic x maned wolf prey. Also includes gay sex and feral genitalia.
thumbnail: /src/assets/thumbnails/stories/bm_23_catfishin.png
description: |
Sam decides to cast off a line, but he hooks an unexpected encounter instead.
This was a silly little gift for Fillinek, while I get back into the rhythm of writing stuff!
posts:
eka: https://aryion.com/g4/view/1125640
furaffinity: https://www.furaffinity.net/view/60628581/
weasyl: https://www.weasyl.com/~badmanners/submissions/2484403/catfishin
inkbunny: https://inkbunny.net/s/3600352
sofurry: https://www.sofurry.com/view/2244949
sofurrybeta: https://sofurrybeta.com/s/rn6bwpzn
bluesky: https://bsky.app/profile/badmanners.xyz/post/3ln6auisky22c
mastodon: https://meow.social/@BadManners/114366407377621517
tags:
- cock vore
- anthro predator
- anthro prey
- male predator
- male prey
- willing predator
- willing prey
- similar size
- gay sex
copyrightedCharacters:
"The catfish": fillinek
"Sam Brendan": bad-manners
---
With the sun shining high up, the clear day was uncharacteristically warm and humid. All Manner of critters scurried about frogs, crickets, dragonflies as a uniquely-shaped anthro made his way between the wetland trees.
Sam was far from a stranger to weather like this, but even he wished that the temperature would drop more than a couple degrees. He could feel the sweat underneath his fur, all across his body except on the mimic's peculiar face, a dead ringer for a metal briefcase. In his paws, he carried a couple of fishing supplies, with a rod leaning over his shoulder.
"This place doesn't seem right..." He muttered out loud, careful not to step on waterlogged ground. The lady who'd furnished him with the supplies had told him to come to this swamp for a chance to fish something good, but perhaps she was just pressed for a lie to get rid of the intimidating-looking hybrid. Sam scoffed. It wouldn't be the first time, nor the last...
Still, as far as fishing went, he was pretty inexperienced, so he had no choice but to rely on the shaky recommendation. As he neared a somewhat turbid lake, he noticed a ran-down wooden pier a decent looking spot for fishing, all things considered. Although the appearance of the lake gave him no hopes of fishing anything, other than random trash that had sunk to the bottom...
Little did he know that a pair of yellow eyes was discreetly watching him just above the surface.
Setting down his tackle box, the half-mimic, half-maned wolf was unsure about sitting on the edge of the pier, and getting his feet close to the murky water. Not out of fear that anything would bite his toes, but out of laziness from having to scrub the mud off his fur later. However, not having brought a seat himself, it sounded better than standing up for who knows how long in this secluded place.
As Sam plopped down on the outermost plank, something caught his attention. He wasn't sure what, but _something_ seemingly sunk into the water, disturbing the surface. There was definitely something alive in the lake. His briefcase twisted into a grin perhaps this wasn't such a bad fishing hole.
Placing his rod beside him, he reached for the livebait a can of worms , which he promptly knocked into the lake when something slimy touched his foot.
"GAH!" He shrieked in surprise. "What the!"
"Shoot, my bad..." was the raspier reply.
The mimic leaned forward, meeting a pair of eyes, of a yellow too bright to be confused with the water. "What are you?"
"What are YOU?" The other man replied cheekily, as the rest of his head emerged. With dark brown scales and a sandy chin, the fins and whiskers revealed him to be a fish a catfish, the hybrid recognized.
"I-I'm Sam. I'm, uh, half mimic." His nail gave a few taps to the side of his briefcase face. "And your name is...?"
The mudcat swam backwards, getting a better view of the fisherman. "Shucks, what's a cutie pie like you doin' out here?" He asked instead.
The mimic was staggered by the choice of words, spoken with a southern drawl. "I-I was just fishing," he replied, his own accent showing a bit with the longer vowels.
"Fishin'? In this worn ol' spot? Ain't a whole lot of fishes in these here waters, I reckon."
Both of them relaxed, with the catfish revealing the rest of his toned sand-hued torso, buoying on the dark lake. He was slowly turning more horizontal, displaying more of his body to Sam. The amateur fisherman was intrigued, never having expected such a curious encounter when he'd first decided to come here. His bushy tail wagged slowly, watching the bigger anthro fish's body continuously appear from the tea-like water.
"I see... Well, thanks for letting me know, I wWHOA!" He gasped mid-sentence.
The catfish placed his hands behind his head. "What, cat got your tongue~?" He snickered, and he flexed his hardening cock on display. The shaft was fully exposed, and undoubtedly equine in shape. Sam hadn't realized until now just how _handsome_ this fish was, and he had an expanding penis in his sheath for it.
"Like what you see, cutie?"
"W-Well, I..."
Before he could form a coherent thought, the mudcat dunked his head back in the water, before the rest of his body followed. Vanishing with nothing more than a ripple, leaving the mimic flabbergasted. It wouldn't be long until the catfish reemerged graciously jumping up to the pier, then reaching the wooden boards around the mimic. His legs dangled partially outside the water, his horse cock brushed the maned wolf's legs, and his face was right between Sam's knees.
"...Uh."
The dark-brown fish didn't speak. He simply brought his snout closer to the bright green dick poking out of its home, closing his eyes before taking it into his maw.
"A-Ah~!" The mimic gasped.
It all happened so fast. One moment, the catfish was teasing him, floating in the lake; then, he had his jaws wrapped around Sam's canine cock, coaxing it out with his tongue. And the blowjob felt so unique, the probing muscle particularly wet and slippery. His member throbbed in turn, blood pumping into it as the tip brushed against the fish's soft palate.
For his part, the brown catfish took his musky flavors, lapping over the balls and sheath as well. Black droplets drizzled onto the furry anthro's thighs, and his sensitive whiskers brushed against the fuzzy midriff. Sam's unusual face did not discourage his advances, and he continued to work over the fisherman's rod, sucking out its pre as if it were a fleshy straw.
Panting, the hybrid gently rested his paw on the back of the fish's head, surprised by the slimy texture of the scales and cranial fin. His first instinct was to pull his hand away from the unusual skin, but the surprise partner was working too many wonders for him to care. Even his maw, normally concealed as a plain briefcase, was cracked open as he gritted his fangs in desire.
"Fuck~." he whispered as his cock's tip pressed against the closed throat. "I'm c-close..."
The words seemed to be exactly what the catfish wanted to hear. With one final lick, he pulled his head away from the knotted dick, then pushed against the pier to dunk himself right back into the water.
Sam, confused and disappointed, leaned forward to see where the fish had gone to. The water was still for a few moments...until a pair of slippery hands grabbed and pulled his ankles hard.
"Whoa!" And splash!
The mimic vanished into the murky water, only to bat his way back to the surface. The blackwater lake was, to his surprise, not as muddy as it looked from outside the dark tea appearance was due to some chemical process in the water, most likely. And it was surprisingly warm, too.
The fish reemerged in front of him, a smirk planted on his face. "You're lucky I know how to swim," Sam grumbled.
"I couldn't resist~. Besides, I might couldn't have let you sink to the bottom..." He teased, not revealing the true intent behind his words. "Now, you're in my neck of the woods, and I have a mighty hankerin' that you might help with~."
His hand moved below the surface, hidden by the opaque water, and only felt when it groped the maned wolf's butt. Sam yipped in surprise, although by now, he'd been flirted with enough times to know what the fish wanted: to breed his ass.
"Mff... I'll gladly help~"
The fish chuckled, lassoing his long tail around the mimic's hips to spin him around like a yoyo. Sam quickly found himself facing away from the catfish and towards the pier, staring at a wooden post. Still dazed by the sudden turn of events, his hands were fished out of the water and pulled together above his briefcase head, while the mudcat pressed him right against the post.
The water against his butt crack got warmer as a fleshy cushion was smooshed between his cheeks the catfish's blotched horse cock, no doubt. He spread his legs slightly, feeling it kiss his pucker more and more forcefully, until the flared tip finally stretched him enough to squeeze into his rectum.
Sam gasped, some warm water flowing into him as he took that wide head raw. It wormed its way deeper, spreading the yielding tunnel and buttering it with its precum. The walls quivered and squeezed the cock back, making the mimic's penis throb as he shivered.
Finally, the mudcat fully hilted his shaft into the tight ass, his slick belly and waist pressed against Sam's back. He pulled his cock partially out, before driving it right back in. He huffed, snout right over the hybrid's shoulder as he flattened him against the wooden post. His hips moved faster, slamming as deep as he could into mimic guts with the apex of each motion no doubt forming a bulge in the submerged furry midriff.
The passive mimic moaned whenever the fish's cock filled his backside, gasping for air as it felt like it compressed his lungs. His partner gripped his lifted wrists harder, hands going numb from the reduced flow of blood. Meanwhile, his engorged cock pulsed needily, ever closer to its release whenever the bulky base of the equine shaft compressed his prostate.
Repeatedly thrusting in and out of this cute mimic, it wasn't long until the catfish finally reached his climax, dumping load after load of hot jizz into those welcoming insides. Bloating the soft guts with his seed, his partner soon shivered and groaned, no doubt making his own milky mess underwater. The fish made sure to hold the slightly smaller male tight against his toned chest, not letting a single drop of cum go to waste. He wanted his balls to be thoroughly drained for this next part.
Once his well-endowed mate was done, Sam felt the slick penis carefully slipping out of his rear, finally giving his fatigued anal muscles some reprieve. No sooner did the flared tip plop out of him that he heard a 'gloop!', the fish quickly vanishing into the water once more. Panting, the hybrid wondered if this was the last that he'd see of him, or if the catfish still had some mischief in store for him.
Slowly paddling his feet to stay afloat, he noticed that his toes snagged onto something. He couldn't see what through the murky blackwater, but it seemed to tug on him. Immobilizing his ankles, Sam felt a warmth creep up his paws. Was the fish pulling him down? Not to drown him, the mimic hoped... He took a deep breath, and plunged his rectangular face underwater, to see what was going on.
As expected, it was definitely the catfish's doing. Their faces met, though the rest of the fish's body was still obscured by the dark water. He continued to grab and pull on the mimic's legs, although he wasn't sure why...or how.
"What are you doing...?" Sam asked, not needing vocal chords to speak.
"Well I'll be, you can talk underwater too?" The catfish was pleasantly surprised. "See, I was just in the mood for some fishin' myself~."
As the tightness increased to his knees, his legs smooshed together between what felt like smooth fleshy walls, Sam realized what was going on: the fish was devouring him with his cock! He wasn't much larger than the hybrid, which made the swiftness of it all the more impressive. "You must've done this plenty of times before, hehe..."
"And so have you, stayin' cool as a cucumber! I only do this to specially cute fellas~."
His metal briefcase turned slightly crimson as he felt the muscly tunnel work its way up his waist. Sam brought his palms down, now that the flared tip would be within reach. Sure enough, the flat tip which, moments ago, made a mess inside of his bowels was incredibly distended, growing to accommodate more of its prey. As his cock was slurped into the hungry member, he eased his paws in against his belly, feeling the warm fishy pre against his digits.
He tried to wiggle his toes as they pushed into a roomier space, finding a spongy floor that pushed out as they were forced inside. At the same time, he could feel the mudcat's hands working over his swollen shaft, massaging himself as to gulp down his willing prey more easily. With his paws pressed against his cock, the mimic also stroked himself, loving every moment that he disappeared further into his aquatic partner.
Worried that his latest catch might drown, the catfish sensually moved his hands around the half-canine's upper half, resting them on his shoulders before pushing down. He moaned as the hybrid slipped in faster, his soggy fur brushing against his sensitive ducts. The fish could see well in these murky waters, admiring the undeniable anthro-shaped bulges within his blotched cock. He could even tell that Sam was masturbating in there. The cutest ones always slipped in best...
With enough shoving, soon there weren't any shoulders remaining outside. Only perked ears and a briefcase poked out of his cock, complete with a handle and latches and all. If he hadn't seen it blushing or displaying a maw earlier, the catfish would've believed that it was the genuine article, and not a perfect mimicry. Curious, he reached his fingers around the handle, pushing down on it to force in the last of the mimic already halfway within his ballsac. His flared head bulged out one last time to consume the rectangular obstruction, squirting out some sticky pre as the meatus finally closed after the fish's retracting hand.
His nuts groaned and vibrated in anticipation, the sounds propagating loudly through the water into his internal ears. The catfish rubbed over his cock again, helping the hybrid's swift descent. Nearly completely devoid of seed thanks to the earlier fucking, his nuts quickly filled with the soggy, furry, writhing mass.
Although he wasn't at risk of running out of air earlier, Sam inhaled deep of the catfish's musk once he was in. Cum and pre and lake water mingled on his green and white fur, traveling downwards with the rest of his body. The smooth walls of the urethra squeezed him tight, swallowing him down with barely any external aid. He kept stroking himself as he folded his knees in the swelling balls, unable to resist stealing a lick or two from the salty walls of the freshwater fish.
With the mimic in tow, the scaled predator swam towards the bottom of the lake, unimpeded by the considerable weight in his crotch. His cock continued to shrink as more of the mimic was guided into his squishy chambers, which floated weightlessly in the water behind the swimming mudcat. Nearing the sandy floor, he turned onto his back, flexing his dick a couple more times to fully ensnare his prey.
As the briefcase bulge disappeared near the base, his balls surged one last time, leaving a wriggling outline in his sandy-colored balls. His cock had returned to its normal size, spewing some excess seed now that the living blockage was out of the way. It wasn't much, as his body hadn't had the time to produce much more after mating the mimic, but the mini-climax felt extra nice with balls as full as his.
Sam, stroking himself harder, felt the walls trying to compress him a distinct but familiar sensation every time that he ended up inside of someone's testicles. Any dark lake water that made it in with him was too diluted in the midst of the thick white slime to tell apart. As his predator's orgasm subsided, there was more space to press his paws against the gurgling folds, staying comfortable in the musky and salty hammock. He even felt weirdly floaty likely from being underwater. And he could hear the rush of water outside, as the catfish began to swim again.
The satisfied pred made his way through the blackwater without issue, emerging by the lake shore opposite from the old fishing pier. Despite his species, the anthro walked on land without issue in fact, he was used to spending most of his time outside of the water anyway. This was just a nice and secluded swimming spot of his. He headed over to a rock, where his blue overalls awaited him all stretched. But a lurch and a muffled orgasmic moan in his nuts reminded him that there was no way they would fit him like this.
"Heh," he chuckled to himself as he placed the overalls over his shoulder. "I'm itchin' to show Fir my prize catch~."

View file

@ -0,0 +1,131 @@
---
title: Coils and Spoils
pubDate: 2024-11-08
authors: bad-manners
wordCount: 2100
contentWarning: >
Contains: Size difference safe vore/endosoma (oral vore, unbirth), with willing anthro female mimic x maned wolf hybrid predator, and willing feral male snake prey. Also includes gender play, partial vore, and straight sex.
thumbnail: /src/assets/thumbnails/stories/bm_ff_17_coils_and_spoils.png
description: |
Sam finds a special birthday gift, which leads to some novel fun.
A late birthday gift for myself! I wanted to experiment with my fursona and a bit of gender play, and this short story is what I came up with. Another silly self-indulgent scenario, with two of my characters interacting!
posts:
eka: https://aryion.com/g4/view/1069619
furaffinity: https://www.furaffinity.net/view/58764561/
inkbunny: https://inkbunny.net/s/3472126
sofurry: https://www.sofurry.com/view/2198456
weasyl: https://www.weasyl.com/~badmanners/submissions/2434827/coils-and-spoils
sofurrybeta: https://sofurrybeta.com/s/dePdzX5e
mastodon: https://meow.social/@BadManners/113449372003774424
bluesky: https://bsky.app/profile/badmanners.xyz/post/3lahoppsq7s2f
tags:
- Sam Brendan
- Muno
- oral vore
- unbirth
- anthro predator
- feral prey
- female predator
- male prey
- willing predator
- willing prey
- size difference
- straight sex
- regurgitation
- partial vore
- flash fiction
copyrightedCharacters:
"Sam Brendan": bad-manners
"Muno": bad-manners
---
Closing the door to the bedroom, Sam was amused to see a box with gift wrapping on the mattress. Given the size of the present and the holes on the top for airflow, plus the card that read 'TO SAM, FROM BEETLE' on the side, the mimic had a good idea of what was inside. The briefcase face cracked into a devious smile, and Sam removed the lid to see a familiar reptile inside.
"Look who it is," the mimic announced playfully, "my favorite snake toy~."
Muno covered his ultramarine eyes with his tail as they adjusted to the light, though it didn't conceal the blush across his mint scales. "Wh-Who is this...?"
"Why, it's me, Sam... Don't you recognize me?" The tone feigned ignorance, and Muno could tell.
Before he could ask why the voice was a few registers above the usual, Sam picked him up by the tail, pulling him out of his box. Dangling in the air, he could get a better look at the mimic and her features.
"Y-You're different...!"
Sam chuckled, using her free paw to clear her bed to lie down. As she did, she gave her noodly friend plenty of time to admire her new body. Her face was still the same the mimic's exposed maw was proof of that , but her maned wolf half, despite keeping its athletic look, was much more feminine. Most of all from her bust, with the noticeable C-cup breasts on her chest. Her hips also seemed wider, and her shoulders narrower, but perhaps Muno was just seeing things...
"Is that a bad thing?" Sam teased as she dangled him above her head, giving him a good look at the shadowed gap of his maw.
"N-No, I didn't say that...!"
Slowly, he was lowered onto her chest, head placed right in her cleavage. Her fur was just the same from before warm and silky, with the usual tones of green and teal and white. He was coy about moving and touching either of those breasts, but he had no choice when Sam placed his gray underbelly directly on her right breast. It was soft and furry, except for the nipple brushing against his tail.
"It wouldn't be the first lie you tell today." She continued as she cupped her breast, enjoying the scales brushing against it underneath her fingers. Muno was extremely flustered about being used like this, and she knew full well.
"Lie? B-B-But you just found me a minute ago!"
"Yeah... From a gift box from _Beetle_... Who, in case you forgot, can't even read."
"...Oh."
She lifted her paw. "Mm-hm. So let's drop all pretenses that you don't want me to play with you. Although I gotta say, for someone without hands, your handwriting is not too bad..."
"Ieep!"
Before he could reply, a slimy appendage brushed against his chin. A flick of his blue tongue brought in that familiar sweet lime smell from Sam's tongue. It lapped around his head, leaving that somewhat viscous saliva that was undoubtedly the mimic's.
"Besides," she spoke as she continued to taste the peppermint-flavored snake, "Beetle has already given me a birthday gift. It's a magical artifact and it's easy to guess what it does..."
Muno was too distracted by the slobbery green muscle to answer, blushing and melting at the touch of this other 'snake'. He leaned into it as the yellow tip tangled itself lower down his neck, covering him in more drool in their slippery dance. After all, he couldn't deny how much he enjoyed it Sam knew him too well.
As she hummed over his candy-like flavor, the tongue tugged him closer. The slobbered scales were dragged over the patch of fur on her chest, as his face was pulled closer to her opening maw. He watched wide-eyed as that fleshy green cavern revealed itself in front of him, its sweet yet sour breath inviting as always.
Sam was slow and deliberate, entrancing her friend and teasing his fate as her plaything. She could devour him in one go, but it was always more fun to play with him first. She kept her tongue mostly underneath him, tasting the scales along his flat belly, hoping to entice him just enough that he'd give himself willingly.
And he did. He slithered carefully over the muscle, his long body slowly unwinding from her breast as he aligned himself with the slobbery ramp. The ground was sturdy and thick enough that he wouldn't fall on accident, but it still held him gently like a harness at the tip around his belly. His head was now a couple of inches off the ground or rather, her fur , washed over by the damp air coming from her throat.
As he passed the line of her long and crooked fangs, most of his vision had turned lime green. By now, her fully extended tongue had stopped pulling him in, yet he continued his journey forward on his own. He knew his place as her snack, as his nose carefully prodded away her uvula to squeeze itself into the tunnel.
With a 'squish!', the wall yielded, letting him in without a swallow. As light swiftly vanished around him, Muno managed to see the pulses that urged him deeper, before they started to massage his scales. It was wet as well, just like the tongue that most of his body was on. Although Sam wouldn't gulp him straight away, the throat tugged at his head while the mimic continued to taste more of the snake.
Muno gasped as her tongue probed at a particular vent on his underside. It was clearly aiming for his cloaca, as it lapped at the erogenous zone. Flustered and helpless, his heartbeat sped up as he inhaled more recycled air. With the tunnel slowly dragging him further down her neck, she continued to lick his emerging pair of cocks. Just another Manner of toying with him... Oh, how much he loved it.
It didn't take long for his hemipenes to reach their full length, brushing against the smooth surface of Sam's tongue. More of his upper body disappeared into the gluttonous kneading of her esophagus. She continued to slurp without swallowing, tasting his pre-leaking rods as he was greedily claimed. By the intensity of her hastening pulse on his ears, Muno must have been inside her chest. With his widest part passing her epiglottis, there wasn't much left of him outside.
The stifling air that he breathed got more acidic as he neared the bottom of the tunnel, the rush of being swallowed intensifying every sensation. His tail writhed harder, spreading the flavor of his cocks across her tongue. Meanwhile, his face passed through a sphincter, deposited into a wider chamber that wasn't any less oppressive. He was completely at her mercy.
Coiling inside of her stomach, his hemipenes would soon pass the back of her tongue and join the long slide down...if she hadn't intervened. Muno felt her fingers pinch his tail, holding it just outside of her maw ensuring that he wouldn't slip any deeper until she was satisfied.
If she was waiting for him to climax, however, it wouldn't take much longer. The powerless snake was already pent-up, and from the tip of his reptilian members, plenty of seed spewed out over Sam's tongue. Her gulps threatened to pull him deeper, but her grip prevented him from moving. Saliva and semen washed down over his slimy body, each swallow constricting him so pleasantly and thoroughly as he was held in place.
He was expecting her to let go at any moment, sealing him away. What he _wasn't_ expecting was to get pulled out the other way...! Her fingers distanced themselves from her maw, forcing more of the snake back out her throat. He was slurped up her esophagus like a noodle, pulled by his backside as he was quickly dragged up the squelchy tunnel. She chuckled around him.
"I hope you didn't think that I was done with you..." She teased. "I still wanna have more fun with this body."
His face finally emerged from her throat, slimy and soggy in her stomach sluice, and he gasped for fresh air. He was dangling from her paw once again, all lubed and ready for what she had in mind next.
The hybrid moved him away, placing him down between her legs. They were lightly spread, revealing the green labia that she now sported. Sam was somewhat wet, probably having some fun herself while Muno was too busy with her tongue to pay attention.
But the invitation couldn't have been clearer. Slithering closer, his forked tongue poked out a few times, enjoying the sweet aroma before he touched her flesh once again. His squamous head nuzzled against the opening, easily spreading her vent as she cooed softly.
Compared to the cool air of the bedroom, this new hole was so inviting and warm. It certainly wasn't Muno's first time inside a vagina, though he didn't get to enjoy it as often as other forms of vore. His tongue idly lapped at Sam's walls, making her squirm around him. Her reaction was cause enough for him to burrow deeper into her vulva.
Each moan from the mimic reverberated the walls, and Muno continued to use his body as a toy for her. Her juices clung to him along with Sam's saliva and acids, their warmth spreading and intensifying with each scale that passed through her lower lips.
"K-Keep going..." She murmured. "You feel so good in there, Muno."
She didn't need to ask, as the snake had already set his mind to it. With each passing moment, he disappeared more into her green folds, feeling her contractions along his straightened body. His face met with a smoother, rubbery wall at the end, funneling into a small hole. Thankfully, he wasn't much bigger than her cervix, and as he nuzzled the opening, he could feel it cede for his intrusion.
Sam groaned louder, as the first visitor of her canal began entering her womb. She watched as half of his body remained outside, between her legs, and her paw naturally moved to rub her clitoris in response. The reptile's head felt wholly different in her womb than it did in her tunnel, or even her stomach. As the pressure increased within her organ, she only wanted to be stuffed even more.
Though navigating through the tight cervix brought some difficulty, Muno wouldn't give up until he'd finished what he started. Especially given how his tail wasn't grabbed this time, he knew that this is what Sam wanted as well. For a cold-blooded animal, her spare warmth was too enticing not to mention the idea of surrendering himself to her whims. He coiled within her uterus, expanding it from inside though he suspected that he wouldn't make much of a bulge.
With her feral friend crawling into her tunnel, filling her from entrance to sphincter, it felt like a long dildo that was being swallowed by her nethers. She continued to press down on her sensitive flesh, with one finger on her erogenous button while the other squished inside to join Muno. His scales glided against her skin and folds, a pleasant texture that was swallowed by her lubricating juices. Her motions helped to press him further in, and when the tip of his tail finally slipped into her, her body convulsed.
Her hips bucked as she came, spasms rocking her vagina and the snake trapped within. Her muscles clamped down, threatening to squeeze him out but the grip of her cervix kept him locked in place. Only fluids would leave her holes, staining her bedsheets and fingers indiscriminately. Even with the ongoing orgasm, her scaly prey continued to push himself in, compacting more of himself into her uterus.
Once the climax subsided, she enjoyed the singular feeling of fullness while the last of Muno's tail wiggled past her cervix. She licked her dominant paw clean, making out the snake's peppermint taste among her own sweetness.
"Mmm... That was as wonderful as I had hoped for." She rubbed her flat tummy, feeling every motion of her settling prey hidden from sight. "I guess you won't mind if I stay like this for longer, will you?"
"N-Not at all..." Muno whispered, shivering his coils as he soaked her all-encompassing heat. He wouldn't complain. After all, he was hers, for however long she intended to keep him.

View file

@ -1,5 +1,4 @@
---
slug: engaged-in-reality
title: Engaged in Reality
pubDate: 2024-11-01
authors: bad-manners

View file

@ -10,7 +10,7 @@ thumbnail: /src/assets/thumbnails/stories/bm_8_flavorful_favor.png
description: |
One, fearful and furry; one, formidable and feathery; and one, fired-up for the follow-up. A threesome fatefully forced into a fantastical face-to-face.
So many ideas that I want to write...! I just haven't found a lot of motivation to write as much as before. But I'm still working, and haven't gone anywhere. At least I finally managed to churn out this one, featuring Beetle, one of my OCs! You might recognize him from <a href="https://booru.badmanners.xyz/index.php?q=post/view/3" target="_blank">one of the few things</a> I actually uploaded this last month. Quite a fun personality to play with, along with my sona Sam and another OC, Muno - someone might remember that last name from one of my previous stories. All of my characters featured in stories are fun really, with a few that I wanna revisit or new ones that I make for each new setting. Just wish I had a better writing rhythm to put all those ideas to life like I used to, though! Managing to finish this story is a start, I guess.
So many ideas that I want to write...! I just haven't found a lot of motivation to write as much as before. But I'm still working, and haven't gone anywhere. At least I finally managed to churn out this one, featuring Beetle, one of my OCs! You might recognize him from <a href="https://booru.badmanners.xyz/post/13" target="_blank">one of the few things</a> I actually uploaded this last month. Quite a fun personality to play with, along with my sona Sam and another OC, Muno - someone might remember that last name from one of my previous stories. All of my characters featured in stories are fun really, with a few that I wanna revisit or new ones that I make for each new setting. Just wish I had a better writing rhythm to put all those ideas to life like I used to, though! Managing to finish this story is a start, I guess.
posts:
eka: https://aryion.com/g4/view/884215
furaffinity: https://www.furaffinity.net/view/51778522/

View file

@ -9,7 +9,7 @@ thumbnail: /src/assets/thumbnails/stories/bm_ff_14_part_of_the_show.png
description: |
You attend a show, unaware of how personal it can turn out...
This is a story based off of a YCH that I got from [Helkumurrr](https://www.furaffinity.net/user/helkumurrr) which <a href="https://booru.badmanners.xyz/index.php?q=post/view/5" target="_blank">you should definitely check out</a>. First piece with myself as pred, to complement my previous commission where I was prey and also with a short (and hopefully fun) story to go along with it!
This is a story based off of a YCH that I got from [Helkumurrr](https://www.furaffinity.net/user/helkumurrr) which <a href="https://booru.badmanners.xyz/post/15" target="_blank">you should definitely check out</a>. First piece with myself as pred, to complement my previous commission where I was prey and also with a short (and hopefully fun) story to go along with it!
posts:
eka: https://aryion.com/g4/view/902197
furaffinity: https://www.furaffinity.net/view/52509501/

View file

@ -0,0 +1,130 @@
---
title: Party Trick
pubDate: 2025-01-02
isAgeRestricted: true
authors: bad-manners
wordCount: 1800
contentWarning: >
Contains: Oral vore (safe vore/endosoma), with willing male anthro jaguar predator, and willing anthro opossum prey. Also includes size difference, regurgitation, public vore, and alcohol.
thumbnail: /src/assets/thumbnails/stories/bm_ff_18_party_trick.png
description: |
Max receives an unusual request from a friend.
Happy new year! Here's a short story for the start of the year. I intend to make and share plenty of new stuff throughout 2025 as well, although progress may be slow due to me starting out a new job. We'll see!
posts:
eka: https://aryion.com/g4/view/1087736
furaffinity: https://www.furaffinity.net/view/59381567/
inkbunny: https://inkbunny.net/s/3515191
sofurry: https://www.sofurry.com/view/2216338
sofurrybeta: https://sofurrybeta.com/s/ZmM3vgW1
weasyl: https://www.weasyl.com/~badmanners/submissions/2454699/party-trick
bluesky: https://bsky.app/profile/badmanners.xyz/post/3lerb6lpxw22q
mastodon: https://meow.social/@BadManners/113759163137942723
tags:
- oral vore
- anthro predator
- anthro prey
- male predator
- ambiguous gender prey
- willing predator
- willing prey
- size difference
- public vore
- flash fiction
---
"...But then I told him, 'I thought you were against that sort of thing!'"
The circle of people laughed at Max's punchline, and the jaguar sipped from his beer can. After gulping, a small burp came from his lips, but the other guests in the party didn't seem to notice.
"Then he said, 'What the fuck do you mean'?" Max used an absurdly low register to mock the voice, while not noticing the cat approaching him from behind.
"Pssh... Maax..." The tabby cat whispered, nearly losing his balance from inebriation, but he was too quiet for the spotted feline to pay him any attention.
"And you should've seen the look on his wife's face... She went red as a peach!"
"Heey M-OOURP-Maxx..."
The burp _was_ loud enough to make the jaguar turn his neck. "Oh, hey Cam." He scanned the tabby, who certainly looked way more drunk than half-an-hour ago. Max took a step back to put some space between them, and that's when he noticed Cam's arms. "...Who is that you're carrying?"
"Ohh hic!, this?" He gently lifted the third-sized anthro, wearing a heavy hoodie that made it hard to tell their species apart. "Sooo I mighta told deese guys about dat trick you hic did in the last party we gone to, and dey wanna see it~..."
"Cam... But that was I-I was too drunk! I shouldn't have"
"Baaaah!" The tabby bleated. "But it was fine! Like you said, it's totally safe. C'mooooon~..."
Max gave a forced smile, glancing at the rest of his group all of them seemed confused. Then he looked at the small person that Cam was carrying they looked like an opossum, underneath the bulky clothes. 'Goddammit', he thought to himself, 'he _knows_ I have a soft spot for opossums...'
"...Fine, but you owe me." He blurted out before he even processed his own words.
Cam let out an excited squeal, raising the opossum to his taller friend. It was normally considered bad Manners to manhandle smaller anthros like this, but there wasn't any other way to go about it. After setting his beer aside, he managed to get a closer look, and they were definitely an opossum damn it! , but it was hard to tell their gender because of their bulky clothes. Not like it mattered, anyway.
"You probably want to ditch your clothes first." The jaguar told them.
They blushed and shrunk even more inside of their black hoodie. "N-No, it's fine..."
"You sure? I'm not paying to get them cleaned afterwards."
Gosh did they look cute with those beady eyes and bashful nodding. His maw was already watering.
Lifting them by the scuff of their hoodie, Max tried his best to ignore the insurmountable gazes set on him which only seemed to increase over time. He closed his eyes, letting the background house music drown out any whispers.
The jaguar opened his maw toward the ceiling, his hot breath likely tickling the opossum's legs. There was no reaction from the marsupial, who was limp in his grip. Maybe they were playing dead, or trying to contain their excitement like Max was.
He gently lowered them, until their feet were planted against his barbed tongue. Such a sweet, earthy flavor... Max already knew what those paws looked like cute pink digits sticking out from a fingerless glove of black fur , so he kept his eyes closed and let his imagination do the rest.
His jaws were wide enough to scoop the smaller opossum in one go, but Max was intent on savoring what little time they'd be between his menacing-looking teeth. He planted their butt on his tongue, legs pointing towards the back of his maw, enjoying the flavor and aroma satiating his predatorial side. The murmurs and gasps around Max seemed to intensify as did Cam's silly giggling , but he stood proud and erect as he continued to perform his 'trick'.
With the rat-like tail settling on his tongue, the jaguar wiggled his muscle, feeling the weight of the anthro who was a fraction of his size. More of that warmth seeped into his tastebuds as he, in turn, breathed all over their front. Perhaps some of the other guests might've thought that this was his trick using his maw as a chair , but his drunk friend's growing excitement indicated otherwise.
Planting his palm against their back, Max craned his neck further, far enough for the opossum to begin slipping forward. He opened one eye, just to make sure that his prey wasn't too close to the ceiling, and he saw the most adorable look of thrill on that blushing white face. Such a willing plaything... He had to resist the temptation and close his eye again, otherwise he might end up claiming them all in one gulp.
His throat was kept intentionally tight, wet flesh parting ever so slightly at the nudging of the marsupial's paws. But before they entered his gullet, Max took a deep breath it'd be his last one in a while. Now, the walls were looser, and one subdued shove planted those extremities inside, drawing a gasp from his prey.
Saliva dribbled out the corners of his mouth, pushed aside by the living snack slowly slipping down. As his neck started to bulge out, the jaguar couldn't help but purr at the feeling of those little claws tickling his esophagus. He knew that the opossum would look even cuter padding out his belly, which wouldn't be long from now. After all, Max was still holding his breath, to avoid choking on the bite-sized anthro.
They fit between his jaws without issue, until their hooded head finally lied on his tongue. He moved his paw away, feeling that large bulge in his spotted neck thanks to the marsupial's hips slipping down. Then, he lowered his head, keeping his maw almost shut as his palate pressed down on the marsupial's face, slowing them down just a tiny bit. Enough time for his paws to reach his shirt, undoing the buttons on the lower half.
Once his lungs started to burn, he gave one strong 'gulp!'. It was more than enough to force the opossum into his throat, sending down that immense and writhing swelling behind his tan fur. His jaws, snapping shut before the marsupial could let out a peep, relaxed as Max rubbed his chin. That pleasant weight quickly shifted down his chest, and the jaguar gasped for air once his prey stopped dislodging his lungs.
He opened his eyes as he faced down, just in time to see his spotted belly grow. His toned abs gave way to a slug-like mass arriving from his chest, held tight by the firm walls despite the occasional movements on its own.
"Fuck yeaaaaah! Woo!" Cam shouted out and cheered, inviting the uncomfortably quiet crowd around them to do the same.
Some awkwardly clapped and stared, Max noticed, although most of them were awestruck by his trick. He simply smiled proudly as he reached for his beer can, taking a swig to wash down some of the fur stuck to his throat. The drink was already warm, so it likely wouldn't bother his new occupant on the way down. Regardless, they'd have to get accustomed to the stuff already stewing in his gut.
"See, M-Max? Everyone liked dat!" The tabby blurted out, his eyes transfixed on the bulge that gurgled with every move. "Especially dat little one, I think..."
The jaguar flashed his teeth. "Would you like to confirm that?"
"I-I"
Before Cam could conceal his embarrassment, Max reached his arm around his friend's neck, putting him in a headlock and pressing his nose right against his midriff.
"So," the larger feline teased, "about that favor you owe me. You better start rubbing my belly, since I don't want to feel sore by the time I cough them out."
Still blushing, Cam's only response was to stick his tongue out. His paws moved to the vaguely anthro-shaped bulge, more than happy to oblige.
Max sighed, enjoying the feeling of his stomach walls being squeezed from both sides. Apparently, most of the guests had turned away, off to enjoy whatever else the party had to offer. Perhaps he should do the same.
"Sorry about that interruption," he said unabashed to the circle of people staring at him, still holding Cam against his groaning gut. "Now, where was I...?"
---
Tight... damp... squelchy... Though the thrumming heartbeat served as a biological clock, the opossum had lost track of time. How long had it been, hours? Minutes? The party outside seemed so distant in here.
They were about to doze off in the jaguar's acrid chamber... Until they suddenly started shifting up, with light finally reaching their eyes again. And the first thing they saw was a towel.
Max was careful to regurgitate them, so they wouldn't slip away or hit anything hard. From his jaws, he slowly deposited the drenched anthro on the towel he held, quickly staining the white cloth. His released prey noticed that they were in a restroom. He waited until all of that pink tail had slipped out from his maw before he decided to speak.
"Hey there, sorry about the mess. The party is winding down and your friend told me you were her ride home, so...time to let you out and all that. How was it?"
The opossum wrapped the towel tighter around their shoulders, intentionally looking away from the big feline. "...I-It was okay."
Max chuckled, expecting anything but that answer. "Ouch! Well, I'll leave you to dry yourself. Oh, but first," he reached into his shirt pocket and pulled out a card, "if you ever want to do it again even though it was 'just okay'. Just call me on that number right there."
The hoodie-wearing marsupial took his card between their fingers, inspecting the laminated paper as drool and gunk dribbled onto it. 'MAX SIMMONS Oncologist', it read. It was funny to receive a business card from a guy after just having been devoured by him. And they wouldn't have guessed that he was a doctor.
Before the opossum could speak, Max closed the door behind him, leaving them alone in the restroom. They never told him their name... Oh, well. They reached into their hoodie's pocket, placing the card there and fishing out a slimy phone. The screen unlocked to the gallery app displaying lots of pictures of the jaguar's tight pink insides.
What a party this had been...

View file

@ -1,5 +1,4 @@
---
slug: playing-it-safe
title: Playing It Safe
pubDate: 2024-08-08
authors: bad-manners

View file

@ -0,0 +1,278 @@
---
title: Role Model
pubDate: 2024-12-21
isAgeRestricted: true
authors: bad-manners
wordCount: 5700
contentWarning: >
Contains: Anal vore and oral vore (safe vore/endosoma), with willing female gryphon predator, willing male gryphon prey/pred, and semi-willing male gryphon prey. Also includes same size vore, size difference vore, bigger prey, reverse full tour, sex (straight and gay), partial regurgitation, and implied nested vore.
thumbnail: /src/assets/thumbnails/stories/bm_22_role_model.png
description: |
Summer always brings changes, and Beetle stumbles upon the doorstep of an exciting opportunity.
posts:
eka: https://aryion.com/g4/view/1083793
furaffinity: https://www.furaffinity.net/view/59252892/
weasyl: https://www.weasyl.com/~badmanners/submissions/2450541/role-model
inkbunny: https://inkbunny.net/s/3505174
sofurry: https://www.sofurry.com/view/2212053
sofurrybeta: https://sofurrybeta.com/s/J1O5pQQm
tags:
- Beetle
- oral vore
- anal vore
- feral predator
- feral prey
- female predator
- male predator
- male prey
- willing predator
- willing prey
- semi-willing prey
- same size
- size difference
- smaller predator
- multiple prey
- full tour
- regurgitation
- nested vore
- straight sex
- gay sex
copyrightedCharacters:
"Beetle": bad-manners
---
Migration season was always an exciting time for adult gryphons. Chasing the encroaching summer heat northwards, on the tail of seasonal winds, as they're brains were programmed to do in the hopes of finding plenty of food and, perhaps, a mate for reproduction. Each year, they'd have to sate that primal need for peregrination. And with Beetle, it was no different.
Granted, propagating his genes was the last thing on his mind. The crested bird-lion hybrid had no plans of being a father although he wasn't one to deny any willing sexual partners, regardless of gender or species. Still, he was relieved that he hadn't stumbled upon any tiny gryphons wandering around with a fluff as orange as his, or any rosettes under their wings. This season, like in all the previous ones, Beetle wasn't looking for true commitment, but for some unfettered and kinky bit of fun.
By this point, he had been the only one in his flock for a while. The sun had almost set, and most of the other gryphons that had flown with him had already retired for the day. But Beetle wanted to get to his destination early, while everyone's libido was still high, to make the most of his little vacation. Still, he wasn't about to keep flying throughout the night, and his wings could use some rest. His purple eagle eyes were scanning the ground far below for any shelter and, sure enough, he spotted a run-down logging hut in a clearing.
Judging by its sorry state from outside, it probably hadn't been inhabited by anything other than bugs in a long while. Beetle descended gracefully, making as quiet a landing as possible with his relatively big body. Once his weight shifted to the leonine paws touching the soft earth, the soreness of his wings finally caught up to him. He took a few other glances at the pinkish twilight skies for any signs of gryphons to spend the night with, but as it had been in the last couple of hours, he was completely alone.
Sigh...
...Wait, Beetle thought to himself. It wasn't him who sighed just now. His head perked up, looking at the shack the most probable source of the noise. There was a subtle grunt inside, followed by some shuffling. Of feathers, by the sounds of it. Another gryphon, maybe? He took a deep, silent whiff. No... more than one. The stench of sex was unmistakable.
Cautiously, he approached the wide-open doorway, like the big feline predator that he almost was. Thanks to his heightened sense of smell for other gryphon's pheromones, he knew that there was a female in heat in the company of a male just relieved of his seed before he even laid eyes on them. Two lovebirds who simply couldn't wait to reach their destination before having some fun themselves. 'A perfect opportunity', he thought.
Even though Beetle had missed the sex itself, he still had plans for some post-coitus fun. After all, he hadn't eaten anything in a long while and a younger, smaller gryphon could fill up his stomach quite nicely, just to get rid of the annoying pangs of hunger. And maybe he could stuff the other one up his cock, if they were willing enough, making his balls sag nice and low. Or even stuff them in his bladder, a trick he pulled off with a small dragon not long ago. Or maybe he could send one of them up his butt, and the other into the crop within his chest... So many opportunities, indeed. He licked his beak in anticipation, as he hoped to take a better look at his banquet.
Encroaching the doorframe, he peeped into the shack, with just enough light to reveal the two smaller adults. They were roughly half his size perfect for any type of fun he had in mind. He'd certainly manage the couple by himself. He still fondly remembered last year's romp, when he'd managed to squeeze not one, but two particularly frisky gryphons up his backside despite each one being as big as himself!
Still, he decided to analyze these ones from afar before making a move, and try to figure out what _they_ would prefer from their body language. But both of them were in an unusual position, facing away from the door. The cream-and-yellow male was standing behind the female and she, with her sapphire and black feathers, had her taloned forepaws gripping the floor, butt raised in the male's direction. From Beetle's perspective, it looked like he was giving her oral but he couldn't understand why they were doing the foreplay _after_ the main event.
"Mmm...c-come on, Cold..." The female gasped in a soft but needy voice. "I want more than your head..."
"Mh'm tm-hmmn'!" was the surprisingly muffled response.
That little exchange between the couple certainly piqued Beetle's interest, and he moved in closer. He'd completely forgotten to hide his presence, but the gryphons seemed too distracted in their act to notice. He hadn't gotten a good look at the male's face moments ago now, he realized that it would be impossible, given that his entire head was stuck under the female's tail. There was a subtle 'squelch!', and the fluff under the sapphire-feathered gryphon's belly moved a bit. The outline was faint, but it certainly appeared to be the male's beak, lodged not-too-deep in his partner's bowels.
It seemed that Beetle wasn't the only gryphon around here with vorish inclinations...
With an amused grin on his yellow beak, he casually made his way through the doorway. The creaking of wood under his paws didn't alarm the female, who seemed to be straining a great deal with her living insertion. She lowered her front side until her beak was against the shack's floor, and raised her tail as high as she could, unknowingly giving Beetle a better look at her backside. Her reddish pucker was stretched wide around the male's neck, struggling to make any progress even as more lubricating slime was soaked by the cream-hued feathers. He could tell that she was trying to pull the male in, not out but even though the trapped partner didn't seem to fight her, she still wasn't making any progress on her own.
Beetle lowered his head almost to the ground as well, and asked in his somewhat screechy voice. "Is this your first time...?"
The dark-feathered gryphon gasped in surprise at the same time that a muffled 'squawk' came from her midriff. But the shock on her face slowly dissipated once she realized that the big orange blur was another of her species, replaced by an expression between confusion and lust.
"I-I wasn't We werent expecting hf! any other gryphons yet, this far out..." She said between strained gasps. "S-Sorry, what did you say? I didn't catch that..."
"I said, is this your first time? Shoving someone up your ass, I mean."
She chuckled, disarmed by the larger gryphon's casualness regarding the situation. "No, b-but... Nothing bigger than my talon so far. But mf... B-But Cold promised that he'd let me try, if I let him rut me first."
"Cold...?" Beetle tilted his head, and stared at the male neck-deep in her hind. "Oh, this guy?"
"Y-Yeah..." She raised one of her bird-like talons to point. "That's Coldmoon, a-and I'm Foehn."
The orange gryphon proudly puffed out his chest. "I'm Beetle! Say, Fun, why did you decide to take on Coltman here, if you didn't have any practice?"
"Huf... I-I dunno! I just really wanted to Hells, even his h-head alone feels good." Foehn sighed. "I was fantasizing about this s-since last year. There was this guy back at the mating grounds who managed to fit two other males up his butt and he did it in public, too!"
Beetle's purple eyes widened. "What a coincidence! I also did that last year at the mating grounds!"
"Did you...?"
She tried to focus as she took a better at the older gryphon, wondering why his orange plumage and wing rosettes seemed so familiar. This time, she noticed the boner sticking out between his legs, before discreetly changing her gaze to his front paws. They were feline, unlike the eagle-like talons that both she and her partner sported. She then looked towards Coldmoon, who hadn't budged and was tapping his own claw impatiently.
"W-Well... Maybe I just can't do it, after all..." She sighed defeatedly.
"I'm sure you can do it!" Beetle cheered as the priorities in his head began to change. "You're just tense for your first time. You just gotta relax and ease him in, you know. Oh, and I can help, too!"
"Help, h-how...? With encouragement?"
He snickered. "That, too! But mostly a little bit of force and lubrication, just to help you out. But it still will depend on you!"
"F-Force..." Foehn stammered. "And...wait, what do you mean 'lubrication'?"
"Oh, I'll get to that soon enough! Just stay calm and loose, and I'll help you fit all of Coltman in no time."
Beetle turned away from her, circling further away from her limited sight-line. It wasn't like she could do much on her position but to trust in Beetle, and she faced away again, her pointy silver beak hovering just an inch above the ground. She still wasn't so sure about swallowing her entire partner with her anus as she had been half an hour ago but as simple as the fellow gryphon's advice had been, it wouldn't hurt to try and focus on relaxing her body...
As she closed her eyes, Beetle approached the second set of haunches, this one more dominated by pastel tones of yellow than Foehn's dark fluff. Holding them up together and lifting them up was easy enough, given Coldmoon's smaller size. He licked his beak and opened his jaws, as he planted the furry toes on his tongue.
With confused yet muffled noises coming from the female's midriff, the yellow paws fought against the wet sensation. But as they kicked, instead of finding purchase against a solid wall, they pressed right against the soft flesh within Beetle's maw. The cocky gryphon hummed at the flavor, tart but not unpleasant, enjoying how the struggles led those hindpaws straight into his gullet. He wasn't quick to swallow, savoring the hibiscus-flavored fur and coating it in saliva just as he'd planned.
Foehn was none the wiser to Beetle's shenanigans, focusing instead on the mass planted within her. She could feel her stretched muscles clamping over Coldmoon's beak and head as he struggled and whined. Still it felt like she couldn't make any progress, but she wasn't deterred. She took a deep breath and leaned back, hoping to gain at least a fraction of an inch. Though it was nearly imperceptible, the feathers ruffling against her sensitive anus proved her right. It was barely any progress, but she would take her tiniest victory for the time being.
Beetle, on the other hand, had no issue fitting more of the smaller male down his gullet. In fact, he was carelessly working his way up the gryphon's body, enjoying the intoxicating feeling of someone else bulging out his neck and squirming within. Without ceremony, he kept his grip around the prey's wings, ensuring that he wouldn't try and spread them until they were trapped in his slimy esophagus.
Still surprised and somewhat desperate, Coldmoon pressed his talons against Foehn's rump. He'd only play the part of willing prey for his partner, not for this larger bully. But he couldn't cry for help like this...! Yet, as much as he tried to pull himself free, the walls tugged on him harder. Moments ago, it'd have been easy to pull his head out. Now, Foehn seemed determined to keep him in place, while her intestines groaned and caused his ears to ring. In response, he simply stopped struggling and resigned himself to his fate unable to even sigh properly under his circumstances.
She wasn't sure why her prey would try and break his promise like that but perhaps that fight instinct of possibly losing her prey was what she'd needed to unlock her potential. Foehn clenched her muscles and felt his beak go deeper a full inch, this time! The head was starting to enter her colon, and if just the tip felt this good already, she couldn't wait to be filled all the way.
Before she could manage another anal swallow, something slimy rubbed against her clit. Not long after, a vise gripped her back and underbelly, forcing her hindpaws to tiptoe as her rump was lifted off the ground. Despite her lack of visibility, the hybrid did her best to turn her eyes back and what she saw definitely wasn't Coldmoon behind her, but a very greedy orange gryphon, who had his gullet completely filled as he tried to gulp her down as well.
"H-Hey! Beetle!" She shouted out. "I thought you were trying to help...!"
Completely entranced by Coldmoon's flavor until now, Beetle opened his eyes as he heard Foehn's call. "Hmm? Oh... righf."
Just like that, the larger gryphon started working his way backwards, coughing up his prey just as effortlessly as he'd gobbled him up. Male gryphons, she thought, the whole lot was the same; always too birdbrained to think about anyone but themselves. Still, at least it provided her with quite the spectacle watching her partner reemerge from that yellow beak, his cream-hued feathers soggy in purple slime. The air was filled with the faint scent of grapes as Coldmoon's shaking paws returned to the ground.
"There we go," Beetle said with accomplishment, pausing to swallow some excess saliva. "All lubricated for you!"
"B-But -mf- was it really necessary? I thought I wouldn't need lubrication..."
"But it doesn't hurt for your first real prey, Fun! Until your body gets accustomed to it, that is." He placed his paw over Coldmoon's haunches, who instinctively shirked in reflex. "Now, are you both ready? Just remember to relax, and your body will know what to do next."
Foehn nodded, having no reservations now that she'd had a taste of what was to come. Once again, she lowered her head and leaned back, eager and ready.
Beetle's large paw gripped Coldmoon's butt, enveloping most of it with a firm hold as to avoid slipping due to the coating of saliva. Slowly, the rest of his neck pressed on, shifting the pointy bulge in the sapphire gryphon's midriff. It was still slow, but somewhat surprisingly, the improvised lube actually helped pushing him in.
Being further stretched, she put her talon to her belly, making out the hidden features of her prey's head. She gasped as her hole started to stretch around the wide shoulders, its red ring puffing out to consume them. The mild discomfort from her body being forced to its limits never got worse, thankfully, instead rewarding her with that fuzzy feeling that made her loins ache. Foehn moved her paw lower, finding her vulva at a different spot than usual thanks to the 'meal' dislodging her organs.
Coldmoon remained limp, surprised that he was growing used to the tight walls squelching over his head. It wasn't a particularly cold late spring day, but his partner's warmth was so inviting. Much more than the other gryphon's warmth, whose saliva still stuck grossly to his fluff. It probably smelt bad, too though he had no way of knowing. He was thankful that his head had been stuck in here, otherwise he might've ended up as Beetle's lunch instead. At least the brutish hybrid wouldn't toy with him anymore...
...Except for the sensation between his legs, as Beetle's beak tactically went for his junk.
The orange gryphon already had licked Coldmoon's cock earlier his saliva sticking to it was proof of it , but now he could give it the proper attention it deserved. Still keeping pressure by holding one of the smaller male's hindlegs, he made up for the earlier scare with much more subdued and localized licks. This time, Beetle noticed, he wasn't struggling. With the tacit approval, he continued to blow him.
As Foehn's rear started to tug on her partner's limp legs, she realized what Beetle had meant by her body getting accustomed to this. With nothing more than her instincts and a burning desire, her muscles seemed to work Coldmoon in on their own, swallowing him in reverse. She already looked full with a clutch of eggs, but still she wanted more.
Letting go of his paw, Beetle raised his neck, arcing Foehn's prey into the air as he helped himself to his musky bits. The cream-colored gryphon was held in an arc from Beetle's tight beak to the female's even tighter bowels, his subtle moans drowned out by the groans of the expanding belly. With half of his forelegs and most of his chest constricted, the slimy walls pulled his face past a bend, where his beak would screech to announce his orgasm.
The predatory gryphoness recognized Coldmoon's cry, still rubbing herself as the growing bulge underneath her fluff made it harder to reach her clitoris. Despite the sonorous complaints from her unaccustomed body a symphony of gluts and gurgles , it felt way too good to simply stop.
"Haaah..." She breathed out. "Fuck~ I-I want you to push him as deep as you can..."
Beetle's beak released Coldmoon's crotch, some seed still on his tongue before he swallowed. "Can do!"
Planting his leonine paw firmly on the hindside once more, he began pushing with more force, testing the waters of Foehn's limits. She squawked in surprise, but her colon took in the extra pressure without issue. Her prey continue to turn inside her stretching muscles that she never knew existed, all working to pull him all the way in. Any discomfort from her greedy hole being stretched had melted away, leaving only the pleasure of wings and fluff brushing against it.
Unable to control herself, she cawed with her first climax, walls clenching harder over her partner's head and torso. Her body had no way of knowing just how much prey was left there was just the lingering desire to clear the obstruction and seal it past her anus. Still, there was still about half of Coldmoon to go. Foehn felt so full, but not in an overfed Manner. Maybe this is how a proper predator should feel like, sated in more than one way.
And it was thanks in no small part to Beetle, who not only had inspired her but was actively helping. He continued to push Coldmoon in as per her command, feeding his haunches into her anus. He kept a tight grip even as his digits slipped inside the squelchy entrance, forcing the yellowish backside into hers. The sapphire-hued belly clearly displayed her large prey, constricted and curled in the depths of her gastric system. Beetle was more confident that she would be able to fit not only the prey that was big as herself, but so much more...
The persistent shoving forced her organs to readjust still, to her pleasure. With her talon still wet from her climax, Foehn continued to rub the button between her labia. This was so much better than sex no offense to Coldmoon, but he was a better toy than a partner. She could feel his feline half entering her, making her belly as big as herself. Yet her hole still throbbed around a fluffy intrusion, too wide to be the yellowish gryphon's tail. It must've been Beetle's paw, reaching into her.
To her surprise, she felt _another_ set of large digits probing her exposed flesh. They began spreading it even wider, invading her, to the point where the sudden discomfort suddenly returned as her anus expanded more than it had over Coldmoon's broad shoulders. Beetle was forcing his second paw into her as well...!
"Hff! Wh-What are you...?" She gasped in a spent croak.
"I'm pushing Coltman as deep as I can!" Beetle answered sprightly.
"B-But that's not what I mea ngaaAAAah~!"
After his knuckles made their way in, his arm squelched into her slimy rectum, shoving Coldmoon even deeper and causing her to inadvertently sing out her lust. She could feel the beak push past the colon into her small intestines, making space for Beetle to start nudging his own larger beak between his front legs. Her anus was being stretched way past what should've been its maximum, and it should've been too much for her body.
And yet... Other than the stiffness in her muscles, there was no pain. As the larger male brought his beak and tongue into her entrance, her body continued to tug on the two intruders. This was beyond unreal, and she should've been worried, yet she couldn't stop rubbing herself.
Adding more saliva to the walls, Beetle tasted Foehn from inside. He stretched his arms as deep as he could, slowly shifting the weight of his head into the warm hammock as well. He wanted her to feel the whole experience, and to continue pushing Coldmoon deeper still but of course, he'd have to follow after him to do so.
Her belly was already huge, pushing against the ground and lifting her hindpaws into the air. Coldmoon did nothing other than the occasional wiggle, fighting the constant pressure squeezing his entire body that only increased. Yet Beetle, the inspiring gryphon predator, was ever the diligent prey; willingly feeding himself to her, despite how impossible it appeared. Her mind was in a fog of pleasure, and she couldn't even form words as her breath came out short. Not that she'd ever tell him to stop...
Between the gurgles slapping the anal sluices over his head, Beetle continued to crawl and lick his way deeper. Forcing the other male past this or that crease, it also made room for himself to follow. His head alone was as thick as Coldmoon's widest parts, meaning that the rest of him would prove quite a stretch for Foehn.
Sadly for her, it reached a point where she was so obscenely full that her talon no longer reached her genitalia. Still, the whole action had plenty of sensations to spare. Her tunnels now felt like an erogenous zone by themselves, from the entrance to her core. Coldmoon, now lost deep in her guts, was as close to her as he could ever be. Though Beetle, nearly twice her size, was proving the most pleasurable of the two. It was way more than she'd bargained for, and it felt heavenly. Unable to touch herself, she climaxed again still, unable to form any sounds other than a whiny squawk.
She could see the outline of two beaked heads inside her, taking opposite spots in her overtly distended fluff. Her belly grew with Beetle's, as her puffy hole made short work of his throbbing cock. She felt how the larger male shifted his hips, brushing his barbed cock against her quivering rectum... That's when it clicked that the way Coldmoon was writhing was in order to fuck her walls, too. Their combined panting, huffing the stagnant air in her guts, was barely perceptible over her own gasps. The loudest sound yet was from the squelching flesh, slick in a plethora of juices and eager to consume far more than she'd intended.
After who knows how long, with her midriff too large to wrap her arms around, she felt Beetle bend one of his hindlegs to bring his foot to her hole. As he pushed the rim out to fit it in, another orgasm would've rocked her body if she could've moved. Her beak opened slightly against the wooden floor to let out a weary screech of lust. How in the hells could it get better with each passing moment?!
Once his paw was slurped up, he used her rectal wall as leverage to continue on his arduous task. Coldmoon had been completely claimed by her tight intestines, while Beetle twisted and clawed in right after. Only his other leg and tail remained outside, making her an immobile fluffball of black and sapphire blue. She rubbed her swollen guts, watching her stubborn prey disappear deeper still. Just how deep would Beetle be able to push both of them...?
Working her way over the last bits, Foehn tried to admire the fruits of her labor. Yet she could barely see her body, since the belly that was now much bigger than herself also pinned her in place. At least it was heavy enough that she wouldn't roll away like a ball, probably...
The two differently-sized masses continued to writhe and move, beaks and paws and talons pushing out under her skin, clearly defined in the sea of sapphire fluff. As they moaned inside, inhaling the thin and stifling air, she wished that they were enjoying it as much as she did.
"H-Holy hells..." was her less eloquent response as her anus finally pinched shut past the last of Beetle's tail.
With her paws on her midriff, she pushed on the outline of the smaller head gasping as she inadvertently helped it slip further in. Her fluff between her haunches was completely wet in her fluids, and totally out of reach, but she wished to rub herself still. Instead, she continued to press against the back of Coldmoon's head, his spilling deeper into her bowels as a way to please herself.
It was so weird to have such a full belly, but not have her hunger satiated... Instead, it fulfilled a completely new type of craving, and she couldn't have been more accomplished for it...
---
...
Foehn couldn't remember falling asleep. It must've been a lust-induced blackout. But when she woke up, the sun was very close to the horizon, out the door of the shack.
Actually, not that close. It was just above her large belly, in fact.
Somehow, during her sleep, she must've flipped over and ended up with her back to the ground. It must have been some sort of ruckus from her occupants while she was unconscious that brought her to this position, she imagined. At least, even like this, the weight wasn't unbearable. Her spine, flat against the floorboard, would definitely thank her later.
There was still the occasional movement within her belly, but it was still hard to tell what was happening right under her beak. She rubbed her bloated fluff, humming as her worn muscles got the faintest of reliefs. Strangely, she no longer felt that intense pleasure from the last day instead, it felt like she'd overstuffed herself overnight. But there was no way that the two gryphons had managed to travel _that_ far into her, right...?
"...Ooouuarp!"
As she belched, the faint whiff of hibiscus caught her tongue and nostrils, followed by the unmistakable shift of something pushing out of her stomach.
"Oh, sh-shit... urk"
Like a meal that disagreed with her, she felt a substantial mass shifting up into her chest, along with an annoying heartburn. Her first instinct was to swallow, to not let her prey escape... But trying to gulp did nothing, as the heap of feathers continued to fill up her esophagus from the bottom.
Her silver beak already salivated uncontrollably, but no amount of swallowed drool stopped her prey's ascent. The feathery matter turned out to have a beak, she could tell, as the hard surface brushed against the sensitive tunnel. In a complete reversal, her body hacked and coughed, betraying her will. After all, Foehn wanted it to go _in_, not out...!
There was nothing she could do, however, as the tip of Coldmoon's beak poked from the back of her throat. Her maw instinctively opened, letting sunlight flood into her mouth as it temporarily blinded her partner's emerging eyes. Filling up her maw from the wrong direction, he gasped heavily for fresh air. With the stomach sluices now clinging to his feathers, his tart flavor felt even more acrid.
"Haah...! Aah... F-Freedom...!" The yellow-headed hybrid gryphon sounded exasperated. "At last... I-It's been hours, with that big bully pushing me a-all the way..."
The drool dribbled down from her beak, pushed aside by the head positioned on her tongue. She couldn't speak with her mouth full. But as much as Coldmoon wanted otherwise, Foehn simply didn't want him to leave so soon. Her lust spoke louder than reason.
With his slimy beak jutting out from hers, and his shoulders still trapped in her throat, she knew that she had to act fast. Her talons moved to her maw, pressing down on the half-regurgitated hybrid and swallowing hard.
"W-Wait, Foehn! WAIMMMPH!"
Her beak clamped down as much as it could, forcing his own mouth shut. He slipped back just an inch, which was progress enough for her. She squeezed her beak harder, tossed her neck back, and gulped again. Another inch, and she was slowly forcing him back in.
He muttered and squirmed, his movements felt all the way down her throat. With each heavy gulp, the weight in her maw shifted further down. Having her neck so full was wonderful and despite his lack of cooperation, Coldmoon was a decent enough breakfast. Each squirm just felt so delightful...
Once his beak was fully engulfed by her throat, she gave another gulp and was surprised at how quickly he slipped down! It was an unexpected but hard-earned victory, and she couldn't help but place a talon to her neck, feeling it return to its normal size in a swift gulp.
"Hff... Tasty~." She teased, licking the slime from her other talon. "I hope you learned your place, snack~."
It wasn't like her usual self to taunt like this, but the whole ordeal had worked quite an appetite aside from the literal one. But she somehow felt more _complete_ with other gryphons padding out her belly...
Though she celebrated her victory, however, it'd turn out to be a short one. Something else began crawling up from her stomach, clearly more massive than Coldmoon. It could only have been Beetle, trying to make the same journey outward that her partner had failed. Except that being older, stronger, and larger than her, Foehn's gulps were even more in vain to combat his squirms. All that she could do was wait.
Given how big his head was, her neck bulged out far more. She was afraid that he'd be too big for her body to endure, but _gods_ how wonderful it felt to be stretched out so far. If only he was going the opposite way... Though she wondered if she would even be able to swallow someone as big as Beetle on her own.
As a last resort, she tried to keep her beak tightly shut, hoping to delay the inevitable... But as the pressure amounted to more than her strained jaws could handle, she had no choice but to open her maw. When Beetle's head emerged from within, her beak opened way wider than she could've ever imagined. Unsurprisingly, the yellow beak and orange-feathered crest appeared past the tip of her tongue, though much slimier than she remembered it.
"Hey, good morning, Fun!" He greeted nonchalantly, still mispronouncing her name. "So, how did you like being a pred?"
"Mm MMF mmng, hm"
"Oh, right. You can't talk with your mouth full, hehe." He joked, seemingly more interested in idle chatter than actually escaping. "Well, remember how I was trying to push Coltman as deep as I could? So I was forcing him up your throat, and that's when I yawned. That's when, somehow, he started going down instead of up! And I had my beak open below him, you see...so I, uh, may have swallowed him by accident. I hope you don't mind that."
She blinked dumbfounded. He accidentally _swallowed_ him?! She was... well, she honestly didn't care that much, so she just shrugged and gave the best non-committal 'hmf' she could.
"Great! So, should I pull myself free or...?"
This time, her response was a resolute no shaking her head as much as she could around Beetle, and pointing her taloned finger to her belly.
"No? Well, alright then! Enjoy~."
And just like that, Beetle started forcing his way back down her throat. Foehn's body was utterly helpless as the partially regurgitated gryphon wormed into her all by himself again. Being so easily traversed up and down hurt her newfound pride as a predator, but she couldn't deny the results. And even covered in her gastric juices, he still tasted great like an omelette, perhaps. An unusual but welcome flavor for her 'breakfast'.
Willingly making his way down her gullet, she got to enjoy watching her belly grow back to its ludicrous size. Beetle's lower paws were plain to see, but Coldmoon's bulge was replaced by a rounder belly on the larger gryphon. Either way, her partner would be filling her up, staying true to his promise.
She let out another burp once her cardiac sphincter closed over his head, with an orange feather flying out from her beak and landing on her chest. It wouldn't stay there for long, as Beetle immediately started moving and moaning. It didn't take much to figure out that he was pleasuring himself.
"M-Mmmf, that's it... So gooood~" She whispered, rubbing over the outline of his head. "Squirm harder for me..."
Per her command, he did as he was told. Rubbing his free paws against her walls, stretching them outward until she could make out the individual pawpads, and causing her to moan as well. Their stomachs gurgled together over their prey, really searing into her the idea that she was, without a doubt, a predator. All thanks to her role model, who was now enjoying a tight stay in her guts.
Foehn wasn't far from another climax already, even though she was unable to reach her pussy. And although it was migration season, she wouldn't quite make the journey to the mating grounds. Even if she could which was a big if , her belly wouldn't fit through the doorway like this.
Regardless, she'd already found all she wanted: a rutmate, willing snacks, and a new passion. You wouldn't hear her complain instead, she'd let out an orgasmic screech.

View file

@ -13,7 +13,6 @@ description: |
posts:
eka: https://aryion.com/g4/view/1030875
furaffinity: https://www.furaffinity.net/view/57459926/
inkbunny: https://inkbunny.net/s/3377727
sofurry: https://www.sofurry.com/view/2156241
sofurrybeta: https://sofurrybeta.com/s/ZmM3QrW1
weasyl: https://www.weasyl.com/~badmanners/submissions/2396279/c-rose-s-binge

View file

@ -27,6 +27,8 @@ tags:
- willing prey
- unwilling prey
- same size
- public vore
- casual vore
- flash fiction
---

View file

@ -35,6 +35,7 @@ tags:
- willing prey
- macro predator
- size difference
- public vore
- gay sex
- transformation
series: the-lost-of-the-marshes

View file

@ -0,0 +1,95 @@
---
title: Tough to Swallow
pubDate: 2025-04-28
isAgeRestricted: true
authors: bad-manners
wordCount: 1000
contentWarning: >
Contains: Same size safe vore/endosoma (casual oral vore), with willing anthro female bunny predator and asleep/unwilling feral male swallow prey. Also includes role reversal and implied long-term endo.
thumbnail: /src/assets/thumbnails/stories/bm_ff_19_tough_to_swallow.png
description: |
A certain bunny is eager to celebrate an unusual date.
Tried to whip up a quick story in a couple of hours and here's what I came up with. Happy Eat Your Friends Day!
posts:
eka: https://aryion.com/g4/view/1128415
furaffinity: https://www.furaffinity.net/view/60732780/
inkbunny: https://inkbunny.net/s/3606986
sofurry: https://www.sofurry.com/view/2247194
sofurrybeta: https://sofurrybeta.com/s/ve3LDkZm
weasyl: https://www.weasyl.com/~badmanners/submissions/2487004/tough-to-swallow
bluesky: https://bsky.app/profile/badmanners.xyz/post/3lnui2yktas2w
mastodon: https://meow.social/@BadManners/114414939718903600
tags:
- oral vore
- anthro predator
- feral prey
- male predator
- male prey
- willing predator
- asleep prey
- unwilling prey
- same size
- role reversal
- long-term endo
- casual vore
- flash fiction
---
"Wake up, sleepyhead!" The bunny shouted to her swallow friend lying cozily on his bed. "You know what day it is!"
But Phil didn't react, snoring with soft little bird peeps. Laura crossed her arms and pouted. This was Eat Your Friends Day, and she wanted her swallow friend to perform his namesake. Alas, he was sound asleep, with his birdy feet pointing up while lying on his back.
"You lazy butt... Haven't you heard about the early bird and the worms?" Her tongue clicked as she shook her head. "Well... There _might_ be another way to keep this tradition going."
Approaching the mattress and its sleeping occupant, Laura licked her lips and big central teeth. Grabbing the bluish V-shaped tail, the bunny didn't hesitate to place it between her lips and gently suckle on it. There wasn't much flavor to the feathers, but this important occasion wasn't just about gustatory sensations.
With her tongue and paws, she eased more of the heavy sleeper's tail into her jaws, drenching Phil's plumage with more saliva. He didn't even stir, prompting her to squeeze the ticklish feathers into her throat and swallow this end of the swallow.
Scooting forward, her lips approached the juicy part of the bird, and Laura carefully distended her maw to ease his rear into her mouth. He felt so plump and warm and the lagomorph could finally tell apart a gamy taste on her roommate.
As good as the mouthfeel was, she wouldn't dabble for long, as Phil could wake up at any moment and ruin her improvised plans. Her paws pulled his hips towards her, squeezing them with his legs into the heat of her mouth. His bird claws lightly scratching her soft palate felt just divine, so much so that Laura just had to keep going...
Despite being the widest part, the swallow's soft belly entered her incredibly stretched maw with ease. Her esophagus now had some meaty bits to grip, and her muscles helped with devouring her friend whole. Soon, the bunny had her digits around the swallow's back, holding the folded wings snug against his back as she eased them in as well.
By the point that Laura had her hips around his chest, the bird began to stir. His sweet dreams were replaced by something tight, hot, and fleshy gripping all of his lower body, which just didn't feel as agreeable as his cozy bed. He tried to twist, but that odd discomfort creeping up his body was too constricting.
Phil gently yawned and opened his eyes, and they found not just his bedroom, but his roommate, Laura, partially devouring him.
"L-Laura...! What are you doing?!"
"Um'm ee'in' ym, dmmmn!" She couldn't speak with her mouth full.
"S-Stop that and let me out this mmmfmm!!"
She clasped his beak shut, using it like a lever to force the rest of his neck between her jaws. As he tried to struggle, one of his wings broke free, blue feathers glistening with saliva as it thrashed aimlessly. It did nothing to stop his descent into her throat, bapping Laura's face softly by pure chance and doing not much more than tickle her fur.
Feeling his feet being deposited into her stomach, the bunny gulped harder, straining her muscles as she forced the last of Phil's beak between her tongue and palate. She'd crawled onto the bed to keep up her pace, and with just her roommate's wing hanging outside of her maw, she could finally turn around and sit down against the bedframe, letting gravity aid her.
Using one paw to slip the last of his feathers past her teeth, Laura felt her swollen belly with the other hand. Her mouth, throat, and chest were outstretched incredibly wide, but it was her stomach that grew more with each passing moment. It gurgled softly as Phil filled it unwillingly, his claws trying and failing to find purchase against her gastric folds.
With a few more gulps to drag her roommate-turned-snack in, the bunny finally could close her jaws over the last of the swallow's wing, enjoying his unique flavor one last time before finally tossing her head back once more. Phil was completely out of her sight, but he couldn't be closer, as evidenced by the enormous bulge in her fuzzy brown midriff that vaguely had his shape.
"Laura! What the hell!" The bird's muffled voice chirped out, trying to struggle in his tight confines.
She poked her belly teasingly, right at his beak. "What? It's Eat Your Friends Day! And since you were busy snoozing, I had to do something about it..."
"But it's like 7 AM! On a Monday!"
She glanced at his alarm clock. "More like 6 AM... Still! You snooze, you lose. And it doesn't help that you are as appetizing as you look..."
He squirmed at her implications. She wasn't even a real predator she was a herbivore, for crying out loud! If anyone was the predator, it was him... In fact, he was the only one who had vored the other until now. But here he was, her stomach smooshing him to gloat in her achievement.
"Lauraaa...! Let me out, I have work today."
"No way," she huffed out, "and let you eat me instead? Nah, you're staying right there." She hugged her stomach, tightening the grip around the swallowed bird. "I'll call your boss so they know you're taking a sick leave for a day or two."
"Fine... W-Wait, what do you mean a day or _two_?"
The bunny smirked. "Well, it's Eat Your Friends Day. So I'm only supposed to let you out on Let Your Friends Out Day, right?"
Phil chirped a stunned tweet. "You can't be serious! That's not even a real day!"
"Well then," she teasingly rubbed her belly, "I guess there's no rush to let you out, in that case. Better get cozy, birdy... I'm taking you to work today _and_ tomorrow. And maybe for longer..."
The swallow grumbled, and mumbled to himself. "I'll get you back for this..."

Some files were not shown because too many files have changed in this diff Show more