fal 1.20.1__py3-none-any.whl → 1.20.3__py3-none-any.whl

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.

Potentially problematic release.


This version of fal might be problematic. Click here for more details.

fal/_fal_version.py CHANGED
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '1.20.1'
21
- __version_tuple__ = version_tuple = (1, 20, 1)
20
+ __version__ = version = '1.20.3'
21
+ __version_tuple__ = version_tuple = (1, 20, 3)
fal/cli/main.py CHANGED
@@ -79,7 +79,6 @@ def _print_error(msg):
79
79
 
80
80
  def _check_latest_version():
81
81
  from packaging.version import parse
82
- from rich.emoji import Emoji
83
82
  from rich.panel import Panel
84
83
  from rich.text import Text
85
84
 
@@ -95,7 +94,6 @@ def _check_latest_version():
95
94
  return
96
95
 
97
96
  line1 = Text.assemble(
98
- (Emoji.replace(":warning-emoji: "), "bold white"),
99
97
  ("A new version of fal is available: ", "bold white"),
100
98
  (latest_version, "bold green"),
101
99
  )
fal/toolkit/__init__.py CHANGED
@@ -1,8 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
- from fal.toolkit.audio.audio import Audio
4
- from fal.toolkit.file import CompressedFile, File
5
- from fal.toolkit.image.image import Image, ImageSizeInput, get_image_size
3
+ from fal.toolkit.audio.audio import Audio, AudioField
4
+ from fal.toolkit.file import CompressedFile, File, FileField
5
+ from fal.toolkit.image.image import Image, ImageField, ImageSizeInput, get_image_size
6
6
  from fal.toolkit.optimize import optimize
