library-tizing synopsis_generator

This commit is contained in:
2026-09-14 18:07:27 -06:00
parent 8708c896aa
commit 707776c12d
3 changed files with 91 additions and 93 deletions
+44
View File
@@ -0,0 +1,44 @@
local prompts = {}
prompts.synopsis_prompt = [[
Generate a lengthy novel synopsis from the following:
]]
prompts.scoring_prompt = [[
You are evaluating novel synopses for development priority. The goal is NOT to judge writing quality, grammar, or polish. The synopsis is only a rough idea. Assign an integer score from 1–100 for each category. Be extremely harsh with your scoring.
1. Hook
2. Originality
3. Memorability
4. Expansion Potential
5. Conflict Potential
6. Character Potential
7. Worldbuilding Potential
8. Emotional Potential
9. Curiosity
10. Overall Promise
Guidelines:
- Avoid clustering scores near the middle. Use the full 1–100 range.
- A score around 50 represents an average publishable premise.
- Scores above 85 should be rare and reserved for genuinely exceptional ideas.
- Scores below 25 should represent ideas with major conceptual weaknesses.
- Return only valid JSON.
Output format:
{
"hook": 0,
"originality": 0,
"memorability": 0,
"expansion_potential": 0,
"conflict_potential": 0,
"character_potential": 0,
"worldbuilding_potential": 0,
"emotional_potential": 0,
"curiosity": 0,
"overall_promise": 0
}
]]
return prompts
+31 -1
View File
@@ -32,7 +32,7 @@ else
}
end
utility.version = "1.6.0"
utility.version = "1.6.0-modified"
-- WARNING: This will return "./" if the original script is called locally instead of with an absolute path!
if arg[0] ~= nil then
utility.path = (arg[0]:match("@?(.*/)") or arg[0]:match("@?(.*\\)")) -- inspired by discussion in https://stackoverflow.com/q/6380820
@@ -235,6 +235,36 @@ utility.ls = function(...)
return utility.list(...)
end
utility.tree = function(path, options, fn)
if type(options) == "function" then
fn = options
options = {}
end
utility.list(path or ".", function(path_name)
if options.blacklist and options.blacklist[path_name] then return end
if options.whitelist and (not options.whitelist[path_name]) then return end
if utility.is_file(path_name) then
fn(path_name)
else
utility.tree(path .. utility.path_separator .. path_name, options, fn)
end
end)
end
utility.read_file = function(file_name)
return utility.open(file_name, "r", function(file)
return file:read("*all")
end)
end
utility.write_file = function(file_name, text)
return utility.open(file_name, "w", function(file)
file:write(text)
file:write("\n")
end)
end
utility.path_exists = function(file_name)
local file = io.open(file_name, "r")
if file then file:close() return true else return false end