-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
16d7651
commit 3d0fab9
Showing
1 changed file
with
188 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,188 @@ | ||
{ | ||
"cells": [ | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"# Create Stash app client\n", | ||
"\n", | ||
"import pandas as pd\n", | ||
"import dotenv\n", | ||
"\n", | ||
"from libraries.client_stashapp import get_stashapp_client\n", | ||
"\n", | ||
"dotenv.load_dotenv()\n", | ||
"\n", | ||
"stash = get_stashapp_client()" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"from dataclasses import dataclass\n", | ||
"\n", | ||
"\n", | ||
"@dataclass\n", | ||
"class TagConversion:\n", | ||
" ai_tag: any\n", | ||
" target_tag: any\n", | ||
"\n", | ||
"tag_conversion = {\n", | ||
" \"Anal Fucking_AI\": \"Anal\",\n", | ||
" \"Ass Penetration_AI\": \"Anal\",\n", | ||
" \"Anal Gape_AI\": \"Anal Gape\",\n", | ||
" \"Ball Licking/Sucking_AI\": \"Ball Licking\",\n", | ||
" \"Blowjob_AI\": \"Blowjob\",\n", | ||
" \"Cumshot_AI\": \"Cumshot\",\n", | ||
" \"Cum on Person_AI\": \"Cumshot\",\n", | ||
" \"Deepthroat_AI\": \"Deepthroat\",\n", | ||
" \"Fingering_AI\": \"Fingering\",\n", | ||
" \"Grabbing Ass_AI\": \"Ass Grabbing\",\n", | ||
" \"Grabbing Boobs_AI\": \"Breast Squeezing\",\n", | ||
" \"Grabbing Hair/Head_AI\": \"Grabbing Hair/Head\",\n", | ||
" \"Handjob_AI\": \"Handjob\",\n", | ||
" \"Kissing_AI\": \"Kissing\",\n", | ||
" \"Licking Penis_AI\": \"Dick Licking\",\n", | ||
" \"Masturbation_AI\": \"Masturbation\",\n", | ||
" \"Pissing_AI\": \"Peeing\",\n", | ||
" \"Pussy Licking_AI\": \"Pussy Licking\",\n", | ||
" \"Pussy Licking (Clearly Visible)_AI\": \"Pussy Licking\",\n", | ||
" \"Pussy Rubbing_AI\": \"Pussy Rubbing\",\n", | ||
" \"Sucking Toy/Dildo_AI\": \"Toy Sucking\",\n", | ||
" \"Undressing_AI\": \"Striptease\",\n", | ||
" \"Vaginal Fucking_AI\": \"Vaginal Sex\",\n", | ||
" \"Vaginal Penetration_AI\": \"Vaginal Penetration\",\n", | ||
" \"Wet (Genitals)_AI\": \"Wet Genitals\"\n", | ||
"}\n", | ||
"\n", | ||
"stash_tag_conversion = {}\n", | ||
"\n", | ||
"for ai_tag_name in tag_conversion.keys():\n", | ||
" target_tag_name = tag_conversion[ai_tag_name]\n", | ||
"\n", | ||
" ai_tag = stash.find_tag(ai_tag_name)\n", | ||
" if not ai_tag:\n", | ||
" raise Exception(\"Could not find tag: \" + ai_tag_name)\n", | ||
" \n", | ||
" target_tag = stash.find_tag(target_tag_name)\n", | ||
" if not target_tag:\n", | ||
" raise Exception(\"Could not find tag: \" + tag_conversion[ai_tag_name])\n", | ||
"\n", | ||
" stash_tag_conversion[ai_tag[\"id\"]] = TagConversion(ai_tag, target_tag)\n" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"ai_reviewed_tag = stash.find_tag(\"AI_Reviewed\")\n", | ||
"ai_reviewed_tag_id = ai_reviewed_tag[\"id\"]" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"scene_id = 18562\n", | ||
"\n", | ||
"markers = stash.get_scene_markers(scene_id)\n", | ||
"ai_markers = [m for m in markers if m[\"title\"].endswith(\"_AI\")]" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"for ai_marker in ai_markers:\n", | ||
" marker_ai_tag_id = ai_marker[\"primary_tag\"][\"id\"]\n", | ||
"\n", | ||
" if marker_ai_tag_id not in stash_tag_conversion:\n", | ||
" print(\"Could find conversion for tag: \" + ai_marker[\"primary_tag\"][\"name\"])\n", | ||
" continue\n", | ||
"\n", | ||
" marker_target_tag = stash_tag_conversion[marker_ai_tag_id].target_tag\n", | ||
" if not marker_target_tag:\n", | ||
" print(\"Could not find target tag for: \" + ai_marker[\"primary_tag\"][\"name\"])\n", | ||
" continue\n", | ||
"\n", | ||
" update_marker = stash.update_scene_marker({\n", | ||
" \"id\": ai_marker[\"id\"],\n", | ||
" \"scene_id\": ai_marker[\"scene\"][\"id\"],\n", | ||
" \"title\": marker_target_tag[\"name\"],\n", | ||
" \"primary_tag_id\": marker_target_tag[\"id\"],\n", | ||
" \"tag_ids\": []\n", | ||
" })\n", | ||
"\n", | ||
"scene = stash.find_scene(scene_id)\n", | ||
"scene_tags = scene[\"tags\"]\n", | ||
"print(\"Existing tags:\")\n", | ||
"print([f\"{t[\"id\"]}: {t[\"name\"]}\" for t in scene_tags])\n", | ||
"\n", | ||
"ai_marker_tags = [m[\"primary_tag\"][\"id\"] for m in ai_markers]\n", | ||
"ai_tags = [t for t in scene_tags if t[\"id\"] in ai_marker_tags]\n", | ||
"non_ai_tags = [t for t in scene_tags if t[\"id\"] not in ai_marker_tags]\n", | ||
"\n", | ||
"print(\"AI tags:\")\n", | ||
"print([f\"{t[\"id\"]}: {t[\"name\"]}\" for t in ai_tags])\n", | ||
"\n", | ||
"print(\"Non AI tags:\")\n", | ||
"print([f\"{t[\"id\"]}: {t[\"name\"]}\" for t in non_ai_tags])\n", | ||
"\n", | ||
"non_ai_tags_ids = [t[\"id\"] for t in non_ai_tags]\n", | ||
"\n", | ||
"update_scene = stash.update_scene({\n", | ||
" \"id\": scene_id,\n", | ||
" \"tag_ids\": non_ai_tags_ids\n", | ||
"})" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"scene = stash.find_scene(scene_id)\n", | ||
"scene_tags = scene[\"tags\"]\n", | ||
"scene_tag_ids = [t[\"id\"] for t in scene_tags] + [ai_reviewed_tag_id]\n", | ||
"\n", | ||
"update_scene = stash.update_scene({\n", | ||
" \"id\": scene_id,\n", | ||
" \"tag_ids\": scene_tag_ids\n", | ||
"})" | ||
] | ||
} | ||
], | ||
"metadata": { | ||
"kernelspec": { | ||
"display_name": "name_of_my_env", | ||
"language": "python", | ||
"name": "python3" | ||
}, | ||
"language_info": { | ||
"codemirror_mode": { | ||
"name": "ipython", | ||
"version": 3 | ||
}, | ||
"file_extension": ".py", | ||
"mimetype": "text/x-python", | ||
"name": "python", | ||
"nbconvert_exporter": "python", | ||
"pygments_lexer": "ipython3", | ||
"version": "3.12.4" | ||
} | ||
}, | ||
"nbformat": 4, | ||
"nbformat_minor": 2 | ||
} |