7
7
  from fal.toolkit.utils import (
8
8
  FAL_MODEL_WEIGHTS_DIR,
@@ -12,17 +12,21 @@ from fal.toolkit.utils import (
12
12
  download_file,
13
13
  download_model_weights,
14
14
  )
15
- from fal.toolkit.video.video import Video
15
+ from fal.toolkit.video.video import Video, VideoField
16
16
 
17
17
  __all__ = [
18
+ "Audio",
19
+ "AudioField",
18
20
  "CompressedFile",
19
21
  "File",
22
+ "FileField",
20
23
  "Image",
24
+ "ImageField",
21
25
  "ImageSizeInput",
22
26
  "get_image_size",
23
- "Audio",
24
- "Video",
25
27
  "optimize",
28
+ "Video",
29
+ "VideoField",
26
30
  "FAL_MODEL_WEIGHTS_DIR",
27
31
  "FAL_PERSISTENT_DIR",
28
32
  "FAL_REPOSITORY_DIR",
@@ -1,6 +1,18 @@
1
+ from functools import wraps
2
+
3
+ from pydantic import Field
4
+
1
5
  from fal.toolkit.file.file import IS_PYDANTIC_V2, File
2
6
 
3
7
 
8
+ @wraps(Field)
9
+ def AudioField(*args, **kwargs):
10
+ ui = kwargs.get("ui", {})
11
+ ui.setdefault("field", "audio")
12
+ kwargs["ui"] = ui
13
+ return Field(*args, **kwargs)
14
+
15
+
4
16
  class Audio(File):
5
17
  if IS_PYDANTIC_V2:
6
18
  model_config = {"json_schema_extra": {"ui": {"field": "audio"}}}
fal/toolkit/file/file.py CHANGED
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import shutil
4
+ from functools import wraps
4
5
  from pathlib import Path
5
6
  from tempfile import NamedTemporaryFile, mkdtemp
6
7
  from typing import Any, Callable, Optional
@@ -63,6 +64,14 @@ FALLBACK_REPOSITORY: FileRepository | RepositoryId = "fal"
63
64
  OBJECT_LIFECYCLE_PREFERENCE_KEY = "x-fal-object-lifecycle-preference"
64
65
 
65
66
 
67
+ @wraps(Field)
68
+ def FileField(*args, **kwargs):
69
+ ui = kwargs.get("ui", {})
70
+ ui.setdefault("field", "file")
71
+ kwargs["ui"] = ui
72
+ return Field(*args, **kwargs)
73
+
74
+
66
75
  class File(BaseModel):
67
76
  # public properties
68
77
  url: str = Field(
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import io
4
+ from functools import wraps
4
5
  from tempfile import NamedTemporaryFile
5
6
  from typing import TYPE_CHECKING, Literal, Optional, Union
6
7
 
@@ -63,6 +64,14 @@ def get_image_size(source: ImageSizeInput) -> ImageSize:
63
64
  ImageFormat = Literal["png", "jpeg", "jpg", "webp", "gif"]
64
65
 
65
66
 
67
+ @wraps(Field)
68
+ def ImageField(*args, **kwargs):
69
+ ui = kwargs.get("ui", {})
70
+ ui.setdefault("field", "image")
71
+ kwargs["ui"] = ui
72
+ return Field(*args, **kwargs)
73
+
74
+
66
75
  class Image(File):
67
76
  """
68
77
  Represents an image file.
@@ -1,6 +1,18 @@
1
+ from functools import wraps
2
+
3
+ from pydantic import Field
4
+
1
5
  from fal.toolkit.file.file import IS_PYDANTIC_V2, File
2
6
 
3
7
 
8
+ @wraps(Field)
9
+ def VideoField(*args, **kwargs):
10
+ ui = kwargs.get("ui", {})
11
+ ui.setdefault("field", "video")
12
+ kwargs["ui"] = ui
13
+ return Field(*args, **kwargs)
14
+
15
+
4
16
  class Video(File):
5
17
  if IS_PYDANTIC_V2:
6
18
  model_config = {"json_schema_extra": {"ui": {"field": "video"}}}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fal
3
- Version: 1.20.1
3
+ Version: 1.20.3
4
4
  Summary: fal is an easy-to-use Serverless Python Framework
5
5
  Author: Features & Labels <support@fal.ai>
6
6
  Requires-Python: >=3.8
@@ -1,6 +1,6 @@
1
1
  fal/__init__.py,sha256=wXs1G0gSc7ZK60-bHe-B2m0l_sA6TrFk4BxY0tMoLe8,784
2
2
  fal/__main__.py,sha256=4JMK66Wj4uLZTKbF-sT3LAxOsr6buig77PmOkJCRRxw,83
3
- fal/_fal_version.py,sha256=TOsa2f3CpFu7MvtteZ8unn1Fm7CcduyKVyG9QWXEcj8,513
3
+ fal/_fal_version.py,sha256=IX7Kc6XoFUdTUKBG4E_RHh-evn7Pf8bYX8BvjhS7QIw,513
4
4
  fal/_serialization.py,sha256=npXNsFJ5G7jzBeBIyVMH01Ww34mGY4XWhHpRbSrTtnQ,7598
5
5
  fal/_version.py,sha256=1BbTFnucNC_6ldKJ_ZoC722_UkW4S9aDBSW9L0fkKAw,2315
6
6
  fal/api.py,sha256=_TaUcdTUNz5GnjGd3On1FeDSJ0zVJwZQZqAMn3_Yddw,46451
@@ -32,7 +32,7 @@ fal/cli/deploy.py,sha256=CWf0Y56w-hNCrht-qrfgiOi9nuvve1Kl5NFZJpt_oRA,7770
32
32
  fal/cli/doctor.py,sha256=U4ne9LX5gQwNblsYQ27XdO8AYDgbYjTO39EtxhwexRM,983
33
33
  fal/cli/files.py,sha256=pSgAnTm2eHdP-IPkMIVfnK_Ii7mkSSOVgvbsiFUVBC0,2936
34
34
  fal/cli/keys.py,sha256=7Sf4DT4le89G42eAOt0ltRjbZAtE70AVQ62hmjZhUy0,3059
35
- fal/cli/main.py,sha256=ao8EEV_Fkd7AdN5En6k_dZWp158Et5DrqNRutl98MHY,3273
35
+ fal/cli/main.py,sha256=LnJCe83Fdr5-i3Fkpvrd9BZPjHtcX_H1EEmy6rVlCz8,3180
36
36
  fal/cli/parser.py,sha256=jYsGQ0BLQuKI7KtN1jnLVYKMbLtez7hPjwTNfG3UPSk,2964
37
37
  fal/cli/profile.py,sha256=lYOz0S1kr5DW4_r5pB5cEaCHsUEbiPQFmm8HT6_bx9k,3945
38
38
  fal/cli/run.py,sha256=nAC12Qss4Fg1XmV0qOS9RdGNLYcdoHeRgQMvbTN4P9I,1202
@@ -51,21 +51,21 @@ fal/logging/isolate.py,sha256=jIryi46ZVlJ1mfan4HLNQQ3jwMi8z-WwfqqLlttQVkc,2449
51
51
  fal/logging/style.py,sha256=ckIgHzvF4DShM5kQh8F133X53z_vF46snuDHVmo_h9g,386
52
52
  fal/logging/trace.py,sha256=OhzB6d4rQZimBc18WFLqH_9BGfqFFumKKTAGSsmWRMg,1904
53
53
  fal/logging/user.py,sha256=H7Pg-nqhpzsUb5f6uXyZUeLWAsr3oImQEaYSCIIAlqo,818
54
- fal/toolkit/__init__.py,sha256=DoTg1gPpN8fMkBbrtXbW8OF3Se7ShucLntBUu2wOwEI,768
54
+ fal/toolkit/__init__.py,sha256=GR5KxAsNODlhs-DTarJcb5raujActubn0afR7FPueWs,886
55
55
  fal/toolkit/exceptions.py,sha256=elHZ7dHCJG5zlHGSBbz-ilkZe9QUvQMomJFi8Pt91LA,198
56
56
  fal/toolkit/optimize.py,sha256=p75sovF0SmRP6zxzpIaaOmqlxvXB_xEz3XPNf59EF7w,1339
57
57
  fal/toolkit/types.py,sha256=kkbOsDKj1qPGb1UARTBp7yuJ5JUuyy7XQurYUBCdti8,4064
58
58
  fal/toolkit/audio/__init__.py,sha256=sqNVfrKbppWlIGLoFTaaNTxLpVXsFHxOSHLA5VG547A,35
59
- fal/toolkit/audio/audio.py,sha256=_o5zCqBOppmX6_N_vtDkiW6e35XklOMvW71ELo6gfEE,344
59
+ fal/toolkit/audio/audio.py,sha256=gt458h989iQ-EhQSH-mCuJuPBY4RneLJE05f_QWU1E0,572
60
60
  fal/toolkit/file/__init__.py,sha256=FbNl6wD-P0aSSTUwzHt4HujBXrbC3ABmaigPQA4hRfg,70
61
- fal/toolkit/file/file.py,sha256=QITEtOyevDVOjv9iwUEWId7edQ6EBx6Uz6CgqWWJJ-U,9568
61
+ fal/toolkit/file/file.py,sha256=7JWAwDqT3xnfCtPl75x1TpRmtJmWRRVvsGFMNUta3bY,9765
62
62
  fal/toolkit/file/types.py,sha256=MMAH_AyLOhowQPesOv1V25wB4qgbJ3vYNlnTPbdSv1M,2304
63
63
  fal/toolkit/file/providers/fal.py,sha256=vt4Mznbfca6blfk0psF1ix-zB6309kpIA0_5Qh7bmFw,47217
64
64
  fal/toolkit/file/providers/gcp.py,sha256=DKeZpm1MjwbvEsYvkdXUtuLIJDr_UNbqXj_Mfv3NTeo,2437
65
65
  fal/toolkit/file/providers/r2.py,sha256=YqnYkkAo_ZKIa-xoSuDnnidUFwJWHdziAR34PE6irdI,3061
66
66
  fal/toolkit/file/providers/s3.py,sha256=EI45T54Mox7lHZKROss_O8o0DIn3CHP9k1iaNYVrxvg,2714
67
67
  fal/toolkit/image/__init__.py,sha256=m3OatPbBhcEOYyaTu_dgToxunUKoJu4bJVCWUoN7HX4,1838
68
- fal/toolkit/image/image.py,sha256=b0dpPwMuOnMdcIdoM_dZfavrFdji5SplKDmg0ERFfNg,5339
68
+ fal/toolkit/image/image.py,sha256=GwTKEsbpoHLbaIQJuPjq4vKXuSttn2plCLoI_aLuYfI,5538
69
69
  fal/toolkit/image/safety_checker.py,sha256=S7ow-HuoVxC6ixHWWcBrAUm2dIlgq3sTAIull6xIbAg,3105
70
70
  fal/toolkit/image/nsfw_filter/__init__.py,sha256=0d9D51EhcnJg8cZLYJjgvQJDZT74CfQu6mpvinRYRpA,216
71
71
  fal/toolkit/image/nsfw_filter/env.py,sha256=iAP2Q3vzIl--DD8nr8o3o0goAwhExN2v0feYE0nIQjs,212
@@ -77,7 +77,7 @@ fal/toolkit/utils/download_utils.py,sha256=IIb8eLsoFg4Gy-2N0M4trnxFUF75f1pWtjOX_
77
77
  fal/toolkit/utils/endpoint.py,sha256=5EXoshA2PD_brjEfhNWAWasjqLOCRrjBnfhj6QGuMt8,782
78
78
  fal/toolkit/utils/retry.py,sha256=0pnKqs1Y2dADMAk2944FZr68ZL3wQC_5hqApfgyMf_8,1531
79
79
  fal/toolkit/video/__init__.py,sha256=YV0jWpuvoA_CDFQXhd3zOvilFLKH7DYARrbzR7hWhpE,35
80
- fal/toolkit/video/video.py,sha256=U2hIIaIKCB_ZStYgQjpMTNrVONklq6fcqj-IT9jA7nE,344
80
+ fal/toolkit/video/video.py,sha256=dHNMdV_zJHiJMzlfIiyDv7tqJBsD32aoc3Ao0t1nKNk,572
81
81
  openapi_fal_rest/__init__.py,sha256=ziculmF_i6trw63LzZGFX-6W3Lwq9mCR8_UpkpvpaHI,152
82
82
  openapi_fal_rest/client.py,sha256=G6BpJg9j7-JsrAUGddYwkzeWRYickBjPdcVgXoPzxuE,2817
83
83
  openapi_fal_rest/errors.py,sha256=8mXSxdfSGzxT82srdhYbR0fHfgenxJXaUtMkaGgb6iU,470
@@ -141,8 +141,8 @@ openapi_fal_rest/models/workflow_node_type.py,sha256=-FzyeY2bxcNmizKbJI8joG7byRi
141
141
  openapi_fal_rest/models/workflow_schema.py,sha256=4K5gsv9u9pxx2ItkffoyHeNjBBYf6ur5bN4m_zePZNY,2019
142
142
  openapi_fal_rest/models/workflow_schema_input.py,sha256=2OkOXWHTNsCXHWS6EGDFzcJKkW5FIap-2gfO233EvZQ,1191
143
143
  openapi_fal_rest/models/workflow_schema_output.py,sha256=EblwSPAGfWfYVWw_WSSaBzQVju296is9o28rMBAd0mc,1196
144
- fal-1.20.1.dist-info/METADATA,sha256=wIvviHSTRAlZps2vuoaqrOMhMc9fu0LxQg6izAEAcrM,4085
145
- fal-1.20.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
146
- fal-1.20.1.dist-info/entry_points.txt,sha256=32zwTUC1U1E7nSTIGCoANQOQ3I7-qHG5wI6gsVz5pNU,37
147
- fal-1.20.1.dist-info/top_level.txt,sha256=r257X1L57oJL8_lM0tRrfGuXFwm66i1huwQygbpLmHw,21
148
- fal-1.20.1.dist-info/RECORD,,
144
+ fal-1.20.3.dist-info/METADATA,sha256=y_2g-JFFDeR1-oz109WcvtuXu06eABfm81eECV_N_VI,4085
145
+ fal-1.20.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
146
+ fal-1.20.3.dist-info/entry_points.txt,sha256=32zwTUC1U1E7nSTIGCoANQOQ3I7-qHG5wI6gsVz5pNU,37
147
+ fal-1.20.3.dist-info/top_level.txt,sha256=r257X1L57oJL8_lM0tRrfGuXFwm66i1huwQygbpLmHw,21
148
+ fal-1.20.3.dist-info/RECORD,,
File without changes