novelai-python 0.7.3__tar.gz → 0.7.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. {novelai_python-0.7.3 → novelai_python-0.7.5}/PKG-INFO +7 -7
  2. {novelai_python-0.7.3 → novelai_python-0.7.5}/README.md +6 -6
  3. {novelai_python-0.7.3 → novelai_python-0.7.5}/pyproject.toml +1 -1
  4. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/credential/ApiToken.py +1 -1
  5. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/ai/_enum.py +1 -1
  6. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/ai/generate_image/__init__.py +12 -25
  7. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/ai/generate_voice/__init__.py +1 -1
  8. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/ai/generate_voice/_enum.py +12 -12
  9. {novelai_python-0.7.3 → novelai_python-0.7.5}/LICENSE +0 -0
  10. {novelai_python-0.7.3 → novelai_python-0.7.5}/NOTICE.MD +0 -0
  11. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/__init__.py +0 -0
  12. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/_enum.py +0 -0
  13. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/_exceptions.py +0 -0
  14. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/_response/__init__.py +0 -0
  15. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/_response/ai/__init__.py +0 -0
  16. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/_response/ai/generate.py +0 -0
  17. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/_response/ai/generate_image.py +0 -0
  18. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/_response/ai/generate_stream.py +0 -0
  19. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/_response/ai/generate_voice.py +0 -0
  20. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/_response/ai/upscale.py +0 -0
  21. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/_response/schema.py +0 -0
  22. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/_response/user/__init__.py +0 -0
  23. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/_response/user/information.py +0 -0
  24. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/_response/user/login.py +0 -0
  25. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/_response/user/subscription.py +0 -0
  26. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/credential/JwtToken.py +0 -0
  27. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/credential/UserAuth.py +0 -0
  28. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/credential/__init__.py +0 -0
  29. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/credential/_base.py +0 -0
  30. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/__init__.py +0 -0
  31. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/ai/LICENSE +0 -0
  32. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/ai/__init__.py +0 -0
  33. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/ai/_const.py +0 -0
  34. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/ai/_cost.py +0 -0
  35. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/ai/augment_image/__init__.py +0 -0
  36. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/ai/augment_image/_enum.py +0 -0
  37. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/ai/generate/__init__.py +0 -0
  38. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/ai/generate/_const.py +0 -0
  39. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/ai/generate/_enum.py +0 -0
  40. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/ai/generate/_schema.py +0 -0
  41. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/ai/generate/themes.json +0 -0
  42. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/ai/generate_image/schema.py +0 -0
  43. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/ai/generate_image/suggest_tags.py +0 -0
  44. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/ai/generate_stream.py +0 -0
  45. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/ai/upscale.py +0 -0
  46. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/schema.py +0 -0
  47. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/user/__init__.py +0 -0
  48. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/user/information.py +0 -0
  49. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/user/login.py +0 -0
  50. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/sdk/user/subscription.py +0 -0
  51. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/server.py +0 -0
  52. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/tokenizer/__init__.py +0 -0
  53. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/tokenizer/clip_simple_tokenizer.py +0 -0
  54. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/tokenizer/nerdstash_v1.model +0 -0
  55. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/tokenizer/nerdstash_v2.model +0 -0
  56. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/tokenizer/novelai.model +0 -0
  57. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/tokenizer/novelai_v2.model +0 -0
  58. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/tool/__init__.py +0 -0
  59. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/tool/image_metadata/__init__.py +0 -0
  60. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/tool/image_metadata/bch_utils.py +0 -0
  61. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/tool/image_metadata/lsb_extractor.py +0 -0
  62. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/tool/image_metadata/lsb_injector.py +0 -0
  63. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/tool/paint_mask/__init__.py +0 -0
  64. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/tool/random_prompt/__init__.py +0 -0
  65. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/tool/random_prompt/generate_scene_composition.py +0 -0
  66. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/tool/random_prompt/generate_scene_tags.py +0 -0
  67. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/tool/random_prompt/generate_tags.py +0 -0
  68. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/utils/__init__.py +0 -0
  69. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/utils/encode.py +0 -0
  70. {novelai_python-0.7.3 → novelai_python-0.7.5}/src/novelai_python/utils/useful.py +0 -0
  71. {novelai_python-0.7.3 → novelai_python-0.7.5}/tests/__init__.py +0 -0
  72. {novelai_python-0.7.3 → novelai_python-0.7.5}/tests/test_generate_voice.py +0 -0
  73. {novelai_python-0.7.3 → novelai_python-0.7.5}/tests/test_random_prompt.py +0 -0
  74. {novelai_python-0.7.3 → novelai_python-0.7.5}/tests/test_server.py +0 -0
  75. {novelai_python-0.7.3 → novelai_python-0.7.5}/tests/test_server_run.py +0 -0
  76. {novelai_python-0.7.3 → novelai_python-0.7.5}/tests/test_tokenizer.py +0 -0
  77. {novelai_python-0.7.3 → novelai_python-0.7.5}/tests/test_upscale.py +0 -0
  78. {novelai_python-0.7.3 → novelai_python-0.7.5}/tests/test_user_information.py +0 -0
  79. {novelai_python-0.7.3 → novelai_python-0.7.5}/tests/test_user_login.py +0 -0
  80. {novelai_python-0.7.3 → novelai_python-0.7.5}/tests/test_user_subscription.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: novelai-python
