script.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. from pathlib import Path
  2. import gradio as gr
  3. from modules.html_generator import image_to_base64
  4. def generate_html():
  5. css = """
  6. .character-gallery table {
  7. border-collapse: collapse;
  8. table-layout: fixed;
  9. width: 100%;
  10. }
  11. .character-gallery th, .character-gallery td {
  12. padding: 8px;
  13. }
  14. .character-gallery img {
  15. width: 150px;
  16. height: 200px;
  17. object-fit: cover;
  18. }
  19. .character-gallery .placeholder {
  20. width: 150px;
  21. height: 200px;
  22. background-color: gray;
  23. }
  24. .character-gallery .image-td {
  25. width: 150px;
  26. }
  27. .character-gallery .character-td {
  28. text-align: center !important;
  29. }
  30. """
  31. table_html = f'<style>{css}</style><div class="character-gallery"><table>'
  32. # Iterate through files in image folder
  33. for file in Path("characters").glob("*"):
  34. if file.name.endswith(".json"):
  35. character = file.name.replace(".json", "")
  36. table_html += "<tr>"
  37. image_html = "<div class='placeholder'></div>"
  38. for i in [
  39. f"characters/{character}.png",
  40. f"characters/{character}.jpg",
  41. f"characters/{character}.jpeg",
  42. ]:
  43. path = Path(i)
  44. if path.exists():
  45. try:
  46. image_html = f'<img src="data:image/png;base64,{image_to_base64(path)}">'
  47. break
  48. except:
  49. continue
  50. table_html += f'<td class="image-td"=>{image_html}</td><td class="character-td">{character}</td>'
  51. table_html += "</tr>"
  52. table_html += "</table></div>"
  53. return table_html
  54. def ui():
  55. with gr.Accordion("Character gallery"):
  56. update = gr.Button("Refresh")
  57. gallery = gr.HTML(value=generate_html())
  58. update.click(generate_html, [], gallery)