3
- Version: 0.7.3
3
+ Version: 0.7.5
4
4
  Summary: NovelAI Python Binding With Pydantic
5
5
  Author-Email: sudoskys <coldlando@hotmail.com>
6
6
  License: Apache License 2.0
@@ -81,7 +81,7 @@ load_dotenv()
81
81
  session = ApiCredential(api_token=SecretStr(os.getenv("NOVELAI_JWT"))) # pst-***
82
82
  # For security reasons, storing user credentials in plaintext is strongly discouraged.
83
83
 
84
- prompt = "1girl, year 2023,dynamic angle, best quality, amazing quality, very aesthetic, absurdres"
84
+ prompt = "2girls, fisheye, closeup, from above"
85
85
 
86
86
 
87
87
  async def main():
@@ -90,19 +90,19 @@ async def main():
90
90
  model=Model.NAI_DIFFUSION_4_CURATED_PREVIEW,
91
91
  character_prompts=[
92
92
  Character(
93
- prompt="1girl",
93
+ prompt="1girl, head tilt, short hair, black hair, grey eyes, small breasts, looking at viewer",
94
94
  uc="red hair",
95
- center=PositionMap.AUTO
95
+ center=PositionMap.B2
96
96
  ),
97
97
  Character(
98
- prompt="1boy",
99
- center=PositionMap.E5
98
+ prompt="1girl, fox ears, fox tail, white hair, white tail, white ears",
99
+ uc="black hair",
100
+ center=PositionMap.D2
100
101
  )
101
102
  ],
102
103
  sampler=Sampler.K_EULER_ANCESTRAL,
103
104
  ucPreset=UCPreset.TYPE0,
104
105
  # Recommended, using preset negative_prompt depends on selected model
105
- qualitySuffix=True,
106
106
  qualityToggle=True,
107
107
  decrisp_mode=False,
108
108
  variety_boost=True,
@@ -43,7 +43,7 @@ load_dotenv()
43
43
  session = ApiCredential(api_token=SecretStr(os.getenv("NOVELAI_JWT"))) # pst-***
44
44
  # For security reasons, storing user credentials in plaintext is strongly discouraged.
45
45
 
46
- prompt = "1girl, year 2023,dynamic angle, best quality, amazing quality, very aesthetic, absurdres"
46
+ prompt = "2girls, fisheye, closeup, from above"
47
47
 
48
48
 
49
49
  async def main():
@@ -52,19 +52,19 @@ async def main():
52
52
  model=Model.NAI_DIFFUSION_4_CURATED_PREVIEW,
53
53
  character_prompts=[
54
54
  Character(
55
- prompt="1girl",
55
+ prompt="1girl, head tilt, short hair, black hair, grey eyes, small breasts, looking at viewer",
56
56
  uc="red hair",
57
- center=PositionMap.AUTO
57
+ center=PositionMap.B2
58
58
  ),
59
59
  Character(
60
- prompt="1boy",
61
- center=PositionMap.E5
60
+ prompt="1girl, fox ears, fox tail, white hair, white tail, white ears",
61
+ uc="black hair",
62
+ center=PositionMap.D2
62
63
  )
63
64
  ],
64
65
  sampler=Sampler.K_EULER_ANCESTRAL,
65
66
  ucPreset=UCPreset.TYPE0,
66
67
  # Recommended, using preset negative_prompt depends on selected model
67
- qualitySuffix=True,
68
68
  qualityToggle=True,
69
69
  decrisp_mode=False,
70
70
  variety_boost=True,
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "novelai-python"
3
- version = "0.7.3"
3
+ version = "0.7.5"
4
4
  description = "NovelAI Python Binding With Pydantic"
5
5
  authors = [
6
6
  { name = "sudoskys", email = "coldlando@hotmail.com" },
@@ -42,5 +42,5 @@ class ApiCredential(CredentialBase):
42
42
  @field_validator('api_token')
43
43
  def check_api_token(cls, v: SecretStr):
44
44
  if not v.get_secret_value().startswith("pst"):
45
- logger.warning("api token should start with pst-")
45
+ logger.warning("api token should start with `pst-`")
46
46
  return v
@@ -281,7 +281,7 @@ def get_modifiers(model: Model) -> Modifier:
281
281
  if model in [Model.CUSTOM, Model.NAI_DIFFUSION_4_CURATED_PREVIEW]:
282
282
  return Modifier(
283
283
  qualityTags="",
284
- suffix=", rating:general, amazing quality, very aesthetic, absurdres"
284
+ suffix=", rating:general, best quality, very aesthetic, absurdres"
285
285
  )
286
286
  if model in [Model.NAI_DIFFUSION_2]:
287
287
  return Modifier(
@@ -344,10 +344,18 @@ class Params(BaseModel):
344
344
 
345
345
  class GenerateImageInfer(ApiBaseModel):
346
346
  _endpoint: str = PrivateAttr("https://image.novelai.net")
347
+ """Endpoint"""
348
+
349
+ @property
350
+ def endpoint(self):
351
+ return self._endpoint
352
+
353
+ @endpoint.setter
354
+ def endpoint(self, value):
355
+ self._endpoint = value
356
+
347
357
  _mutual_exclusion: bool = PrivateAttr(False)
348
358
  """Positive words and negative words are mutually exclusive, and conflicting negative words are deleted first."""
349
- _quality_modifier: bool = PrivateAttr(True)
350
- """Add Quality Modifier To Input"""
351
359
 
352
360
  def set_mutual_exclusion(self, value: bool):
353
361
  """
@@ -361,27 +369,6 @@ class GenerateImageInfer(ApiBaseModel):
361
369
  self._mutual_exclusion = bool(value)
362
370
  return self
363
371
 
364
- def set_quality_modifier(self, value: bool):
365
- """
366
- **Enable This will modify the input prompt.**
367
- Default is True.
368
-
369
- Add Quality Modifier To Input.
370
- Whether to add the quality vocabulary used by the web application.
371
- :param value:
372
- :return:
373
- """
374
- self._quality_modifier = bool(value)
375
- return self
376
-
377
- @property
378
- def endpoint(self):
379
- return self._endpoint
380
-
381
- @endpoint.setter
382
- def endpoint(self, value):
383
- self._endpoint = value
384
-
385
372
  action: Union[str, Action] = Field(Action.GENERATE, description="Mode for img generate")
386
373
  input: str = "1girl, best quality, amazing quality, very aesthetic, absurdres"
387
374
  model: ModelTypeAlias = "nai-diffusion-3"
@@ -467,8 +454,8 @@ class GenerateImageInfer(ApiBaseModel):
467
454
  )
468
455
  return _prompt
469
456
 
470
- if self._quality_modifier:
471
- logger.trace("Enhancing input with quality modifier, will modify input prompt.")
457
+ if self.parameters.qualityToggle:
458
+ logger.trace("Enhancing input with qualityToggle, will modify input prompt.")
472
459
  self.input = enhance_message(self.input)
473
460
 
474
461
  if self._mutual_exclusion:
@@ -107,7 +107,7 @@ class VoiceGenerate(ApiBaseModel):
107
107
  return cls(
108
108
  text=text,
109
109
  seed=speaker.seed,
110
- voice=speaker.voice,
110
+ voice=speaker.sid,
111
111
  opus=opus,
112
112
  version=speaker.version
113
113
  )
@@ -7,30 +7,30 @@ class Speaker(BaseModel):
7
7
  """
8
8
  Speaker for /ai/generated_voice
9
9
  """
10
- voice: int = -1
10
+ sid: int = -1
11
11
  seed: str = "kurumuz12"
12
12
  name: str
13
13
  category: str
14
14
 
15
15
  @property
16
16
  def version(self):
17
- return "v2" if self.voice == -1 else "v1"
17
+ return "v2" if self.sid == -1 else "v1"
18
18
 
19
19
 
20
20
  class VoiceSpeakerV1(Enum):
21
21
  """
22
22
  Speaker for /ai/generated_voice
23
23
  """
24
- Cyllene = Speaker(voice=17, name="Cyllene", category="female")
25
- Leucosia = Speaker(voice=95, name="Leucosia", category="female")
26
- Crina = Speaker(voice=44, name="Crina", category="female")
27
- Hespe = Speaker(voice=80, name="Hespe", category="female")
28
- Ida = Speaker(voice=106, name="Ida", category="female")
29
- Alseid = Speaker(voice=6, name="Alseid", category="male")
30
- Daphnis = Speaker(voice=10, name="Daphnis", category="male")
31
- Echo = Speaker(voice=16, name="Echo", category="male")
32
- Thel = Speaker(voice=41, name="Thel", category="male")
33
- Nomios = Speaker(voice=77, name="Nomios", category="male")
24
+ Cyllene = Speaker(sid=17, name="Cyllene", category="female")
25
+ Leucosia = Speaker(sid=95, name="Leucosia", category="female")
26
+ Crina = Speaker(sid=44, name="Crina", category="female")
27
+ Hespe = Speaker(sid=80, name="Hespe", category="female")
28
+ Ida = Speaker(sid=106, name="Ida", category="female")
29
+ Alseid = Speaker(sid=6, name="Alseid", category="male")
30
+ Daphnis = Speaker(sid=10, name="Daphnis", category="male")
31
+ Echo = Speaker(sid=16, name="Echo", category="male")
32
+ Thel = Speaker(sid=41, name="Thel", category="male")
33
+ Nomios = Speaker(sid=77, name="Nomios", category="male")
34
34
  # SeedInput = Speaker(sid=-1, name="Seed Input", category="custom")
35
35
 
36
36
 
File without changes
File without changes